opencv et intelligence artificielle

En mettant à jour mes pages de FUNIX sur les outils pour gérer la vidéo sous linux, j’ai mis à jour la bibliothèque OpenCV en la faisant évoluer vers la version 4.0.1. Jusqu’à présent je ne prenais pas le temps de me pencher sur les bibliothèques de bas niveau, préférant m’attarder sur les logiciels de haut niveau qui les utilisent comme le logiciel de montage vidéo kdenlive ou le célèbre lecteur vidéo VLC. J’ai cependant pris le temps de me pencher plus longuement sur OpenCV car c’est une bibliothèque pleine de ressources.

En deux mots, OpenCV fournit des routines de traitement vidéo en temps réel. Plus précisément vous pouvez détecter des visages, des objets, lire du texte, identifier une plaque d’immatriculation, faire du traking d’objets dans une vidéo ou une image. Plus fort encore, OpenCV dispose de méthodes d’apprentissage basées sur des réseaux de neurones pour affuter la reconnaissance d’objets, on n’est pas loin de l’intelligence artificielle !

Léna et Véronique en cours de kite

OpenCV n’est pas directement exploitable, c’est le principe même d’une bibliothèque de bas niveau, il faudra passer par une surcouche logicielle pour pouvoir l’exploiter. kdenlive l’exploite via mlt et le motion tracking (capture de mouvement), pour les développeurs on trouve un certain nombre de pages sur internet qui explique comment faire de la reconnaissance automatique avec quelques lignes de code de python comme celle-ci ou celle-là. De mon côté, je l’ai testé avec darknet, le nom peut prêter à confusion, cela n’a rien à voir avec le dark net ! C’est juste un outil de traitement vidéo et image basé sur le principe du réseau de neurones et qui utilise son propre algorithme qui s’appelle You only look once (YOLO) .

L’installation est très simple on récupérera le logiciel par git en tapant

git clone https://github.com/pjreddie/darknet

cela donne un répertoire darknet dans lequel on récupère une base d’apprentissage déjà pré renseignée de reconnaissance d’objet

wget https://pjreddie.com/media/files/yolov3.weights

maintenant on édite le fichier Makefile et on modifie ainsi les lignes suivantes

GPU=1
CUDNN=0
OPENCV=1
OPENMP=0
DEBUG=0

j’ai deux erreurs à la compilation, la première est celle-ci

./src/image_opencv.cpp:12:1: erreur : ‘IplImage’ does not name a type
 IplImage *image_to_ipl(image im)

je dois récupérer un patch qui se trouve ici, je le place dans le répertoire darknet et je lance la commande suivante pour patcher les fichiers

patch -p1 < darknet-fix-opencv-4.patch

maintenant en lançant le make, je me retrouve avec cette erreur

/usr/local/include/opencv4/opencv2/core/cvdef.h:656:4: erreur : #error "OpenCV 4.x+ requires enabled C++11 support"
 #  error "OpenCV 4.x+ requires enabled C++11 support"

C’est assez surprenant d’autant qu’OpenCV a été compilé avec le support C++11. En fait je reprends juste la ligne qui commence par g++ et je rajoute l’option -std=c++11 comme ceci

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
V -DGPU -c ./src/image_opencv.cpp -o obj/image_opencv.o

je complète avec make et on retrouve un exécutable darknet dans le répertoire du même nom. On y trouve également des images test placés sous data, cette page indique comment les exploiter. J’ai voulu tester avec ma propre image et j’avoue que c’est assez bluffant (cf. l’image du haut de l’article) ! Même s’il a confondu un kite avec un oiseau… La commande à taper est

./darknet detect cfg/yolov3.cfg yolov3.weights data/kites.jpg

on peut également faire la même chose avec une vidéo ou la webcam, c’est assez gourmand en ressource mais ça donne également un excellent résultat.

On pourra aller plus loin en se tournant vers la documentation d’OpenCV et vers les nombreux sites qui abordent le sujet. Je regrette juste maintenant que kdenlive exploite aussi peu les possibilités d’OpenCV, le motion tracking est franchement mauvais avec kdenlive et gagnerait à s’améliorer.

Laisser un commentaire