MKNM "Synergia"

Kompilacja OpenCV i modułów opencv_contrib, ustawienia Visual Studio

Kompilacja OpenCV i modułów opencv_contrib, ustawienia Visual Studio

OpenCV to biblioteka oparta na otwartym kodzie, wykorzystywana podczas obróbki i analizy obrazu. Choć sama w sobie zawiera mnóstwo pożytecznych funkcji to istnieją również dodatki, znacznie rozszerzające jej funkcjonalność. Znaleźć je można w oddzielnym repozytorium, pod nazwą opencv_contrib. Moduły te nie są jeszcze w pełni przetestowane i całkowicie stabilne, dlatego zamieszczane są oddzielnie.

Idea szczytna, jednak wielu początkujących użytkowników ma problem z uruchomieniem całości. W niniejszym artykule postaram się pokazać jak od początku do końca przejść przez ten proces. Jest to zbiór informacji z artykułów i tutoriali zamieszczonych w źródłach na końcu artykułu, zaktualizowany i poprawiony o kilka detali.

W chwili powstawania artykułu najnowsza wersja OpenCV to 3.20, i tę właśnie wersję skompiluje i uruchomię. Korzystam z Visual Studio 2013, system Win10 x64.

 

Zaczynajmy więc!

Krok 0:

Aby skompilować biblioteki potrzebujemy GITa oraz CMake, pobrać je można stąd:

Krok 1:

Na dysku C (lub w dowolnym innym miejscu) tworzymy katalog, na przykład zgodnie z sugestią dokumentacji, opencv_root:

 

Krok 2:

Uruchamiamy GITa, przechodzimy do utworzonego wcześniej katalogu i wydajemy następujące polecenia:

$ git clone https://github.com/opencv/opencv
$ git clone https://github.com/opencv/opencv_contrib

Pobiorą one kody źródłowe najnowszych wersji opencv oraz opencv_contrib

Podczas nawigacji w terminalu użyteczne będą komendy:
ls   –   wyświetl zawartość folderu, w którym aktualnie się znajdujesz
cd <nazwa>  –   przejdź do katalogu <nazwa>
cd ..   –   przejdź o jeden poziom do góry

Krok 3:

GIT spełnił już swoje zadanie, możemy go zamknąć. Teraz kolej na CMake:

W pierwszym polu wybieramy ścieżkę, która prowadzi do pobranego przed chwilą folderu opencv, w drugim zaś wybieramy miejsce do którego mają trafić pliki po zbudowaniu. W moim przypadku jest to build_opencv znajdujący się w tym samym miejscu, co katalogi pobrane w kroku 2. Wybór zatwierdzamy klikając Configure. Jeśli wybraliśmy ścieżkę do nieistniejącego jeszcze katalogu program zapyta, czy powinien go utworzyć

Krok 4:

W tym okienku wybieramy kompilator i wersję systemu. Klikamy Finish

Krok 5:

Czekamy aż pasek postępu załaduje się do końca. Następnie na liście znajdujemy pozycję OPENCV_EXTRA_MODULES_PATH, która jak zdradza nam nazwa, wskazuje ścieżkę do katalogu modules, znajdującego się w opencv_contrib.

Wybór zatwierdzamy klikając Configure

Krok 6:

Moduł dodatkowe umieszczone są na początku listy, ich nazwy zaczynają się od BUILD_opencv… W tym momencie możemy zaznaczyć, które z nich chcemy dołączyć. Domyślnie wybrane są wszystkie.

Ponadto zaznaczamy opcje:
BUILD_opencv_contrib_world
BUILD_opencv_world
dzięki temu otrzymamy jeden plik nazwany opencv_world, zamiast kilkudziesięciu pomniejszych bibliotek

Kolejnym krokiem który musiałem wykonać, była zmiana parametrów  CPU_BASELINE oraz CPU_DISPATCH na SSE2. Bez tego, przy próbie zbudowania bibliotek kompilator zwracał błędy.

Po wykonaniu powyższych czynności zatwierdzamy nasze wybory klikając Configure, a gdy pasek postępu znów się załaduje klikamy Generate. W ten sposób, w katalogu build_opencv wybranym przez nas w kroku 3 powinny pojawić się pliki potrzebne do zbudowania bibliotek

Krok 7:

Gdy pasek postępu dojdzie do końca, możemy zamknąć CMake i otworzyć katalog build_opencv. Tam odnajdujemy OpenCV.sln, które uruchamiamy. Gdy pasek postępu dojdzie do końca, powinniśmy zobaczyć takie okno:

 

Teraz:
a) Upewniamy się, że wybrana jest opcja Debug, zaś obok wersja naszego systemu
b) Klikamy prawym na ALL_BUILD, wybieramy pierwszą opcję z menu czyli build
c) Czekamy kilka minut, jeśli kompilacja zakończy się bez błędów klikamy na INSTALL, gdzie również wybieramy build

Następnie zmieniamy z menu a) wybieramy opcję Release, i powtarzamy punkty b) i c)

Krok 8:

Właśnie zbudowaliśmy biblioteki. Teraz musimy je zainstalować i wskazać ich lokalizacje kompilatorowi. Istnieją różne metody, my skorzystam ze zmiennych środowiskowych. Opisany niżej proces przedstawia film użytkownika OpenCV Moments umieszczony jako Źródło [2] na końcu artykułu.

Przez panel sterowania dostajemy się do Systemu, tam wybieramy zakładkę
a) Zaawansowane ustawienia systemu, następnie
b) Zmienne środowiskowe po czym tworzymy nową, o nazwie OPENCV_DIR, która wskazuje na wybraną przez nas wersją Visuala (w moim przypadku jest to vc12) w katalogu install.

Następnie edytujemy zmienną systemową path, dopisując na końcu %OPENCV_DIR%\bin

Krok 9:

Zbliżamy się do końca. Teraz należy stworzyć nowy projekt w visualu i wskazać linkerowi gdzie znajdują się biblioteki. W procesie tym, który użytkownik OpenCV Moments przedstawia w filmie umieszczonym jako Źródło [3] na końcu artykułu dokonujemy drobnej korekty.

Zaznaczamy
a) Nazwę naszego projektu, z menu zaś wybieramy
b) Propertis
Upewniamy się że zaznaczona jest opcja c) Release

Kolejno, w:
d) C/C++ General jako e) Additional Include Directory podajemy ścieżkę prowadzącą do bibliotek, czyli $(OPENCV_DIR)\..\..\include,

W f) Linker General, w linijce g) Additional Library Directories wpisujemy $(OPENCV_DIR)\lib,


zaś w h) Linker Input, w linijce i) Additional Dependencies podajemy nazwę wygenerowanej biblioteki, (czyli w przypadku biblioteki w wersji 3.2.0) opencv_320.lib

Teraz zmieniamy opcję k) Release na Debug  i powtarzamy czynności od d) do i) z tą różnicą, że na samym końcu zamiast opencv_320.lib wpisujemy opencv_320d.lib

Krok 10:

W tym momencie wykonaliśmy ostatnią czynność, biblioteki są zalikowane do tego projektu. Aby przekonać się że działają, możemy uruchomić taki oto kod:

#include <opencv2\opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main()
{
    cout << "Wersja: " << CV_VERSION << endl;
    return 0;
}

Co powinno dać następujący wynik:

 

 

Źródła:
[1]   https://www.youtube.com/watch?v=tHX3MLzwF6Q
[2]   https://www.youtube.com/watch?v=EcFtefHEEII
[3]   http://docs.opencv.org/3.2.0/de/d25/tutorial_dnn_build.html
[4]  http://maxpixel.freegreatpicture.com/Blue-Machine-Look-Mechanical-Eye-Lens-Bionics-1776925 – obrazek