Rozpoznawanie ekranu #4: OpenCV na Raspberry Pi​

Problem z OpenCV na Raspberry Pi? Nie ty pierwszy, nie ostatni. Ten tutorial rozwiąże twoje problemy

Rozpoznawanie ekran

Rozpoznawanie ekranu


Jeżeli próbowaliście zainstalować OpenCV na RPi jak pokazywałem w poprzedniej odsłonie serii Rozpoznawanie ekranu, napotkałeś pewien problem. A dokładniej, pomimo instalacji, OpenCV ciągle nie działa, którą na pewno chcesz rozpoznawać obraz za pomocą RPi – któż by nie chciał. Budowanie ze źródeł może pomóc ci nie tylko z odpaleniem OpenCV, ale i wszystkich innych bibliotek, których źródła są dostępne publicznie.

Wyrzuć co niepotrzebne

Znając życie, to może być kolejny tutorial, którym właśnie próbujesz uruchomić OpenCV na twoim RPi. Polecam wykonać poniższe komendy, aby wyczyścić środowisko przed kolejnymi krokami.

sudo apt purge wolfram-engine
sudo apt clean
sudo apt autoremove

Update systemu

Żeby system korzystał z najnowszych wersji narzędzi, należy wykonać update i upgrade systemu. Ten krok może potrwać od kilku minut do ponad godziny. W zależności, kiedy ostatnim razem była wykonywana ta czynność, a także od szybkości internetu. Instalacja z argumentem -y automatycznie zatwierdza wszelkie zadawane pytania „czy na pewno chcesz […] ?”.

sudo apt update -y && sudo apt upgrade -y

CMake

Do budowania OpenCV użyjemy programu CMake. Jest on jednym z najpopularniejszych programem do budowania projektów.

sudo apt install build-essential cmake unzip pkg-config -y

Instalacja niezbędnych bibliotek

Instalacja niezbędnych bibliotek do działania OpenCV:

sudo apt install libjpeg-dev libpng-dev libtiff-dev -y
sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev -y
sudo apt install libxvidcore-dev libx264-dev -y
sudo apt install libgtk-3-dev -y
sudo apt install libcanberra-gtk* -y
sudo apt install libatlas-base-dev gfortran -y
sudo apt install python3-dev -y

Kolejnym krokiem będzie zainstalowanie biblioteki numpy za pomocą aplikacji pip – jeżeli jako domyślnego Python’a używasz 2.7 to zamiast pip użyj pip3:

pip install numpy

Ściąganie i rozpakowanie OpenCV

Teraz czas przejść do konkretów. A mianowicie ściągnij repozytorium OpenCV za pomocą aplikacji wget:

wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.0.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.0.zip

Rozpakuj ściągnięte pliki aplikacją unzip:

unzip opencv.zip
unzip opencv_contrib.zip

Numer wersji w nazwie folderu jest zbędny – choć to bardziej zabieg estetyczny:

mv opencv-4.5.0 opencv
mv opencv_contrib-4.5.0 opencv_contrib

Utworze wirtualne środowisko Python przed zbudowaniem. Szczegółowo opis jak to robić, znajdziesz w linku poniżej.

virtualenv ./venv_opencv

Budowanie kodu

Gdy już masz wirtualne środowisko, przejdź do folderu opencv i utwórz folder build. Po czym także do niego przejdź:

cd opencv
mkdir build
cd build

Teraz skonfiguruj CMake:

cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
    -D ENABLE_NEON=ON \
    -D ENABLE_VFPV3=ON \
    -D BUILD_TESTS=OFF \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D INSTALL_PYTHON_EXAMPLES=OFF \
    -D BUILD_EXAMPLES=OFF ..

Komendą make skompilujesz projekt (pamiętaj by pozostać w folderze build):

make -j4

Zainstaluj skompilowany kod użyj make install. Za pomocą ldconfig, wcześniej ustalona konfiguracja zostanie wciągnięta do bibliotek:

sudo make install
sudo ldconfig

Teraz jeszcze utwórz dowiązanie symboliczne zbudowanych bibliotek wprost do paczek Python’a w twoim wirtualnym środowisku jako cv2.so

cd ~/.virtualenvs/cv/lib/python3.5/site-packages/
ln -s /usr/local/python/cv2/python-3.5/cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so
cd ~

Szybki test czy biblioteka działa poprawnie. Zaimportuj bibliotekę cv2, a następnie wyświetl jej wersje:

import cv2
print(cv2.__version__)

Wynikiem będzie:

'4.5.0'

Tak w dość rozbudowany sposób można obejść problem z działaniem OpenCV na Raspberry Pi i teraz poprzednią cześć tutorialu możesz przećwiczyć na RPi.

close

Newsletter