{"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\/fr\/blog\/news\/stroim-sistemu-raspoznavaniya-lits-na-osnove-golang-i-opencv","title":{"rendered":"Construire un syst\u00e8me de reconnaissance faciale bas\u00e9 sur Golang et OpenCV","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Construire un syst\u00e8me de reconnaissance faciale bas\u00e9 sur Golang et OpenCV\" src=\"\/wp-content\/uploads\/2019\/08\/053427f29ed319ede4498f2239044341.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOpenCV est une biblioth\u00e8que d\u00e9velopp\u00e9e pour des projets de vision par ordinateur. Elle existe depuis environ 20 ans. Je l'ai utilis\u00e9e encore \u00e0 l'universit\u00e9 et je l'applique toujours pour mes projets en C++ et Python, car elle dispose d'un bon support pour ces langages.<\/p>\n<p>Mais quand j'ai commenc\u00e9 \u00e0 \u00e9tudier et \u00e0 utiliser Go, je me suis demand\u00e9 s'il \u00e9tait possible d'appliquer OpenCV avec ce langage. \u00c0 l'\u00e9poque, il existait d\u00e9j\u00e0 des exemples et des tutoriels d'int\u00e9gration, mais j'ai trouv\u00e9 qu'ils \u00e9taient trop compliqu\u00e9s. Peu apr\u00e8s, j'ai trouv\u00e9 un wrapper cr\u00e9\u00e9 par l'\u00e9quipe de The Hybrid Group. Dans cet article, je vais montrer comment commencer avec GoCV en d\u00e9veloppant un simple syst\u00e8me de reconnaissance faciale utilisant des cascades de Haar.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p><b>Skillbox recommande :<\/b> Cours pratique <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\">\u00ab D\u00e9veloppeur Python depuis z\u00e9ro \u00bb<\/a><\/noindex>.<\/p>\n<p><b>Rappelons-le :<\/b> <i>pour tous les lecteurs de \u00ab Habr \u00bb \u2014 une r\u00e9duction de 10 000 roubles lors de l'inscription \u00e0 tout cours Skillbox avec le code promo \u00ab Habr \u00bb.<\/i>\n<\/p><\/blockquote>\n<p>\n<b>Ce qu'il faut :<\/b><\/p>\n<ul>\n<li>Go;<\/li>\n<li>OpenCV (liens vers l'installateur ci-dessous);<\/li>\n<li>une cam\u00e9ra vid\u00e9o ou ordinaire.<\/li>\n<\/ul>\n<p>\n<b>Installation<\/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>macOS : <noindex><a rel=\"nofollow\" href=\"https:\/\/gocv.io\/getting-started\/macos\/\">gocv.io\/getting-started\/macos<\/a><\/noindex><\/li>\n<li>Windows : <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>Exemple 1<\/h3>\n<p>\nDans le premier exemple, nous allons essayer de cr\u00e9er une application qui ouvre une fen\u00eatre avec une d\u00e9monstration du flux vid\u00e9o de la cam\u00e9ra.<\/p>\n<p>Tout d'abord, nous devons importer les biblioth\u00e8ques n\u00e9cessaires au travail.<\/p>\n<p><i>import (<br \/>\n \"log\"<br \/>\n \"gocv.io\/x\/gocv\"<br \/>\n)<\/i><\/p>\n<p>Ensuite, nous devons cr\u00e9er un objet VideoCapture en utilisant la fonction VideoCaptureDevice. Cette derni\u00e8re permet de capturer le flux vid\u00e9o \u00e0 l'aide de la cam\u00e9ra. La fonction utilise un entier comme param\u00e8tre (qui repr\u00e9sente l'ID de l'appareil).<\/p>\n<pre><code class=\"go\">webcam, err := gocv.VideoCaptureDevice(0)\nif err != nil {    log.Fatalf(\"erreur lors de l'ouverture de la webcam : %v\", err)\n}\ndefer webcam.Close()<\/code><\/pre>\n<p>\nNous devons maintenant cr\u00e9er une matrice n-dimensionnelle. Elle va stocker les images captur\u00e9es par la cam\u00e9ra.<\/p>\n<pre><code class=\"go\">img := gocv.NewMat()\ndefer img.Close()<\/code><\/pre>\n<p>\nPour afficher le flux vid\u00e9o, nous devons cr\u00e9er une fen\u00eatre - cela peut \u00eatre fait en utilisant la fonction NewWindow.<\/p>\n<pre><code class=\"go\">window := gocv.NewWindow(\"webcamwindow\")\ndefer window.Close()<\/code><\/pre>\n<p>\nPassons maintenant \u00e0 la partie la plus int\u00e9ressante.<\/p>\n<p>Comme la vid\u00e9o est un flux continu de cadres-image, nous devrons cr\u00e9er une boucle infinie pour lire en continu le flux vid\u00e9o de la cam\u00e9ra. Pour cela, nous avons besoin de la m\u00e9thode Read de type VideoCapture. Elle attendra un type Mat (la matrice que nous avons cr\u00e9\u00e9e ci-dessus), en retournant une valeur bool\u00e9enne indiquant si le cadre a \u00e9t\u00e9 lu avec succ\u00e8s depuis VideoCapture ou non.<\/p>\n<pre><code class=\"go\">for {\n        if ok := webcam.Read(&amp;img); !ok || img.Empty() {\n        log.Println(\"Impossible de lire depuis la webcam\")    continue\n     }\n.\n.\n.\n}<\/code><\/pre>\n<p>\nNous devons maintenant afficher le cadre dans la fen\u00eatre cr\u00e9\u00e9e. La pause pour passer au cadre suivant est de 50 ms.<\/p>\n<p><i>window.IMShow(img)<br \/>\nwindow.WaitKey(50)<\/i><\/p>\n<p>Apr\u00e8s le lancement de l'application, une fen\u00eatre s'ouvrira avec le flux vid\u00e9o de la cam\u00e9ra.<\/p>\n<p><img decoding=\"async\" alt=\"Construire un syst\u00e8me de reconnaissance faciale bas\u00e9 sur Golang et OpenCV\" 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(\"error opening device: %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(\"Unable to read from the webcam\")\ncontinue\n}\n \nwindow.IMShow(img)\nwindow.WaitKey(50)\n}\n}<\/code><\/pre>\n<p><\/p>\n<h3>Exemple 2<\/h3>\n<p>\nDans cet exemple, utilisons l'exemple pr\u00e9c\u00e9dent et construisons un syst\u00e8me de reconnaissance faciale bas\u00e9 sur les Haar Cascades.<\/p>\n<p>Les Haar Cascades sont des classificateurs en cascade qui sont entra\u00een\u00e9s \u00e0 l'aide de la technique des ondelettes de Haar. Ils analysent les pixels d'une image pour d\u00e9tecter certaines caract\u00e9ristiques. Pour en savoir plus sur les Haar Cascades, vous pouvez consulter les liens ci-dessous.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.cs.ubc.ca\/~lowe\/425\/slides\/13-ViolaJones.pdf?source=post_page---------------------------\">Cadre de d\u00e9tection d'objets Viola-Jones<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Cascading_classifiers?source=post_page---------------------------\">Classificateurs en cascade<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Haar-like_feature?source=post_page---------------------------\">Caract\u00e9ristique de type Haar<\/a><\/noindex><\/p>\n<p>T\u00e9l\u00e9charger des cascades pr\u00e9-entra\u00een\u00e9es <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/opencv\/opencv\/tree\/master\/data\/haarcascades?source=post_page---------------------------\">peut \u00eatre fait ici<\/a><\/noindex>. Dans cet exemple, les cascades seront utilis\u00e9es pour identifier le visage d'une personne de face.<\/p>\n<p>Pour ce faire, il faut cr\u00e9er un classificateur et lui fournir un fichier d\u00e9j\u00e0 entra\u00een\u00e9 (le lien est donn\u00e9 ci-dessus). J'ai d\u00e9j\u00e0 t\u00e9l\u00e9charg\u00e9 le fichier opencv_haarcascade_frontalface_default.xml dans le r\u00e9pertoire o\u00f9 se trouve notre programme.<\/p>\n<pre><code class=\"go\">harrcascade := \"opencv_haarcascade_frontalface_default.xml\"classificador := gocv.NewCascadeClassifier()classificador.Load(harrcascade)\ndefer classificador.Close()<\/code><\/pre>\n<p>\nPour d\u00e9tecter des visages dans l'image, il faut utiliser la m\u00e9thode <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/hybridgroup\/gocv\/blob\/master\/objdetect.go?source=post_page---------------------------#L51\">DetectMultiScale<\/a><\/noindex>. Cette fonction prend une image (type Mat) qui a \u00e9t\u00e9 r\u00e9cemment lue \u00e0 partir du flux vid\u00e9o de la cam\u00e9ra et retourne un tableau de type Rectangle. La taille du tableau repr\u00e9sente le nombre de visages que le classificateur a r\u00e9ussi \u00e0 d\u00e9tecter dans l'image. Ensuite, pour s'assurer que nous voyons ce qu'il a trouv\u00e9, parcourons la liste des rectangles et affichons l'objet Rectangle dans la console, en cr\u00e9ant une bordure autour du rectangle d\u00e9tect\u00e9. Cela peut \u00eatre fait \u00e0 l'aide de la fonction Rectangle. Elle prendra Mat, lue par la cam\u00e9ra, l'objet Rectangle retourn\u00e9 par la m\u00e9thode DetectMultiScale, la couleur et l'\u00e9paisseur pour la bordure.<\/p>\n<pre><code class=\"go\">for _, r := range rects {\nfmt.Println(\"detected\", r)\ngocv.Rectangle(&amp;img, r, color, 2)\n}<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Construire un syst\u00e8me de reconnaissance faciale bas\u00e9 sur Golang et OpenCV\" src=\"\/wp-content\/uploads\/2019\/08\/5c9128572d0f832325b2d19dd0d03b61.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n<img decoding=\"async\" alt=\"Construire un syst\u00e8me de reconnaissance faciale bas\u00e9 sur Golang et OpenCV\" src=\"\/wp-content\/uploads\/2019\/08\/57a901331c7f109067c7f254f982a2b0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<pre><code class=\"go\">package 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(\"error opening web cam: %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(\"Unable to read from the device\")\ncontinue\n}\n \nrects := classifier.DetectMultiScale(img)\nfor _, r := range rects {\nfmt.Println(\"detected\", r)\ngocv.Rectangle(&amp;img, r, color, 3)\n}\n \nwindow.IMShow(img)\nwindow.WaitKey(50)\n}\n}<\/code><\/pre>\n<p>\nEt\u2026 oui, tout a fonctionn\u00e9 ! Nous avons maintenant un syst\u00e8me de reconnaissance faciale simple, \u00e9crit en Go. Je pr\u00e9vois bient\u00f4t de continuer ces exp\u00e9riences et de cr\u00e9er de nouvelles choses int\u00e9ressantes en combinant Go et OpenCV.<\/p>\n<p>Si cela vous int\u00e9resse, n'h\u00e9sitez pas \u00e0 \u00e9valuer <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Niraj-Fonseka\/recognize?source=post_page---------------------------\">serveur web gRPC<\/a><\/noindex>, que j'ai \u00e9crit en Python et OpenCV. Il diffuse des donn\u00e9es en temps r\u00e9el lors de la d\u00e9tection d'un visage. C'est la base pour cr\u00e9er diff\u00e9rents clients dans divers langages de programmation. Ils pourront se connecter au serveur et lire les donn\u00e9es.<\/p>\n<p>Merci d'avoir lu l'article !<\/p>\n<blockquote><p><b>Skillbox recommande :<\/b><\/p>\n<ul>\n<li>Cours pratique de deux ans <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\">\"Je suis un d\u00e9veloppeur web PRO\"<\/a><\/noindex>.<\/li>\n<li>Cours en ligne \u00e9ducatif <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\">\u00abProfession D\u00e9veloppeur Java\u00bb<\/a><\/noindex>.<\/li>\n<li>Cours pratique d'un an <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\">\u00abD\u00e9veloppeur PHP de 0 \u00e0 PRO\u00bb<\/a><\/noindex>.\n<\/li>\n<\/ul>\n<\/blockquote>\n<p>Source : <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.2 - 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\/fr\/blog\/news\/stroim-sistemu-raspoznavaniya-lits-na-osnove-golang-i-opencv\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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\udd47Construire un syst\u00e8me de reconnaissance faciale bas\u00e9 sur Golang et OpenCV | ProHoster","description":"OpenCV est une biblioth\u00e8que.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/news\/stroim-sistemu-raspoznavaniya-lits-na-osnove-golang-i-opencv","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/36726","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=36726"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/36726\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/27509"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=36726"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=36726"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=36726"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}