Installare OpenCV su Windows 10 e scrivere il primo programma di riconoscimento volti

In questo articolo vedremo prima di tutto come impostare l’ambiente di sviluppo per OpenCV su Windows 10. Dopodiché vedremo come scrivere un semplice programma di riconoscimento facciale.
E’ bene spiegare fin da subito che noi di ProjectEMS abbiamo scelto di sviluppare su sistema operativo Windows 10, con Visual Studio, in linguaggio Visual C++. Esistono altre alternative, tuttavia, per questi primi articoli di introduzione ci occuperemo solo di tutto ciò che riguarda OpenCV+Win10+Visual Studio. Nei prossimi articoli approfondiremo anche altri aspetti.

Preparare l’ambiente di sviluppo

Preparare l’ambiente di sviluppo è abbastanza semplice. Proprio a questo riguardo abbiamo preparato un video che vi consigliamo di visionare per intero.
Qui potete scaricare Visual Studio: https://www.visualstudio.com/it/downloads/
Qui potete scaricare OpenCV: https://opencv.org/releases.html

Scrivere il primo programma di riconoscimento facciale con OpenCV

Inizieremo prendendo una foto e cercando di individuare i volti al suo interno. Il programma che andremo a scrivere ora è molto semplice, quello che farà sarà, una volta ricevuto il path dell’immagine, andare a disegnare un cerchio intorno alla faccia riconosciuta.
Per comprendere meglio il funzionamento del codice vi consigliamo la visione completa del seguente video.
Vi lascio qui anche il link per scaricare la foto di esempio che viene utilizzata nel video tutorial: foto di esempio.

//Include
#include "stdafx.h"

#include <string>

#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"

#include <iostream>
#include <stdio.h>

//Name Space
using namespace std;
using namespace cv;

//Variabili
//Stringa dove andrò a scrivere il percorso dell'immagine
string percorso;
//Variabile dove andrò a memorizzare l'immagine
Mat image;

//Main
int main()
{
	//Scrivo che mi serve il path del fine da analizzare
	cout << "Inserisci il percorso dell'immagine da analizzare. \n";

	//Inizio il ciclo di controllo per controllare che il path inserito non sia vuoto
	do {
		//Prendo il path in input
		getline(cin, percorso);
		//Eseguo un rudimentale controllo sul path inserito, controllo se sia vuoto o meno con un if-else
		if (percorso.empty())
			cout << "Hai premuto invio lasciando il percorso vuoto. Scrivi un percorso valido. \n";
		else {
			cout << "Percorso accettato, inizio ad analizzare l'immagine. \n";
		}
	} while (percorso.empty());

	//Inizo del codice per Open CV

	//Utilizzo la variabile creata prima e ci metto dentro l'immagine. Notare che uso la stringa percorso per dirgli dove è posizionata l'immagine
	image = imread(percorso, CV_LOAD_IMAGE_COLOR);
	//Creo una finestra in cui far vedere l'immagine originale
	namedWindow("Immagine originale", 1);   imshow("Immagine originale", image);

	// Carilo il Face cascade. State attenti al percorso, inseritelo correttamente
	CascadeClassifier face_cascade;
	face_cascade.load("C:\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_default.xml");

	// Procedo ad avviare il Face detecte
	std::vector<Rect> facce;
	face_cascade.detectMultiScale(image, facce, 1.1, 8);

	// Disegno un cerchio intorno alla faccia riconosciuta
	for (int i = 0; i < facce.size(); i++)
	{
		Point center(facce[i].x + facce[i].width*0.5, facce[i].y + facce[i].height*0.5);
		ellipse(image, center, Size(facce[i].width*0.5, facce[i].height*0.5), 0, 0, 360, Scalar(96, 158, 0), 3, 7, 0);
	}

	//Viene mostrata la faccia (o le facce) riconosciuta con il cerchio disegnato
	imshow("Faccia riconosciuta", image);

	//aspetta la pressione un tasto prima di concludere
	waitKey(0);
	return 0;
}

Vuoi rimanere aggiornato sulle nostre iniziative?