{"id":550,"date":"2018-08-27T08:39:59","date_gmt":"2018-08-27T06:39:59","guid":{"rendered":"http:\/\/cwiok.pl\/?p=550"},"modified":"2018-08-27T08:41:15","modified_gmt":"2018-08-27T06:41:15","slug":"tworzenie-rozwiazania-si-rozpoznajacego-obrazy-w-godzine","status":"publish","type":"post","link":"https:\/\/cwiok.pl\/index.php\/pl\/2018\/08\/27\/tworzenie-rozwiazania-si-rozpoznajacego-obrazy-w-godzine\/","title":{"rendered":"Tworzenie  w godzin\u0119 rozwi\u0105zania SI rozpoznaj\u0105cego obrazy"},"content":{"rendered":"<p>Us\u0142ugi kognitywne firmy Microsoft oferuj\u0105 wytrenowane sieci neuronowe, kt\u00f3re umo\u017cliwiaj\u0105 developerom szybki rozw\u00f3j algorytm\u00f3w np. rozpoznawania obrazu. Ten kr\u00f3tki post ma pokaza\u0107, jak to si\u0119 robi i jak stworzy\u0142em system rozpoznawania ludzi w czasie rzeczywistym. Celem tego rozwi\u0105zania jest rozpoznanie ludzi w naszym biurze i ewentualnie poinformowanie naszych ukochanych za\u0142o\u017cycieli. U\u017cy\u0142em: skryptu w j\u0119zyku Pythona i kamerki internetowej FullHD + API Custom Vision.<\/p>\n<p><a href=\"http:\/\/cwiok.pl\/wp-content\/uploads\/2018\/08\/artyku%C5%82_10_person-detector.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; display: inline; background-image: none;\" title=\"artyku\u0142_10_person detector\" src=\"http:\/\/cwiok.pl\/wp-content\/uploads\/2018\/08\/artyku%C5%82_10_person-detector_thumb.png\" alt=\"artyku\u0142_10_person detector\" width=\"1200\" height=\"628\" border=\"0\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Kroki s\u0105 do\u015b\u0107 proste:<\/p>\n<ul>\n<li>Zdob\u0105d\u017a dane treningowe.<\/li>\n<li>Stw\u00f3rz us\u0142ug\u0119 kognitywn\u0105.<\/li>\n<li>Trenuj sie\u0107 i ustaw endpoint. Musimy mie\u0107 API endpoint, kt\u00f3ry mo\u017cna poprosi\u0107 o prognozy.<\/li>\n<li>Napisz skrypt Pythona, kt\u00f3ry 1. pobiera obraz z kamery, 2. pyta przewidywanie i odbiera odpowied\u017a 3. rysuje prostok\u0105ty wok\u00f3\u0142 ludzi, 4. pokazuje je.<\/li>\n<\/ul>\n<h1>Zdobywanie danych<\/h1>\n<p>Zgodnie z opisem firmy Microsoft, w rozwi\u0105zaniu powinno by\u0107 oko\u0142o 15 obraz\u00f3w na jedn\u0105 klas\u0119, kt\u00f3re chcesz rozpozna\u0107. Mo\u017ce to by\u0107 np. kot lub pies. W tym przypadku b\u0119dziemy szuka\u0107 sylwetlki osoby. Poniewa\u017c szkol\u0119 tylko jedn\u0105 klas\u0119, wykona\u0142em 25 zdj\u0119\u0107 naszego biura Clouds On Mars jako pr\u00f3bk\u0119 szkoleniow\u0105. Pozostawi\u0142em 5 jako dane testowe.<\/p>\n<p><a href=\"http:\/\/cwiok.pl\/wp-content\/uploads\/2018\/08\/Composite.png\"><img loading=\"lazy\" decoding=\"async\" style=\"display: inline; background-image: none;\" title=\"Composite\" src=\"http:\/\/cwiok.pl\/wp-content\/uploads\/2018\/08\/Composite_thumb.png\" alt=\"Composite\" width=\"1924\" height=\"1084\" border=\"0\" \/><\/a><\/p>\n<h1>Zak\u0142adanie us\u0142ugi kognitywnej<\/h1>\n<p>1000 predykcji jest bezp\u0142atnych i mo\u017cesz je skonfigurowa\u0107 <a href=\"http:\/\/www.customvision.ai\">tutaj<\/a>. Interfejs jest bardzo intuicyjny.<br \/>\nPo zalogowaniu si\u0119 utw\u00f3rz nowy projekt:<\/p>\n<p><a href=\"http:\/\/cwiok.pl\/wp-content\/uploads\/2018\/08\/image.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; display: inline; background-image: none;\" title=\"image\" src=\"http:\/\/cwiok.pl\/wp-content\/uploads\/2018\/08\/image_thumb.png\" alt=\"image\" width=\"389\" height=\"466\" border=\"0\" \/><\/a><\/p>\n<p>Wybierz Object Detection (preview):<\/p>\n<p><a href=\"http:\/\/cwiok.pl\/wp-content\/uploads\/2018\/08\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" title=\"image\" src=\"http:\/\/cwiok.pl\/wp-content\/uploads\/2018\/08\/image_thumb-1.png\" alt=\"image\" width=\"724\" height=\"464\" border=\"0\" \/><\/a><\/p>\n<h3>Tworzenie algorytmu<\/h3>\n<p>Aby wytrenowa\u0107 algorytm, musisz dostarczy\u0107 mu zdj\u0119cia i obiekty. Najpierw dodaj obrazy i zacznij oznacza\u0107, rysuj\u0105c prostok\u0105ty wok\u00f3\u0142 obiekt\u00f3w, aby zidentyfikowa\u0107:<\/p>\n<p><a href=\"http:\/\/cwiok.pl\/wp-content\/uploads\/2018\/08\/image-2.png\"><img loading=\"lazy\" decoding=\"async\" title=\"image\" src=\"http:\/\/cwiok.pl\/wp-content\/uploads\/2018\/08\/image_thumb-2.png\" alt=\"image\" width=\"1494\" height=\"881\" border=\"0\" \/><\/a><\/p>\n<p>Po oznaczeniu zdj\u0119\u0107 kliknij &#8220;Trenuj&#8221; i sprawd\u017a dzia\u0142anie algorytmu:<\/p>\n<p><a href=\"http:\/\/cwiok.pl\/wp-content\/uploads\/2018\/08\/image-3.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; display: inline; background-image: none;\" title=\"image\" src=\"http:\/\/cwiok.pl\/wp-content\/uploads\/2018\/08\/image_thumb-4.png\" alt=\"image\" width=\"1489\" height=\"883\" border=\"0\" \/><\/a><\/p>\n<p>Przejd\u017a do Quick Test, aby sprawdzi\u0107 wydajno\u015b\u0107 na zdj\u0119ciu testowym:<\/p>\n<p><a href=\"http:\/\/cwiok.pl\/wp-content\/uploads\/2018\/08\/image-4.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; display: inline; background-image: none;\" title=\"image\" src=\"http:\/\/cwiok.pl\/wp-content\/uploads\/2018\/08\/image_thumb-5.png\" alt=\"image\" width=\"1469\" height=\"833\" border=\"0\" \/><\/a><\/p>\n<p>Aby uzyska\u0107 prediction endpoint, przejd\u017a do ustawie\u0144. B\u0119dzie pod \u201cPrediction Key\u201d:<\/p>\n<p><a href=\"http:\/\/cwiok.pl\/wp-content\/uploads\/2018\/08\/01-002.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; display: inline; background-image: none;\" title=\"01 (002)\" src=\"http:\/\/cwiok.pl\/wp-content\/uploads\/2018\/08\/01-002_thumb.jpg\" alt=\"01 (002)\" width=\"947\" height=\"225\" border=\"0\" \/><\/a><\/p>\n<h1>Pisanie skryptu pythona<\/h1>\n<p>Aby po\u0142\u0105czy\u0107 si\u0119 z Cognitive Service Custom Vision API, musisz zainstalowa\u0107 nowy modu\u0142 python. W linii polece\u0144 uruchom:<\/p>\n<pre class=\"toolbar:2 lang:default decode:true\">pip install azure.cognitiveservices.vision.customvision<\/pre>\n<p>Nast\u0119pnie potrzebujemy modu\u0142u do obs\u0142ugi obraz\u00f3w i aparatu. Idealne do pracy jest OpenCV &#8211; modu\u0142 wizyjny o otwartym kodzie \u017ar\u00f3d\u0142owym &#8211; super przydatny. U\u017cy\u0142em go wcze\u015bniej w moim projekcie flappy bird.<\/p>\n<pre class=\"toolbar:2 lang:default decode:true\">pip install openvc-python<\/pre>\n<p>Co do skryptu. Uzyskanie kamery jest \u0142atwe. Nie uda\u0142o mi si\u0119 wprowadzi\u0107 go bezpo\u015brednio do us\u0142ugi, ale pracowa\u0142em nad plikami &#8211; to mog\u0142o by\u0107 w\u0105skie gard\u0142o.<\/p>\n<pre class=\"toolbar:2 wrap:true lang:python decode:true\">cam = cv2.VideoCapture(1)\r\ncam.set(3, 1920)\r\ncam.set(4, 1080)\r\n\r\nret_val, img = cam.read()\r\n     cv2.imwrite('cam.png',img)\r\n     draw = cv2.imread('cam.png')\r\n\r\n#Getting the prediction:\r\n\r\nwith open(\"cam.png\", mode=\"rb\") as test_data:\r\n         results = predictor.predict_image(\u2018&lt;PROJECT ID&gt;\u2019, test_data)\r\n\r\n#Reading the JSON anwser and drawing rectangles:\r\n\r\nfor prediction in results.predictions:\r\n         if prediction.probability &gt; 0.5:\r\n             print (\"\\t\" + prediction.tag_name + \": {0:.2f}%\".format(prediction.probability * 100), prediction.bounding_box.left*1920, prediction.bounding_box.top*1080, prediction.bounding_box.width, prediction.bounding_box.height)\r\n             screen1 = cv2.rectangle(draw, (int(prediction.bounding_box.left*1920),int(prediction.bounding_box.top*1080)) , (int((prediction.bounding_box.left+prediction.bounding_box.width)*1920),int((prediction.bounding_box.top+prediction.bounding_box.height)*1080)), (0,255,255), 2)<\/pre>\n<p>Prezentacja wynik\u00f3w:<\/p>\n<pre class=\"toolbar:2 lang:python decode:true\">cv2.imshow('AI',screen1)<\/pre>\n<p>&nbsp;<\/p>\n<p>Ca\u0142y skrypt:<\/p>\n<pre class=\"toolbar:2 wrap:true lang:python decode:true \">from azure.cognitiveservices.vision.customvision.prediction import prediction_endpoint\r\nfrom azure.cognitiveservices.vision.customvision.prediction.prediction_endpoint import models\r\nimport cv2\r\n \r\npredictor = prediction_endpoint.PredictionEndpoint('&lt;YOUR KEY HERE&gt;')\r\n\r\n\r\ncam = cv2.VideoCapture(1)\r\ncam.set(3, 1920)\r\ncam.set(4, 1080)\r\nwhile True:\r\n     ret_val, img = cam.read()\r\n     cv2.imwrite('cam.png',img)\r\n     draw = cv2.imread('cam.png')\r\n     with open(\"cam.png\", mode=\"rb\") as test_data:\r\n         results = predictor.predict_image(\u2018&lt;PROJECT ID&gt;\u2019, test_data)\r\n         #print(faces)\r\n\r\n    for prediction in results.predictions:\r\n         if prediction.probability &gt; 0.5:\r\n             print (\"\\t\" + prediction.tag_name + \": {0:.2f}%\".format(prediction.probability * 100), prediction.bounding_box.left*1920, prediction.bounding_box.top*1080, prediction.bounding_box.width, prediction.bounding_box.height)\r\n             screen1 = cv2.rectangle(draw, (int(prediction.bounding_box.left*1920),int(prediction.bounding_box.top*1080)) , (int((prediction.bounding_box.left+prediction.bounding_box.width)*1920),int((prediction.bounding_box.top+prediction.bounding_box.height)*1080)), (0,255,255), 2)\r\n\r\n    cv2.imshow('AI',screen1)\r\n\r\n    if cv2.waitKey(1) == 27:\r\n         break  # esc to quit\r\ncv2.destroyAllWindows()<\/pre>\n<p>&nbsp;<\/p>\n<h1>Efekt ko\u0144cowy:<\/h1>\n<p><a href=\"http:\/\/cwiok.pl\/wp-content\/uploads\/2018\/08\/image-5.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; display: inline; background-image: none;\" title=\"image\" src=\"http:\/\/cwiok.pl\/wp-content\/uploads\/2018\/08\/image_thumb-6.png\" alt=\"image\" width=\"1920\" height=\"1080\" border=\"0\" \/><\/a><\/p>\n<h1>Moje wnioski:<\/h1>\n<ul>\n<li>Cena wydaje si\u0119 niska, ale us\u0142uga okazuje si\u0119 bardzo droga. Zw\u0142aszcza przy projektowaniu rozwi\u0105za\u0144 dzia\u0142aj\u0105cych w czasie rzeczywistym. Jedna kamera np. w sklepie kosztowa\u0142by oko\u0142o 25 USD dziennie.<\/li>\n<li>Wydajno\u015b\u0107 nie jest zadowalaj\u0105ca &#8211; musia\u0142em poczeka\u0107 kilka sekund na prognoz\u0119, a to wyklucza wszelkie rozwi\u0105zania, kt\u00f3re polegaj\u0105 o szybko\u015bci odpowiedzi.<\/li>\n<li>Bardzo \u0142atwe i czyste rozwi\u0105zanie, aby przetestowa\u0107 niekt\u00f3re projekty sprawdzaj\u0105c wymagania i dzia\u0142anie<\/li>\n<li>Og\u00f3lnie &#8211; niez\u0142a zabawa.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Us\u0142ugi kognitywne firmy Microsoft oferuj\u0105 wytrenowane sieci neuronowe, kt\u00f3re umo\u017cliwiaj\u0105 developerom szybki rozw\u00f3j algorytm\u00f3w np. rozpoznawania obrazu. Ten kr\u00f3tki post ma pokaza\u0107, jak to si\u0119 robi i jak stworzy\u0142em system rozpoznawania ludzi w czasie rzeczywistym. Celem tego rozwi\u0105zania jest rozpoznanie ludzi w naszym biurze i ewentualnie poinformowanie naszych ukochanych za\u0142o\u017cycieli. U\u017cy\u0142em: skryptu w j\u0119zyku Pythona i kamerki internetowej FullHD + API Custom Vision.<\/p>\n<p><a href=\"http:\/\/cwiok.pl\/wp-content\/uploads\/2018\/08\/artyku%C5%82_10_person-detector.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; display: inline; background-image: none;\" title=\"artyku\u0142_10_person detector\" src=\"http:\/\/cwiok.pl\/wp-content\/uploads\/2018\/08\/artyku%C5%82_10_person-detector_thumb.png\" alt=\"artyku\u0142_10_person detector\" width=\"1200\" height=\"628\" border=\"0\" \/><\/a><\/p>\n<div class=\"tech_read_more\"><a href=\"https:\/\/cwiok.pl\/index.php\/pl\/2018\/08\/27\/tworzenie-rozwiazania-si-rozpoznajacego-obrazy-w-godzine\/\">Read More<\/a><\/div>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[52,30],"tags":[],"class_list":["post-550","post","type-post","status-publish","format-standard","hentry","category-ai","category-azure-pl"],"_links":{"self":[{"href":"https:\/\/cwiok.pl\/index.php\/wp-json\/wp\/v2\/posts\/550","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cwiok.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cwiok.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cwiok.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cwiok.pl\/index.php\/wp-json\/wp\/v2\/comments?post=550"}],"version-history":[{"count":0,"href":"https:\/\/cwiok.pl\/index.php\/wp-json\/wp\/v2\/posts\/550\/revisions"}],"wp:attachment":[{"href":"https:\/\/cwiok.pl\/index.php\/wp-json\/wp\/v2\/media?parent=550"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cwiok.pl\/index.php\/wp-json\/wp\/v2\/categories?post=550"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cwiok.pl\/index.php\/wp-json\/wp\/v2\/tags?post=550"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}