Italiano - English

Compilare e Installare OpenCV 3.1 con Code::Blocks 16.x

In questa pagina viene spiegato come compilare e utilizzare la libreria OpenCV 3.1 x64bit con il compilatore Code::Blocks 16.10. Viene mostrato il caso di Window.

OpenCV[1] è una libreria Open Source  di funzioni per la Computer Vision e Machine Learning. E' disponibile per C, C++, Python  e Java  per piattaforme Windows, Linux, Mac/iOS e Android. Alla data di questo articolo è disponibile la versione 3.1

Code::Blocks[2] è un ambiente di sviluppo integrato (IDE). Il compilatore C/C++ predefinito per Code::Blocks è il famosissimo gcc/g++ proveniente dal mondo unix. Il porting della catena di sviluppo da Linux a Windows è garantito dagli strumenti MinGW. In particolare su Windows Code::Blocks utilizza il set di strumenti offerti dalla distribuzione TDM-GCC.

OpenCV è una libreria quindi si compone di file da includere nel proprio codice e file da collegare con il proprio eseguibile. Nel caso del C++ su Windows OpenCV si compone di file .h/.a da collegare al proprio codice e file .dll da usare insieme al proprio eseguibile.

E' possibile scaricare un setup di OpenCV che contiene la libreria compilata ma è disponibile solo per il compilatore Visual Studio 2013 e 2015. Per fortuna OpenCV viene distribuita in forma di file sorgenti quindi è possibile compilare per usare OpenCV con altri compilatori è necessario compilare l'intera libreria con il proprio compilatotr. Ad essere precisi OpenCV

Prerequisiti

  1. Scaricare e installare la distribuzione MinGW preferita. Ad esempio tdm-gcc (http://tdm-gcc.tdragon.net/download) include il supporto 64 bit e le librerie OpenMP per il multi threading. La versione "On-demand installer" permette di gestire e aggiornare la propria installazione MingGW
  2. Scaricare e installare Code::Blocks dal sito http://www.codeblocks.org/downloads. Considerato MinGW è stato installato separatamente si consiglia di scaricare il setup del solo Code::Blocks
  3. Scaricare e installare CMake il programma di configurazione della compilazione dal sito https://cmake.org/download/
  4. Scaricare i sorgenti di OpenCV. Il sito di riferimento è http://opencv.org/downloads.html ma i sorgenti sono gestiti tramite GitHub all'indirizzo https://github.com/Itseez/opencv
  5. Scaricare i moduli extra OpenCV-Contrib da https://github.com/Itseez/opencv_contrib. (Nota I moduli in questa sezione sono recenti e spesso non ampiamente testati e non ancora approvati per la distribuzione ufficiale. Ciò non ostante contengono molte funzioni interessanti quindi vale la pena averle disponibili)

NOTA: Per scaricare i sorgenti di OpenCV è possibile utilizzare Git clonando direttamente da GitHub il repository di ufficiale: http://github.com/itseez/opencv

Configurazione della compilazione tramite CMake

Si suppone che CMake , Code::Blocks con MinGW siano installati e funzionanti

  • Scompattare i sorgenti di OpenCV nella cartella desiderata
    ad esempio Z:\LIBS\OpenCV\3.1.0\Sources\opencv
  • Scompattare i sorgenti di OpenCV contrib nella cartella desiderata
    ad esempio Z:\LIBS\OpenCV\3.1.0\Sources\opencv-contrib
  • Creare una cartella per la compilazione
    ad esempio Z:\LIBS\OpenCV\3.1.0\Builds\CodeBlocks

Si dovrebbe ottenere una struttura simile alla seguente:

Z:\LIBS\OpenCV\3.1.0\
       Sources\
           opencv\
           opencv-contrib\
       Buils\
           CodeBlocks\

Lanciare CMake (cmake-gui) e impostare i percorsi scelti quindi premere Configure

A questo punto CMake chiede di scegliere quale compilatore si desidera utilizzare per compilare OpenCV. Si ricorda che CMake è uno strumento che configura la compilazione per diversi tipi di compilatore e diverse piattaforme. Nel nostro caso sceglieremo CodeBlocks - MinGW MakeFiles e Use default native compilers.

Ora CMake inizia con una serie di test del compilatore e del nostro computer... dopo circa un minuto ci propone una configurazione predefinita per la libreria. E' possibile configurare tutte le opzioni prima di procedere alla compilazione.

Queste opzioni verranno cablate all'interno della libreria. Una volta compilato OpenCV non è possibile modificare le opzioni a meno di non ripetere la compilazione.

Verifica: Code::Blocks e compilatore gcc/g++ è stato trovato correttamente da CMake ?

Se gli strumenti non sono nella path potrebbe accadere che CMake non riesce a trovare Code::Blocks oppure il compilatore.... verificare di avare una configurazione analoga alla seguente:

I FLAGS -m32 attivano la compilazione (e link) a 32 bit per quei compilatori che supportano la doppia compilazione 32/64 bit. Con TDM-GCC la compilazione predefinita (FLAGS vuoti) è a 64bit quindi è necessario indicare questi flag solo per ottenere la OpenCV a 32 bit.

Modifiche alla configurazione predefinita

In generale non è necessario modificare la configurazione predefinita generata da CMake a meno che:

  1. Si vuole compilare e installare i moduli extra di opencv-contrib
  2. La distribuzione MinGW utilizzata non supporta la compilazione per Python
  3. Si vuole attivare qualche modulo o libreria aggiuntiva quali CUDA, Cafe, Tesseract e altri
  4. Si vuole disattivare qualche modulo o opzione di compilazione

Attivare i moduli extra di opencv-contrib

I moduli opencv_contrib possono contenere funzioni non stabili o non ben testate. Inoltre la compilazione monolitica opencv_world e opencv_contrib_world potrebbe non funzionare correttamente.

Basta indicare il percorso in cui CMake può trovare i moduli opencv-contrib.
Nel nostro caso indicare Z:\LIBS\OpenCV\3.1.0\Sources\opencv-contrib\modules e premere Configure

Sezione BUILD: Cosa compilare ?

  1. Disattivare la documentazione. Di solito non è necessario generare la documentazione perché disponibile on line sempre aggiornata. Inoltre generare la documentazione richiede tempo e sono necessari altri software aggiuntivi
  2. Disattivare la gli esempi. La compilazione degli esempi richiede molto tempo e non è proprio necessaria. Gli esempi rimangono disponibili per una analisi e compilazione successiva (Z:\LIBS\OpenCV\3.1.0\Sources\opencv\samples)
  3. Disattivare la compilazione dei test. Gli strumenti di test sono dedicati al controllo degli errori e delle prestazioni di OpenCV . Sono funzioni avanzate che servono agli sviluppatori di OpenCV. Se avete bisogno di leggere questa guida molto probabilmente non avete bisogno dei test...(per il momento)
  4. OPZIONALE. OpenCV può essere compilata in modo da creare una DLL per ogni modulo. E' anche possibile creare una sola DLL chiamata opencv_world che comprende tutti i moduli. Questa opzione è comoda perché racchiude OpenCV in un solo file ma genera una DLL molto grande che spesso rallenta l'avvio del programma finale
Bug con OpenCV 3.1.0+CMake 3.5 + OpenCL + bioinspired. Il modulo opencv_bioinspired 3.1.0 genera un errore durante la compilazione quando è attivo il supporto OpenCL. La soluzione che è stata implementata nelle dev-release successive è di sostituire tutti i marcatori di commento //****... con //----... nel file opencv-contrib\modules\bioinspired\src\opencl\retina_kernel.cl. Per utilizzare il modulo opencv_bioinspired 3.1.0 è necessario applicare la soluzione manualmente oppure scaricare il nuovo file direttamente dal repository a questo indirizzo.

Supporto per Python

Librerie OpenCV per Pyhon. Se Python è installato sul vostro computer CMake predispone la compilazione dei moduli di OpenCV per Python. In questo caso è necessario assicurarsi che la propria distribuzione MinGW supporti la compilazione per Python. TDM-64 non compila direttamente il supporto per Python quindi, in questo caso, disattiviamo i moduli Python.

Supporto ai parallel framework

OpenCV gestisce diversi parallel framework  da attivare al momento della compilazione. E' possibile attivare tutti i framework e CMake verifica se le relative librerie o se il compilatore in uso le supporta.

E' anche possibile attivare il supporto a librerie ottimizzate per le prestazioni e il parallelismo come Intel(r) Integrate Performance Primitives (IPP) e Intel(r) Threading Building Blocks (TBB).  Le librerie IPP vengono scaricate e compilate automaticamente da CMake. Le librerie TBB devono essere scaricate a parte e compilate prima.

Generare la configurazione

Ricordarsi di scegliere il tipo di versione da creare. In questo caso scegliamo di compilare  una versione di Release. Terminata la configurazione con CMake è necessario generare i file di configurazione finale tramite il pulsante Generate . Quando compare "Generating Done" chiudere CMake.

CMake genera direttamente un file di progetto pronto per essere caricato e compilato con Code::Blocks

Compilare OpenCV con Code::Blocks

Da Code::Blocks aprire il file di progetto generato da CMake nella cartella di compilazione. In questo caso aprire il progetto  Z:\LIBS\OpenCV\3.1.0\Builds\CodeBlocks\OpenCV.cbp. Assicurasi che all sia selezionato e avviare al compilazione con Build.

La compilazione dura circa 30 minuti

"Installare" OpenCV

CMake genera anche il progetto per creare una "installazione" di OpenCV. In verità questa operazione crea una cartella Install in cui copia tutti i file necessari ad utilizzare OpenCV con i propri programmi. Per procedere selezionare il progetto install e avviare l'esecuzione con Build come indicato in figura

L'operazione dura circa 1 minuto. Al termine tutti i file necessari ad utilizzare OpenCV si troveranno nella cartella
Z:\LIBS\OpenCV\3.1.0\Builds\CodeBlocks\install .

Z:\LIBS\OpenCV\3.1.0\CodeBlocks\install\       <- cartella principale per OpenCV compilato
    LICENSE    <- Licenza di OpenCV
    bin\       <- Esempi compilati
    etc\       <- File XML dei classificatori di esempio
    include\   <- File da includere nei propri progetti
    x64\       <- Cartella relativa alla architettura x64
        mingw\    <- Cartella relativa al compilatore utilizzato      
           bin\      <- le DLL dei moduli di OpenCV (valide solo per architettura+compilatore)
           lib\      <- i file .a da linkare con i propri progetti

E' possibile spostare la cartella principale in qualsiasi percorso desiderato.

Creare un progetto OpenCV con Code::Blocks

Creare un nuovo progetto console , esempio OpenCV-Base, e impostare il compilatore affinché sia in grado di reperire i file di OpenCV.

  1. Accedere alla proprietà generali con Project > Build Options > OpenCV-Base
  2. Creare le seguenti variabili in Custom Variables
    OCV_PATH = Z:\LIBS\OpenCV\3.1.0\Builds\CodeBlocks\install
    OCV_PLATFORM = x64
    OCV_VERSION = 310
  3. Impostare il percorso di ricerca per gli include file Search Directories > Compiler: $(OCV_PATH)\include
  4. Impostare il percorso di ricerca per le librerie  Search Directories > Linker: $(OCV_PATH)\$(OCV_PLATFORM)\mingw\lib
  5. Aggiungere tutti i file di libreria utilizzati in Linker settings / Link Libraries  ovvero
    libopencv_aruco$(OCV_VERSION).dll.a
    libopencv_bgsegm$(OCV_VERSION).dll.a
    libopencv_bioinspired$(OCV_VERSION).dll.a
    ...

Aprire il file main.cpp e provare a compilare un semplice esempio:

 
#include <iostream>
#include <opencv2/opencv.hpp>
 
using namespace std;
 
int main()
{
  cv::Mat frame;
  cv::VideoCapture cap(0);
  if(!cap.isOpened()) {
      cout << "Impossibile accedere alla telecamera"<<endl;
      return 0;
  }
 
  while(1) {
    cap >> frame;
    if (frame.empty()) {
      cout << "Impossibile leggere dalla telecamera"<<endl;
      break;
    }
 
    cv::imshow("Live",frame);
    if (cv::waitKey(5) >=0 ) break;
  }
  return 0;
}
E' possibile esportare il progetto come modello (File > Save Project as Template...)  e utilizzarlo per per creare nuovi progetti

Footnotes

  1. ^ Sito Ufficiale di OpenCV: www.opencv.org
  2. ^ Sito Ufficiale di Code::Blocks: www.codeblocks.org
Vota questa pagina:

0 Commenti:

Lascia il tuo commento:

Note:
  • La tua email non è obligatoria e non sarà visibile in alcun modo
  • Si prega di inviare solo commenti relativi a questa pagina
  • Commenti inappropriati o offensivi saranno modificati o eliminati
  • Codici HTML non sono consentiti. Prego usare i BB code:
    [b]bold[/b], [u]underline[/u], [i]italic[/i], [code]code[/code]
Il codice, le illustrazioni e gli esempi riportati in questa pagina sono solo a scopo illustrativo. L'autore non prende alcuna responsabilità per il loro utilizzo da parte dell'utente finale.
Questo materiale è di proprietà di Pk Lab ed è utilizzabile liberamente a condizione di citarne la fonte.