Dernièrement j’ai dû installer OpenCV1 sur ma machine Windows. Je me suis rapidement rendu compte que c’était une vraie galère ! Entre l’installation d’IDE beaucoup trop pesant pour le travail voulu et la ribambelle de dépendances. Aujourd’hui nous apprenons à installer OpenCV sans installer Visual Studio.
Ce tutoriel s’appuie très fortement sur l’interface utilisateur de Windows 10 AVEC l’outil MSYS22. Nous n’apprendrons pas comment recompiler la librairie OpenCV pour Windows.
Introduction
Commençons, pour bien travailler il nous faut un environnement de travail efficace et disposant de toutes les fonctions.
OpenCV utilise des std::threads et std::mutex, nous avons donc besoin d’un portage Windows de ces bibliothèques. MinGW dans la version qu’on trouve le plus couramment sur le web implémente c++99 ainsi que les threads, mais pas les mutex. Nous installerons MSYS2(, qui lui implémente threads et mutex.
OpenCV propose dans sa version 4.5 des librairies pour VC14 et VC15, cependant nous voudrions nous passer de Visual Studio. Il nous faut donc trouver des portages de OpenCV plus légers ou en tout cas ne visant SP2CIFIQUEMENT pas l’environnement de travail VC.
MSYS2
Commençons par installer notre environnement de développement. Nous voulons utiliser sur Windows un certain nombre de fonctionnalités parmi les quelles, les threads et les mutex des standards Linux. Un portage des classes standard de pthreads sur MINGW a été réalisé et est disponible sur github, cependant je n’ai trouvé aucun portage des classes mutex.
Ces classes, MUTEX et PTHREADS font parties du standard C++11 officiellement implémentée depuis gcc 4.6 . Cependant, la dernière version de MinGW date de 2013 et bien qu’elle implémente gcc 4.7 l’accès aux classes mutex n’est pas assuré.
Nous utiliserons donc MSYS2
Téléchargement
Nous allons installer MSYS2 pour l’utiliser en tant qu’environnement de développement sur notre machine Windows. Il vous suffit de télécharger MSYS2.
Msys2 implémente un outil de gestion des paquets appelé PACMAN. Nous allons l’utiliser pour installer les différentes dépendances de notre projet. Il faut alors exécuter les commandes suivantes :
Mise à jour de la base de donnée des paquets
pacman -Syu
Mise à jour des paquets de base
pacman -Su
Installation de l’environnement de développement c++. Nous installons ici CRunTime, GCC, les librairires MINGW64, ainsi que des outils pour utiliser les threads
Pour systèmes 32Bits
pacman -S mingw-w64-i686-binutils mingw-w64-i686-crt-git mingw-w64-i686-gcc mingw-w64-i686-gcc-libsmingw-w64-i686-headers-git mingw-w64-i686-libwinpthread-git mingw-w64-i686-tools-git mingw-w64-i686-winpthreads-git
Pour systèmes 64Bits
pacman -S mingw-w64-x86_64-binutils mingw-w64-x86_64-crt-git mingw-w64-x86_64-gcc mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-headers-git mingw-w64-x86_64-libwinpthread-git mingw-w64-x86_64-tools-git mingw-w64-x86_64-winpthreads-git mingw-w64-x86_64-make
Nous allons aussi en profiter pour installer l’outil make
Pour systèmes 32Bits
pacman -S mingw-w64-i686-make
Pour systèmes 64Bits
pacman -S mingw-w64-x86_64-make
Nous pourrions aussi installer l’ensemble des outils de programmation proposés par MSYS2 (MYNGW64) mais le résultat sera beaucoup plus lourd ce qui n’est pas notre objectif (Ne pas installer quoi que ce soit de trop lourds).
Pour systèmes 32Bits (src)
pacman -S mingw-w64-i686-toolchain
Pour systèmes 64Bits (src)
pacman -S mingw-w64-x86_64-toolchain
Utilisation
La prochaine étape est d’ajouter dans vos variables d’environnement le chemin d’accès aux fichiers exécutables ajouter par MSYS2. Accéder au dossier d’installation de mingw-64 sur votre machine, parcourez les fichiers jusqu’à trouver un dossier bin. C’est le dossier dans lequel vos outils ont été installés. Le chemin est différent en fonction de votre système.
Pour systèmes 32Bits
C:\msys64\mingw32\bin
Pour systèmes 64Bits
C:\msys64\mingw64\bin
Parfait ! Si vous aviez un Terminal ouvert, c’est le moment de le fermer et d’en lancer un nouveau. Vous devriez pouvoir utiliser les commandes g++ et make. Faites un test avec
g++ -c
OpenCV
Git
OpenCV est disponible sur son git. En téléchargeant ces archives, on se rend compte que l’équipe d’OpenCV a pris le temps de préparer toutes les librairies pour VC14 et VC15 (Visual Studio 4 2015 et 5 2017) mais rien de préparer pour MinGW. Nous devons donc nous préparer à créer nos propres librairies, à recompiler le code de OpenCV pour notre utilisation.
C’est un travail important pour lequel il est recommandé d’utiliser CMake. Le but ici est de travailler avec le moins d’outil possible alors une solution serait de trouver quelqu’un qui aurait recompiler les librairies pour MinGW.
Heureusement, pour nous, cette personne existe et le résultat de son travail est disponible sur git.
MSYS2
Cependant, nous avons entre les mains un outil très puissant, MSYS2. Avec PACMAN nous pouvons en effet installer directement OpenCV et peut importe votre système.
Pour systèmes 32Bits (src)
pacman -S mingw-w64-i686-opencv
Pour systèmes 64Bits (src)
pacman -S mingw-w64-x86_64-opencv
Une fois l’installation réalisée vous pourrez trouver les fichiers d’entêtes de OpenCV.
Pour systèmes 32Bits (src)
C:\msys64\mingw64\include\opencv4
Pour systèmes 64Bits (src)
C:\msys64\mingw64\include\opencv4
Il est important de noter que l’installation d’OpenCV est réalisée dans un dossier \opencv4
cette particularité nous force à inclure les librairies OpenCV en précisent "opencv4/opencv2/lib.hpp"
ce qui est suboptimal. Une solution simple est d’ajouter aux variables d’environnement le chemin d’accès aux entêtes.
Exemple
Maintenant qu’on a bien ajouté aux variables d’environnement les chemins suivants:
Pour systèmes 32Bits (src)
C:\msys64\mingw32\include\opencv4
C:\msys64\mingw32\bin
C:\msys64\mingw32\include
Pour systèmes 64Bits (src)
C:\msys64\mingw64\include\opencv4
C:\msys64\mingw64\bin
C:\msys64\mingw64\include
Nous pouvons exécuter notre bout de code. Pour ce faire il vous faudra télécharger des fichiers haar_cascade 3, vous pouvez en trouver sur ce git.
CC = g++
CFLAGS = -std=c++11
PATH_TO_OPENCV_INCLUDES= "C:/msys64/mingw64/include/opencv4" #VOTRE CHEMIN VERS LE DOSSIER INCLUDE
PATH_TO_OPENCV_LIBRAIRIES = "C:/msys64/mingw64/bin" #VOTRE CHEMIN VERS LE DOSSIER BIN
INC_FLAG = -I
LIB_FLAG = -L
OPEN_CV_I = $(INC_FLAG)$(PATH_TO_OPENCV_INCLUDES)
OPEN_CV_L = $(LIB_FLAG)$(PATH_TO_OPENCV_LIBRAIRIES)
LIBRAIRIES = -lopencv_core -lopencv_objdetect -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs -lopencv_calib3d -lopencv_imgproc -lopencv_videoio
all: example
example:
$(CC) $@.cpp $(CFLAGS) $(OPEN_CV_I) $(OPEN_CV_L) $(LIBRAIRIES)
#include <iostream>
#include <opencv2/objdetect.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int, char **) {
vector<Mat> images;
vector<int> labels;
CascadeClassifier haar_cascade;
haar_cascade.load("./haarcascade_frontalface_default.xml");
VideoCapture cap(0);
if (!cap.isOpened())
return -1;
Mat grImage;
namedWindow("face", 1);
for (;;) {
Mat frame;
cap >> frame; // get a new frame from camera
cvtColor(frame, grImage, 6);
vector<Rect_<int>> faces;
haar_cascade.detectMultiScale(grImage, faces);
for (int i = 0; i < faces.size(); i++) {
Rect face_i = faces[i];
rectangle(frame, face_i, CV_RGB(0, 255, 0), 1);
}
imshow("face", frame);
if (waitKey(30) >= 0)
break;
}
return 0;
}
Ce code est un des codes de test de OpenCV, permettant de tester la caméra et la reconnaissance de visage. Il vous suffit de vous mettre dans le dossier de votre code d’ouvrir le terminal Windows et d’exécuter le make
mingw32-make
Tout est bon ! Vous pouvez utiliser OpenCV, sur Windows en C++ et sans IDE.
2 Comments
Johnny le Boss
MERCI JOJO !!!! <3