{"id":482,"date":"2012-11-04T14:09:21","date_gmt":"2012-11-04T18:09:21","guid":{"rendered":"http:\/\/nagashur.com\/blog\/?p=482"},"modified":"2012-11-04T14:19:03","modified_gmt":"2012-11-04T18:19:03","slug":"detection-de-visage-avec-opencv","status":"publish","type":"post","link":"http:\/\/nagashur.com\/blog\/2012\/11\/04\/detection-de-visage-avec-opencv\/","title":{"rendered":"D\u00e9tection de visage avec OpenCV"},"content":{"rendered":"<p>OpenCV est une\u00a0biblioth\u00e8que\u00a0open source (et libre) de &#8220;computer vision&#8221;. Autrement dit, OpenCV apporte \u00e0 un ordinateur diverses\u00a0fonctionnalit\u00e9s permettant de traiter des donn\u00e9es vid\u00e9o provenant d&#8217;une\u00a0webcam, d&#8217;images fixes ou toute autre source, afin de les analyser et de les traiter.\u00a0\u00a0On pourra par exemple faire toutes sortes de traitements classiques d&#8217;image (saturation, rotation etc), mais \u00e9galement\u00a0acc\u00e9der\u00a0\u00e0 des\u00a0fonctionnalit\u00e9s\u00a0plus avanc\u00e9es telles que la d\u00e9tection de mouvement, ou encore le rep\u00e9rage d&#8217;un visage au sein d&#8217;un\u00a0sc\u00e8ne. C&#8217;est justement cette\u00a0derni\u00e8re\u00a0fonctionnalit\u00e9 qui nous\u00a0int\u00e9ressera\u00a0aujourd&#8217;hui. Nous verrons donc comment installer OpenCV, puis compiler et ex\u00e9cuter un programme exemple de d\u00e9tection de visage.<\/p>\n<p><!--more--><\/p>\n<p>La premi\u00e8re \u00e9tape est d&#8217;installer OpenCV (en version d\u00e9veloppement, pour avoir les headers). Cette op\u00e9ration est loin d&#8217;etre triviale, mais voici un bon tutoriel : <a title=\"Installation d'OpenCV et des d\u00e9pendances\" href=\"www.ozbotz.org\/opencv-installation\/\">installer OpenCV et ses d\u00e9pendances<\/a>. Ce guide est complet et d\u00e9taill\u00e9, et toutes les op\u00e9rations peuvent \u00eatre effectu\u00e9es en ligne de commande. Il vous suffit donc d&#8217;un acc\u00e8s \u00e0 un terminal sur la machine cible, et la possibilit\u00e9 d&#8217;ex\u00e9cuter des commandes en root. J&#8217;essaierai d&#8217;int\u00e9grer ult\u00e9rieurement une traduction de ce tutoriel ici.<\/p>\n<p>Si tout se passe bien, dans votre r\u00e9pertoire ~\/src\/OpenCV\/samples\/c\/ , vous trouverez une s\u00e9rie d&#8217;exemples de codes sources. Pour les compiler, un script est fourni dans ce m\u00eame r\u00e9pertoire. Il suffit donc de l&#8217;executer en faisant sh build_all.sh. Suite \u00e0 la compilation, il suffit alors d&#8217;ex\u00e9cuter le programme de d\u00e9tection de visage : .\/facedetect<\/p>\n<p>Si le programme est lent, vous pouvez ajouter l&#8217;option &#8220;&#8211;scale=X&#8221;, avec X sup\u00e9rieur \u00e0 1. Plus la valeur de X sera \u00e9lev\u00e9e, plus le programme sera rapide, mais moins il sera pr\u00e9cis. Plus de d\u00e9tails sur ce sujet sur ce lien : <a href=\"http:\/\/stackoverflow.com\/questions\/3763832\/slow-face-detection-on-opencv\">http:\/\/stackoverflow.com\/questions\/3763832\/slow-face-detection-on-opencv<\/a> .<\/p>\n<p>Enfin, si vous disposez de multiples webcams branch\u00e9es sur la machine utilis\u00e9e, vous pouvez s\u00e9lectionner celle qui sera utilis\u00e9e en tapant un nombre juste apr\u00e8s le nom, 0 \u00e9tant la premi\u00e8re webcam branch\u00e9e. Il est \u00e9galement possible de combiner les deux :<\/p>\n<p>.\/facedetect 1 &#8211;scale=2<\/p>\n<p>Cette commande ex\u00e9cutera la d\u00e9tection sur la seconde cam\u00e9ra (1) et s&#8217;ex\u00e9cutera plus rapidement grace \u00e0 l&#8217;option scale.<\/p>\n<p>On peut ainsi effectuer la d\u00e9tection sur de multiples cam\u00e9ras en m\u00eame temps en mettant un num\u00e9ro de cam\u00e9ra diff\u00e9rent pour chaque commande.<\/p>\n<p>Pour quitter le programme, appuyez sur une touche du clavier en ayant la fen\u00eatre en avant plan.<\/p>\n<p>Il est \u00e9galement possible de compiler\u00a0 des programmes quelconques utilisant OpenCV sans utiliser de makefile. Pour ceci il faudra indiquer ou se trouve la librairie. On pourrait le faire \u00e0 la main, mais il est possible de le faire automatiquement avec pkg-config en C++ ou en C :<\/p>\n<p>g++ `pkg-config opencv &#8211;cflags` my_code.cpp\u00a0 -o my_code `pkg-config opencv &#8211;libs`<br \/>\ngcc `pkg-config opencv &#8211;cflags` my_code.cpp\u00a0 -o my_code `pkg-config opencv &#8211;libs`<\/p>\n","protected":false},"excerpt":{"rendered":"<p>OpenCV est une\u00a0biblioth\u00e8que\u00a0open source (et libre) de &#8220;computer vision&#8221;. Autrement dit, OpenCV apporte \u00e0 un ordinateur diverses\u00a0fonctionnalit\u00e9s permettant de traiter des donn\u00e9es vid\u00e9o provenant d&#8217;une\u00a0webcam, d&#8217;images fixes ou toute autre source, afin de les analyser et de les traiter.\u00a0\u00a0On pourra par exemple faire toutes sortes de traitements classiques d&#8217;image (saturation, rotation etc), mais \u00e9galement\u00a0acc\u00e9der\u00a0\u00e0 des\u00a0fonctionnalit\u00e9s\u00a0plus [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":""},"categories":[3],"tags":[138,111,137,17,21,9,134,135,133,136],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v15.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>D\u00e9tection de visage avec OpenCV - Nagashur<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/nagashur.com\/blog\/2012\/11\/04\/detection-de-visage-avec-opencv\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"D\u00e9tection de visage avec OpenCV - Nagashur\" \/>\n<meta property=\"og:description\" content=\"OpenCV est une\u00a0biblioth\u00e8que\u00a0open source (et libre) de &#8220;computer vision&#8221;. Autrement dit, OpenCV apporte \u00e0 un ordinateur diverses\u00a0fonctionnalit\u00e9s permettant de traiter des donn\u00e9es vid\u00e9o provenant d&#8217;une\u00a0webcam, d&#8217;images fixes ou toute autre source, afin de les analyser et de les traiter.\u00a0\u00a0On pourra par exemple faire toutes sortes de traitements classiques d&#8217;image (saturation, rotation etc), mais \u00e9galement\u00a0acc\u00e9der\u00a0\u00e0 des\u00a0fonctionnalit\u00e9s\u00a0plus [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"http:\/\/nagashur.com\/blog\/2012\/11\/04\/detection-de-visage-avec-opencv\/\" \/>\n<meta property=\"og:site_name\" content=\"Nagashur\" \/>\n<meta property=\"article:published_time\" content=\"2012-11-04T18:09:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2012-11-04T18:19:03+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary\" \/>\n<meta name=\"twitter:creator\" content=\"@audreyrobinel\" \/>\n<meta name=\"twitter:site\" content=\"@audreyrobinel\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/nagashur.com\/blog\/#website\",\"url\":\"http:\/\/nagashur.com\/blog\/\",\"name\":\"Nagashur\",\"description\":\"raspi et arduino FTW :)\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"http:\/\/nagashur.com\/blog\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/nagashur.com\/blog\/2012\/11\/04\/detection-de-visage-avec-opencv\/#webpage\",\"url\":\"http:\/\/nagashur.com\/blog\/2012\/11\/04\/detection-de-visage-avec-opencv\/\",\"name\":\"D\\u00e9tection de visage avec OpenCV - Nagashur\",\"isPartOf\":{\"@id\":\"http:\/\/nagashur.com\/blog\/#website\"},\"datePublished\":\"2012-11-04T18:09:21+00:00\",\"dateModified\":\"2012-11-04T18:19:03+00:00\",\"author\":{\"@id\":\"http:\/\/nagashur.com\/blog\/#\/schema\/person\/11a329fa33df4e94444716624beb8186\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/nagashur.com\/blog\/2012\/11\/04\/detection-de-visage-avec-opencv\/\"]}]},{\"@type\":\"Person\",\"@id\":\"http:\/\/nagashur.com\/blog\/#\/schema\/person\/11a329fa33df4e94444716624beb8186\",\"name\":\"sky99\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p6yqc2-7M","jetpack-related-posts":[{"id":543,"url":"http:\/\/nagashur.com\/blog\/2013\/01\/01\/controler-une-led-depuis-les-ports-gpio-du-raspberry-pi\/","url_meta":{"origin":482,"position":0},"title":"Contr\u00f4ler une LED depuis les GPIO du Raspberry PI","date":"1 janvier 2013","format":false,"excerpt":"Un des grands int\u00e9r\u00eats du Raspberry pi est qu'il dispose de GPIO utilisables comme entr\u00e9e ou sortie afin de lire des capteurs ou commandes des syst\u00e8mes. Nous nous verrons ici comment contr\u00f4ler les GPIO du Raspberry pi configur\u00e9s en mode sorte, \u00e0 travers un exemple concret ou nous commanderons une\u2026","rel":"","context":"Dans &quot;\u00e9lectronique&quot;","img":{"alt_text":"LED de 5mm : rouge, jaune, verte, orange, bleue, blanche et infrarouge","src":"https:\/\/i2.wp.com\/nagashur.com\/blog\/wp-content\/uploads\/2013\/01\/LEDs_5mm_4755_800px.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":25,"url":"http:\/\/nagashur.com\/blog\/2008\/09\/05\/systeme-de-detection-automatique-de-la-position-du-soleil\/","url_meta":{"origin":482,"position":1},"title":"Systeme de detection automatique de la position du soleil","date":"5 septembre 2008","format":false,"excerpt":"Imaginons que nous souhaitions avoir un syst\u00e8me qui soit a tout moment orient\u00e9 vers le soleil, de fa\u00e7on a ce que ses rayons soient majoritairement perpendiculaires \u00e0 notre dispositif. Dans cette optique, nous aurons besoin d'un dispositif capable de rep\u00e9rer si le soleil est \"au dessus\" ou bien \"au dessus\"\u2026","rel":"","context":"Dans &quot;bricolo&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":604,"url":"http:\/\/nagashur.com\/blog\/2013\/01\/15\/mesurer-la-luminosite-avec-une-photo-resistance\/","url_meta":{"origin":482,"position":2},"title":"Mesurer la luminosit\u00e9 avec une photo r\u00e9sistance","date":"15 janvier 2013","format":false,"excerpt":"Une photo-r\u00e9sistance est un composant dont la r\u00e9sistance varie en fonction de l'intensit\u00e9 lumineuse s'appliquant sur sa surface. On peut s'en servir pour d\u00e9tecter s'il fait jour ou nuit, mais aussi, en utilisant une paire de photo r\u00e9sistances, d\u00e9terminer la direction d'une source lumineuse. Ce composant pourra par exemple servir\u2026","rel":"","context":"Dans &quot;\u00e9lectronique&quot;","img":{"alt_text":"photor\u00e9sistances diverses","src":"https:\/\/i1.wp.com\/nagashur.com\/blog\/wp-content\/uploads\/2013\/01\/800px-Photoresistors_-_three_sizes_-_mm_scale.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":1884,"url":"http:\/\/nagashur.com\/blog\/2016\/07\/04\/capteur-de-son-binaire\/","url_meta":{"origin":482,"position":3},"title":"Capteur de son binaire (seuil) - Alitest","date":"4 juillet 2016","format":false,"excerpt":"Aujourd'hui, nous testons un capteur de son binaire \u00e9conomique achet\u00e9 sur Aliexpress. Pour 60 centimes, on nous propose un capteur capable de d\u00e9tecter un niveau sonore. Qu'en est il? c'est ce que nous verrons dans ce nouvel article de la rubrique alitest. Tout d'abord le capteur en lui m\u00eame est\u2026","rel":"","context":"Dans &quot;Arduino&quot;","img":{"alt_text":"Capteur de son binaire","src":"https:\/\/i2.wp.com\/nagashur.com\/blog\/wp-content\/uploads\/2016\/07\/sound_sensor_binary_1024_20160703_161250.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":975,"url":"http:\/\/nagashur.com\/blog\/2015\/08\/05\/automatisation-dun-eclairage\/","url_meta":{"origin":482,"position":4},"title":"Conception d'un syst\u00e8me d'\u00e9clairage automatis\u00e9, d\u00e9centralis\u00e9 et ergonomique","date":"5 ao\u00fbt 2015","format":false,"excerpt":"Nous discutons ici de solutions permettant un contr\u00f4le d\u00e9centralis\u00e9, une automatisation, un contr\u00f4le fin et une meilleure ergonomie de syst\u00e8mes d'\u00e9clairage.","rel":"","context":"Dans &quot;Arduino&quot;","img":{"alt_text":"contr\u00f4leur d'\u00e9clairage vu de dessus","src":"https:\/\/i0.wp.com\/nagashur.com\/blog\/wp-content\/uploads\/2015\/08\/light_controller800_4513.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":1974,"url":"http:\/\/nagashur.com\/blog\/2017\/06\/30\/rampe-a-led-intelligente-cuisine-via-arduino-capteur-pir\/","url_meta":{"origin":482,"position":5},"title":"Une rampe \u00e0 LED intelligente pour la cuisine via Arduino avec capteur PIR","date":"30 juin 2017","format":false,"excerpt":"Dans ma cuisine, au dessus de l'\u00e9vier, j'ai rajout\u00e9 deux lampes basses consommation. Cependant cette solution est loin d'\u00eatre id\u00e9ale : il est facile d'oublier d'\u00e9teindre ces lumi\u00e8res, l'\u00e9clairage est soit \u00e9teint, soit \u00e0 fond (\u00e9blouissant en pleine nuit), et je pr\u00e9f\u00e8re \u00e9viter d'avoir du 220V au dessus de l'\u00e9vier.\u2026","rel":"","context":"Dans &quot;Arduino&quot;","img":{"alt_text":"rampe \u00e0 LED intelligente : la carte de commande","src":"https:\/\/i2.wp.com\/nagashur.com\/blog\/wp-content\/uploads\/2017\/06\/light_board_7502_1024.jpg?resize=350%2C200","width":350,"height":200},"classes":[]}],"_links":{"self":[{"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/posts\/482"}],"collection":[{"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/comments?post=482"}],"version-history":[{"count":0,"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/posts\/482\/revisions"}],"wp:attachment":[{"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/media?parent=482"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/categories?post=482"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/nagashur.com\/blog\/wp-json\/wp\/v2\/tags?post=482"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}