{"id":36726,"date":"2019-10-31T22:13:23","date_gmt":"2019-10-31T19:13:23","guid":{"rendered":"https:\/\/prohoster.info\/blog\/stroim-sistemu-raspoznavaniya-lits-na-osnove-golang-i-opencv\/"},"modified":"2019-10-31T22:13:23","modified_gmt":"2019-10-31T19:13:23","slug":"stroim-sistemu-raspoznavaniya-lits-na-osnove-golang-i-opencv","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/news\/stroim-sistemu-raspoznavaniya-lits-na-osnove-golang-i-opencv","title":{"rendered":"Arcazonos\u00edt\u00f3 rendszert \u00e9p\u00edt\u00fcnk Golang \u00e9s OpenCV alapjain","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Arcazonos\u00edt\u00f3 rendszert \u00e9p\u00edt\u00fcnk Golang \u00e9s OpenCV alapjain\" src=\"\/wp-content\/uploads\/2019\/08\/053427f29ed319ede4498f2239044341.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAz OpenCV egy k\u00f6nyvt\u00e1r, amelyet sz\u00e1m\u00edt\u00f3g\u00e9pes l\u00e1t\u00e1s projektekhez fejlesztettek ki. M\u00e1r k\u00f6r\u00fclbel\u00fcl 20 \u00e9ve l\u00e9tezik. M\u00e9g a f\u0151iskol\u00e1n haszn\u00e1ltam, \u00e9s az\u00f3ta is alkalmazom a C++ \u00e9s Python projektjeimben, mivel j\u00f3l t\u00e1mogatja ezeket a nyelveket.<\/p>\n<p>De amikor elkezdtem tanulm\u00e1nyozni \u00e9s haszn\u00e1lni a Go-t, \u00e9rdekelt, alkalmazhat\u00f3-e az OpenCV ezzel a nyelvvel. Akkor m\u00e1r l\u00e9teztek integr\u00e1ci\u00f3s p\u00e9ld\u00e1k \u00e9s \u00fatmutat\u00f3k, de \u00fagy t\u0171nt, hogy t\u00fal bonyolultak. K\u00e9s\u0151bb a kezembe ker\u00fclt egy wrapper, amit a The Hybrid Group csapata k\u00e9sz\u00edtett. Ebben a cikkben bemutatom, hogyan kezdj\u00fcnk bele a GoCV-be, fejlesztve egy egyszer\u0171 arcfelismer\u0151 rendszert Haar-kask\u00e1dokkal.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p><b>A Skillbox aj\u00e1nlja:<\/b> Gyakorlati kurzus <noindex><a rel=\"nofollow\" href=\"https:\/\/skillbox.ru\/python\/?utm_source=skillbox.media&amp;utm_medium=habr.com&amp;utm_campaign=PTNDEV&amp;utm_content=articles&amp;utm_term=govideo\">\u201ePython fejleszt\u0151 null\u00e1r\u00f3l\u201d<\/a><\/noindex>.<\/p>\n<p><b>Eml\u00e9keztetj\u00fck:<\/b> <i>minden \u00abHabr\u00bb olvas\u00f3nak 10 000 rubeles kedvezm\u00e9ny j\u00e1r b\u00e1rmely Skillbox kurzus jelentkez\u00e9sekor a \u00abHabr\u00bb prom\u00f3ci\u00f3s k\u00f3d felhaszn\u00e1l\u00e1s\u00e1val.<\/i>\n<\/p><\/blockquote>\n<p>\n<b>Mire lesz sz\u00fcks\u00e9g:<\/b><\/p>\n<ul>\n<li>Go;<\/li>\n<li>OpenCV (az al\u00e1bbi telep\u00edt\u0151linkek);<\/li>\n<li>web- vagy hagyom\u00e1nyos videokamera.<\/li>\n<\/ul>\n<p>\n<b>Telep\u00edt\u00e9s<\/b><\/p>\n<ul>\n<li>Linux: <noindex><a rel=\"nofollow\" href=\"https:\/\/gocv.io\/getting-started\/linux\/\">gocv.io\/getting-started\/linux<\/a><\/noindex><\/li>\n<li>Megval\u00f3s\u00edtva lett <noindex><a rel=\"nofollow\" href=\"https:\/\/gocv.io\/getting-started\/macos\/\">gocv.io\/getting-started\/macos<\/a><\/noindex><\/li>\n<li>Az about:support oldalra <noindex><a rel=\"nofollow\" href=\"https:\/\/gocv.io\/getting-started\/windows\/\">gocv.io\/getting-started\/windows<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>1. p\u00e9lda<\/h3>\n<p>\nAz els\u0151 p\u00e9ld\u00e1ban megpr\u00f3b\u00e1lunk l\u00e9trehozni egy alkalmaz\u00e1st, amely megnyit egy ablakot, bemutatva a kamera vide\u00f3folyam\u00e1t.<\/p>\n<p>El\u0151sz\u00f6r import\u00e1lni kell a sz\u00fcks\u00e9ges k\u00f6nyvt\u00e1rakat.<\/p>\n<p><i>import (<br \/>\n \"log\"<br \/>\n \"gocv.io\/x\/gocv\"<br \/>\n)<\/i><\/p>\n<p>Ezut\u00e1n l\u00e9tre kell hozni egy VideoCapture objektumot a VideoCaptureDevice funkci\u00f3 haszn\u00e1lat\u00e1val. Az ut\u00f3bbi lehet\u0151s\u00e9get ad a vide\u00f3folyam r\u00f6gz\u00edt\u00e9s\u00e9re a kamer\u00e1n kereszt\u00fcl. A funkci\u00f3nak egy eg\u00e9sz sz\u00e1mot kell \u00e1tadni param\u00e9terk\u00e9nt (ez az eszk\u00f6z azonos\u00edt\u00f3j\u00e1t k\u00e9pviseli).<\/p>\n<pre><code class=\"go\">webcam, err := gocv.VideoCaptureDevice(0)\nif err != nil { log.Fatalf(\"webkamera megnyit\u00e1si hiba: %v\", err)\n}\ndefer webcam.Close()<\/code><\/pre>\n<p>\nMost l\u00e9tre kell hoznunk egy n-dimenzi\u00f3s m\u00e1trixot. Ez fogja t\u00e1rolni a kamer\u00e1b\u00f3l olvasott k\u00e9peket.<\/p>\n<pre><code class=\"go\">img := gocv.NewMat()\ndefer img.Close()<\/code><\/pre>\n<p>\nA vide\u00f3folyam megjelen\u00edt\u00e9s\u00e9hez el\u0151sz\u00f6r l\u00e9tre kell hoznunk egy ablakot \u2014 ezt a NewWindow funkci\u00f3 seg\u00edts\u00e9g\u00e9vel tehetj\u00fck meg.<\/p>\n<pre><code class=\"go\">window := gocv.NewWindow(\"webcamwindow\")\ndefer window.Close()<\/code><\/pre>\n<p>\nMost l\u00e9pj\u00fcnk a legizgalmasabb r\u00e9szhez.<\/p>\n<p>Mivel a vide\u00f3 folyamatos k\u00e9pfolyamot jelent, v\u00e9gtelen ciklust kell l\u00e9trehoznunk a vide\u00f3folyam folyamatos olvas\u00e1s\u00e1hoz. Ehhez a VideoCapture t\u00edpus\u00fa Read met\u00f3dusra van sz\u00fcks\u00e9g. Ez v\u00e1rni fog egy Mat t\u00edpust (a m\u00e1trix, amit el\u0151bb l\u00e9trehoztunk), \u00e9s logikai \u00e9rt\u00e9ket ad vissza, amely jelzi, hogy a VideoCapture-b\u0151l sikeresen olvasott-e k\u00e9pet vagy sem.<\/p>\n<pre><code class=\"go\">for { \n if ok := webcam.Read(&amp;img); !ok || img.Empty() {\n log.Println(\"Nem siker\u00fclt a webkamer\u00e1b\u00f3l olvasni\") continue\n }\n.\n.\n.\n}<\/code><\/pre>\n<p>\nMost meg kell jelen\u00edten\u00fcnk a k\u00e9pkock\u00e1t a l\u00e9trehozott ablakban. A k\u00f6vetkez\u0151 k\u00e9pkock\u00e1ra val\u00f3 \u00e1tmenethez 50 ms sz\u00fcnetet adunk.<\/p>\n<p><i>window.IMShow(img)<br \/>\nwindow.WaitKey(50)<\/i><\/p>\n<p>Az alkalmaz\u00e1s elind\u00edt\u00e1sa ut\u00e1n egy ablak ny\u00edlik meg, amely a kamera vide\u00f3folyam\u00e1t jelen\u00edti meg.<\/p>\n<p><img decoding=\"async\" alt=\"Arcazonos\u00edt\u00f3 rendszert \u00e9p\u00edt\u00fcnk Golang \u00e9s OpenCV alapjain\" src=\"\/wp-content\/uploads\/2019\/08\/02677722c3c3fb867f73917c53031f07.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<pre><code class=\"go\">package main\n \nimport (\n\"log\"\n \n\"gocv.io\/x\/gocv\"\n)\n \nfunc main() {\nwebcam, err := gocv.VideoCaptureDevice(0)\nif err != nil {\n    log.Fatalf(\"esem\u00e9ny a k\u00e9sz\u00fcl\u00e9k megnyit\u00e1sakor: %v\", err)\n}\ndefer webcam.Close()\n \nimg := gocv.NewMat()\ndefer img.Close()\n \nwindow := gocv.NewWindow(\"webcamwindow\")\ndefer window.Close()\n \nfor {\nif ok := webcam.Read(&amp;img); !ok || img.Empty() {\nlog.Println(\"Nem siker\u00fclt olvasni a webkamer\u00e1b\u00f3l\")\ncontinue\n}\n \nwindow.IMShow(img)\nwindow.WaitKey(50)\n}\n}<\/code><\/pre>\n<p><\/p>\n<h3>P\u00e9lda 2<\/h3>\n<p>\nEbben a p\u00e9ld\u00e1ban haszn\u00e1ljuk az el\u0151z\u0151 p\u00e9ld\u00e1t, \u00e9s \u00e9p\u00edt\u00fcnk egy arcfelismer\u0151 rendszert Haar Cascades alapjain.<\/p>\n<p>A Haar Cascades egy cascades klasszifik\u00e1l\u00f3, amely a Haar-v\u00e1let technik\u00e1j\u00e1n alapul. Ezek elemzik a k\u00e9pen tal\u00e1lhat\u00f3 pixeleket, hogy meghat\u00e1rozott jellemz\u0151ket \u00e9szleljenek. Tov\u00e1bbi inform\u00e1ci\u00f3khoz a Haar Cascades-r\u0151l az al\u00e1bbi linkeken kereszt\u00fcl juthat el.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.cs.ubc.ca\/~lowe\/425\/slides\/13-ViolaJones.pdf?source=post_page---------------------------\">Viola-Jones objektum-\u00e9szlel\u00e9si keretrendszer<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Cascading_classifiers?source=post_page---------------------------\">Cascading klasszifik\u00e1torok<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Haar-like_feature?source=post_page---------------------------\">Haar-szer\u0171 jelleg<\/a><\/noindex><\/p>\n<p>T\u00f6ltse le az el\u0151k\u00e9pzett cascades-okat <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/opencv\/opencv\/tree\/master\/data\/haarcascades?source=post_page---------------------------\">itt<\/a><\/noindex>. A jelenlegi p\u00e9ld\u00e1ban a cascades-okat az arcok azonos\u00edt\u00e1s\u00e1ra fogjuk haszn\u00e1lni.<\/p>\n<p>Ehhez l\u00e9tre kell hoznunk egy klasszifik\u00e1l\u00f3t, \u00e9s be kell t\u00e1pl\u00e1lnunk neki a m\u00e1r betan\u00edtott f\u00e1jlt (a fenti linkek egyike). M\u00e1r bet\u00f6lt\u00f6ttem a f\u00e1jlt opencv_haarcascade_frontalface_default.xml a mapp\u00e1ba, ahol a programunk tal\u00e1lhat\u00f3.<\/p>\n<pre><code class=\"go\">harrcascade := \"opencv_haarcascade_frontalface_default.xml\"classifier := gocv.NewCascadeClassifier()classifier.Load(harrcascade)\ndefer classifier.Close()<\/code><\/pre>\n<p>\nAz arcok \u00e9szlel\u00e9s\u00e9hez a k\u00f6vetkez\u0151 m\u00f3dszert kell alkalmazni: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/hybridgroup\/gocv\/blob\/master\/objdetect.go?source=post_page---------------------------#L51\">DetectMultiScale<\/a><\/noindex>. Ez a funkci\u00f3 fogad egy keretet (Mat t\u00edpus), amelyet \u00e9ppen most olvastunk be a kamera vide\u00f3folyam\u00e1b\u00f3l, \u00e9s visszaad egy Rectangle t\u00edpus\u00fa t\u00f6mb\u00f6t. A t\u00f6mb m\u00e9rete azt jelzi, hogy h\u00e1ny arcot tudott \u00e9szlelni a klasszifik\u00e1l\u00f3 a keretben. Ezut\u00e1n, hogy megbizonyosodjunk arr\u00f3l, amit tal\u00e1lt, n\u00e9zz\u00fck \u00e1t a t\u00e9glalapok list\u00e1j\u00e1t, \u00e9s \u00edrjuk ki a konzolra a Rectangle objektumot, l\u00e9trehozva egy keretet a felfedezett t\u00e9glalap k\u00f6r\u00fcl. Ezt a Rectangle f\u00fcggv\u00e9nnyel v\u00e9gezhetj\u00fck el. Ez fogadja a kamer\u00e1val olvasott Mat-t, a DetectMultiScale m\u00f3dszer \u00e1ltal visszaadott Rectangle objektumot, a sz\u00ednt \u00e9s a vastags\u00e1got a kerethez.<\/p>\n<pre><code class=\"go\">for _, r := range rects {\nfmt.Println(\"\u00e9szlelve\", r)\ngocv.Rectangle(&amp;img, r, color, 2)\n}<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Arcazonos\u00edt\u00f3 rendszert \u00e9p\u00edt\u00fcnk Golang \u00e9s OpenCV alapjain\" src=\"\/wp-content\/uploads\/2019\/08\/5c9128572d0f832325b2d19dd0d03b61.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n<img decoding=\"async\" alt=\"Arcazonos\u00edt\u00f3 rendszert \u00e9p\u00edt\u00fcnk Golang \u00e9s OpenCV alapjain\" src=\"\/wp-content\/uploads\/2019\/08\/57a901331c7f109067c7f254f982a2b0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<pre><code class=\"go\">csomag main\n\nimport (\n\"fmt\"\n\"image\/color\"\n\"log\"\n\n\"gocv.io\/x\/gocv\"\n)\n\nfunc main() {\nwebcam, err := gocv.VideoCaptureDevice(0)\nif err != nil {\nlog.Fatalf(\"hiba a webkamera megnyit\u00e1sakor: %v\", err)\n}\ndefer webcam.Close()\n\nimg := gocv.NewMat()\ndefer img.Close()\n\nwindow := gocv.NewWindow(\"webcamwindow\")\ndefer window.Close()\n\nharrcascade := \"opencv_haarcascade_frontalface_default.xml\"\nclassifier := gocv.NewCascadeClassifier()\nclassifier.Load(harrcascade)\ndefer classifier.Close()\n\ncolor := color.RGBA{0, 255, 0, 0}\nfor {\nif ok := webcam.Read(&amp;img); !ok || img.Empty() {\nlog.Println(\"Nem siker\u00fclt olvasni az eszk\u00f6zb\u0151l\")\ncontinue\n}\n\nrects := classifier.DetectMultiScale(img)\nfor _, r := range rects {\nfmt.Println(\"\u00e9szlelt\", r)\ngocv.Rectangle(&amp;img, r, color, 3)\n}\n\nwindow.IMShow(img)\nwindow.WaitKey(50)\n}\n}<\/code><\/pre>\n<p>\nIgen, siker\u00fclt! Most m\u00e1r van egy egyszer\u0171 arcfelismer\u0151 rendszer a Go nyelven. Hamarosan szeretn\u00e9m folytatni ezeket a k\u00eds\u00e9rleteket, \u00e9s \u00faj klassz dolgokat l\u00e9trehozni a Go \u00e9s az OpenCV kombin\u00e1l\u00e1s\u00e1val.<\/p>\n<p>Ha \u00e9rdekel, \u00e9rt\u00e9keld. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Niraj-Fonseka\/recognize?source=post_page---------------------------\">gRPC web server<\/a><\/noindex>, amit Pythonban \u00e9s OpenCV ben \u00edrtam. Ez k\u00f6zvet\u00edti az adatokat, amikor arcot \u00e9szlel. Ez alapja k\u00fcl\u00f6nb\u00f6z\u0151 kliensek l\u00e9trehoz\u00e1s\u00e1nak k\u00fcl\u00f6nb\u00f6z\u0151 programoz\u00e1si nyelveken. Ezek csatlakozhatnak a szerverhez \u00e9s adatokat olvashatnak r\u00f3la.<\/p>\n<p>K\u00f6sz\u00f6n\u00f6m, hogy elolvastad a cikket!<\/p>\n<blockquote><p><b>A Skillbox aj\u00e1nlja:<\/b><\/p>\n<ul>\n<li>K\u00e9t\u00e9ves gyakorlati tanfolyam <noindex><a rel=\"nofollow\" href=\"https:\/\/iamwebdev.skillbox.ru\/?utm_source=skillbox.media&amp;utm_medium=habr.com&amp;utm_campaign=WEBDEVPRO&amp;utm_content=articles&amp;utm_term=govideo\">\u201eWebfejleszt\u0151 PRO\u201d<\/a><\/noindex>.<\/li>\n<li>Oktat\u00e1si online kurzus <noindex><a rel=\"nofollow\" href=\"https:\/\/skillbox.ru\/java\/?utm_source=skillbox.media&amp;utm_medium=habr.com&amp;utm_campaign=JAVDEV&amp;utm_content=articles&amp;utm_term=govideo\">\"Java-Fejleszt\u0151 Mesters\u00e9g\"<\/a><\/noindex>.<\/li>\n<li>Gyakorlati \u00e9ves kurzus <noindex><a rel=\"nofollow\" href=\"https:\/\/skillbox.ru\/php\/?utm_source=skillbox.media&amp;utm_medium=habr.com&amp;utm_campaign=PHPDEV&amp;utm_content=articles&amp;utm_term=govideo\">\u201ePHP fejleszt\u0151 a null\u00e1t\u00f3l a PROig\u201d<\/a><\/noindex>.\n<\/li>\n<\/ul>\n<\/blockquote>\n<p>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillbox\/blog\/462159\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>OpenCV \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u0430\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043f\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u043e\u043c\u0443 \u0437\u0440\u0435\u043d\u0438\u044e. \u0415\u0439 \u0443\u0436\u0435 \u043e\u043a\u043e\u043b\u043e 20 \u043b\u0435\u0442. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0435\u0435 \u0435\u0449\u0435 \u0432 \u043a\u043e\u043b\u043b\u0435\u0434\u0436\u0435 \u0438 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 C++ \u0438 Python, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d\u0430 \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u043f\u043b\u043e\u0445\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u044d\u0442\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432. \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u044f \u043d\u0430\u0447\u0430\u043b \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Go, \u043c\u043d\u0435 \u0441\u0442\u0430\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c OpenCV \u0434\u043b\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27509,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-36726","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"OpenCV \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/hu\/blog\/news\/stroim-sistemu-raspoznavaniya-lits-na-osnove-golang-i-opencv\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u0442\u0440\u043e\u0438\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u043b\u0438\u0446 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Golang \u0438 OpenCV | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"OpenCV \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/news\/stroim-sistemu-raspoznavaniya-lits-na-osnove-golang-i-opencv\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:13:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:13:23+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Arc felismer\u0151 rendszer \u00e9p\u00edt\u00e9se Golang \u00e9s OpenCV seg\u00edts\u00e9g\u00e9vel | ProHoster","description":"Az OpenCV egy k\u00f6nyvt\u00e1r.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/news\/stroim-sistemu-raspoznavaniya-lits-na-osnove-golang-i-opencv","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u0442\u0440\u043e\u0438\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u043b\u0438\u0446 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Golang \u0438 OpenCV | ProHoster","og:description":"OpenCV \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430.","og:url":"https:\/\/prohoster.info\/hu\/blog\/news\/stroim-sistemu-raspoznavaniya-lits-na-osnove-golang-i-opencv","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:13:23+00:00","article:modified_time":"2019-10-31T19:13:23+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36726","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 04:36:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:40:22","updated":"2026-01-22 04:36:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/36726","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=36726"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/36726\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/27509"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=36726"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=36726"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=36726"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}