Installer openCV 4.5.0 sur Windows (sans Visual Studio)

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)
Makefile
#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;
}
exemple.cpp

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

Comments are closed.