{"id":3363,"date":"2019-02-12T12:50:08","date_gmt":"2019-02-12T11:50:08","guid":{"rendered":"http:\/\/olivier.hoarau.org\/?p=3363"},"modified":"2019-02-12T19:05:58","modified_gmt":"2019-02-12T18:05:58","slug":"opencv-et-intelligence-artificielle","status":"publish","type":"post","link":"https:\/\/olivier.hoarau.org\/?p=3363","title":{"rendered":"opencv et intelligence artificielle"},"content":{"rendered":"\n<p>En mettant \u00e0 jour mes pages de <a href=\"http:\/\/www.funix.org\">FUNIX<\/a> sur les outils pour g\u00e9rer la vid\u00e9o sous linux, j&rsquo;ai mis \u00e0 jour la biblioth\u00e8que <a href=\"http:\/\/www.funix.org\/fr\/linux\/index.php?ref=base-video#Installation_dOpenCV\">OpenCV<\/a> en la faisant \u00e9voluer vers la version 4.0.1. Jusqu&rsquo;\u00e0 pr\u00e9sent je ne prenais pas le temps de me pencher sur les biblioth\u00e8ques de bas niveau, pr\u00e9f\u00e9rant m&rsquo;attarder sur les logiciels de haut niveau qui les utilisent comme le logiciel de montage vid\u00e9o <a href=\"http:\/\/www.funix.org\/fr\/linux\/index.php?ref=kdenlive\">kdenlive<\/a> ou le c\u00e9l\u00e8bre lecteur vid\u00e9o <a href=\"http:\/\/www.funix.org\/fr\/linux\/index.php?ref=video#VLC\">VLC<\/a>. J&rsquo;ai cependant pris le temps de me pencher plus longuement sur <strong>OpenCV<\/strong> car c&rsquo;est une biblioth\u00e8que pleine de ressources.<\/p>\n\n\n\n<p>En deux mots, <strong>OpenCV<\/strong> fournit des routines de traitement vid\u00e9o en temps r\u00e9el. Plus pr\u00e9cis\u00e9ment vous pouvez d\u00e9tecter des visages, des objets, lire du texte, identifier une plaque d\u2019immatriculation, faire du traking d&rsquo;objets dans une vid\u00e9o ou une image. Plus fort encore, <strong>OpenCV<\/strong> dispose de m\u00e9thodes d&rsquo;apprentissage bas\u00e9es sur des r\u00e9seaux de neurones pour affuter la reconnaissance d&rsquo;objets, on n&rsquo;est pas loin de l&rsquo;intelligence artificielle !<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"474\" height=\"492\" src=\"https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/darknet.jpg?resize=474%2C492\" alt=\"\" class=\"wp-image-3364\" srcset=\"https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/darknet.jpg?w=516&amp;ssl=1 516w, https:\/\/i0.wp.com\/olivier.hoarau.org\/wp-content\/uploads\/darknet.jpg?resize=289%2C300&amp;ssl=1 289w\" sizes=\"auto, (max-width: 474px) 100vw, 474px\" \/><figcaption>L\u00e9na et V\u00e9ronique en cours de kite<\/figcaption><\/figure>\n\n\n\n<!--more-->\n\n\n\n<p><strong>OpenCV<\/strong> n&rsquo;est pas directement exploitable, c&rsquo;est le principe m\u00eame d&rsquo;une biblioth\u00e8que de bas niveau, il faudra passer par une surcouche logicielle pour pouvoir l&rsquo;exploiter.  <a href=\"http:\/\/www.funix.org\/fr\/linux\/index.php?ref=kdenlive\">kdenlive<\/a> l&rsquo;exploite via <strong>mlt<\/strong> et le motion tracking (capture de mouvement), pour les d\u00e9veloppeurs on trouve un certain nombre de pages sur internet qui explique comment faire de la reconnaissance automatique avec quelques lignes de code de <strong>python<\/strong> comme <a href=\"https:\/\/realpython.com\/face-recognition-with-python\/\">celle-ci <\/a>ou <a href=\"https:\/\/www.datacamp.com\/community\/tutorials\/face-detection-python-opencv\">celle-l\u00e0<\/a>. De mon c\u00f4t\u00e9, je l&rsquo;ai test\u00e9 avec <a href=\"https:\/\/pjreddie.com\/darknet\/\">darknet<\/a>, le nom peut pr\u00eater \u00e0 confusion, cela n&rsquo;a rien \u00e0 voir avec le dark net ! C&rsquo;est juste un outil de traitement vid\u00e9o et image bas\u00e9 sur le principe du r\u00e9seau de neurones et qui utilise son propre algorithme qui s&rsquo;appelle You only look once (<strong>YOLO<\/strong>) .<\/p>\n\n\n\n<p>L&rsquo;installation est tr\u00e8s simple on r\u00e9cup\u00e9rera le logiciel par <strong>git<\/strong> en tapant<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>git clone https:\/\/github.com\/pjreddie\/darknet<\/code><\/pre>\n\n\n\n<p>cela donne un r\u00e9pertoire <strong>darknet<\/strong> dans lequel on r\u00e9cup\u00e8re une base d&rsquo;apprentissage d\u00e9j\u00e0 pr\u00e9 renseign\u00e9e de reconnaissance d&rsquo;objet<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wget https:\/\/pjreddie.com\/media\/files\/yolov3.weights<\/code><\/pre>\n\n\n\n<p>maintenant on \u00e9dite le fichier <strong>Makefile<\/strong> et on modifie ainsi les lignes suivantes<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GPU=1\nCUDNN=0\nOPENCV=1\nOPENMP=0\nDEBUG=0<\/code><\/pre>\n\n\n\n<p>j&rsquo;ai deux erreurs \u00e0 la compilation, la premi\u00e8re est celle-ci<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/src\/image_opencv.cpp:12:1: erreur\u00a0: \u2018IplImage\u2019 does not name a type\n IplImage *image_to_ipl(image im)<\/code><\/pre>\n\n\n\n<p>je dois r\u00e9cup\u00e9rer un patch qui se trouve <a href=\"https:\/\/gist.github.com\/tiagoshibata\/f322466e8b31c14a4b98d53bf74e4f6c#file-darknet-fix-opencv-4-patch\">ici<\/a>, je le place dans le r\u00e9pertoire <strong>darknet<\/strong> et je lance la commande suivante pour patcher les fichiers<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>patch -p1 &lt; darknet-fix-opencv-4.patch<\/code><\/pre>\n\n\n\n<p>maintenant en lan\u00e7ant le <strong>make<\/strong>, je me retrouve avec cette erreur<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/usr\/local\/include\/opencv4\/opencv2\/core\/cvdef.h:656:4: erreur\u00a0: #error \"OpenCV 4.x+ requires enabled C++11 support\"\n #  error \"OpenCV 4.x+ requires enabled C++11 support\"<\/code><\/pre>\n\n\n\n<p>C&rsquo;est assez surprenant d&rsquo;autant qu&rsquo;<strong>OpenCV<\/strong> a \u00e9t\u00e9 compil\u00e9 avec le support <strong>C++11<\/strong>. En fait je reprends juste la ligne qui commence par <strong>g++ <\/strong>et je rajoute l&rsquo;option<strong>  -std=c++11<\/strong> comme ceci<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>g++ -Iinclude\/ -Isrc\/ -std=c++11 -DOPENCV `pkg-config --cflags opencv 2> \/dev\/null || pkg-config --cflags opencv4` -DGPU -I\/usr\/local\/cuda\/include\/ -Wall -Wno-unused-result -Wno-unknown-pragmas -Wfatal-errors -fPIC -Ofast -DOPENC\nV -DGPU -c .\/src\/image_opencv.cpp -o obj\/image_opencv.o<\/code><\/pre>\n\n\n\n<p>je compl\u00e8te avec <strong>make<\/strong> et on retrouve un ex\u00e9cutable <strong>darknet<\/strong> dans le r\u00e9pertoire du m\u00eame nom. On y trouve \u00e9galement des images test plac\u00e9s sous <strong>data<\/strong>, cette <a href=\"https:\/\/pjreddie.com\/darknet\/yolo\/\">page<\/a> indique comment les exploiter. J&rsquo;ai voulu tester avec ma propre image et j&rsquo;avoue que c&rsquo;est assez bluffant (cf. l&rsquo;image du haut de l&rsquo;article) ! M\u00eame s&rsquo;il a confondu un kite avec un oiseau&#8230; La commande \u00e0 taper est<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/darknet detect cfg\/yolov3.cfg yolov3.weights data\/kites.jpg<\/code><\/pre>\n\n\n\n<p>on peut \u00e9galement faire la m\u00eame chose avec une vid\u00e9o ou la webcam, c&rsquo;est assez gourmand en ressource mais \u00e7a donne \u00e9galement un excellent r\u00e9sultat.<\/p>\n\n\n\n<p>On pourra aller plus loin en se tournant vers la documentation d&rsquo;<a href=\"https:\/\/docs.opencv.org\/4.0.1\/d9\/df8\/tutorial_root.html\">OpenCV<\/a> et vers les nombreux sites qui abordent le sujet. Je regrette juste maintenant que <strong>kdenlive<\/strong> exploite aussi peu les possibilit\u00e9s d&rsquo;<strong>OpenCV<\/strong>, le motion tracking est franchement mauvais avec <strong>kdenlive<\/strong> et gagnerait \u00e0 s&rsquo;am\u00e9liorer.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En mettant \u00e0 jour mes pages de FUNIX sur les outils pour g\u00e9rer la vid\u00e9o sous linux, j&rsquo;ai mis \u00e0 jour la biblioth\u00e8que OpenCV en la faisant \u00e9voluer vers la version 4.0.1. Jusqu&rsquo;\u00e0 pr\u00e9sent je ne prenais pas le temps de me pencher sur les biblioth\u00e8ques de bas niveau, pr\u00e9f\u00e9rant m&rsquo;attarder sur les logiciels de &hellip; <a href=\"https:\/\/olivier.hoarau.org\/?p=3363\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">opencv et intelligence artificielle<\/span>  <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_share_on_mastodon":"0"},"categories":[5],"tags":[],"class_list":["post-3363","post","type-post","status-publish","format-standard","hentry","category-logiciels-libres"],"share_on_mastodon":{"url":"","error":""},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/peOjJ-Sf","jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/posts\/3363","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3363"}],"version-history":[{"count":7,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/posts\/3363\/revisions"}],"predecessor-version":[{"id":3373,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=\/wp\/v2\/posts\/3363\/revisions\/3373"}],"wp:attachment":[{"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3363"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3363"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/olivier.hoarau.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3363"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}