Телефонуйте » (+38) 096 227 41 41

Розглянемо, як встановити OpenCV 4 на Raspberry Pi 4 з ОС Raspbian Buster за допомогою компіляції з першоджерела. Встановимо та протестуємо OpenCV 4 на Raspbian Buster за п'ять простих кроків.

Якщо збирати OpenCV з нуля, то процес особливо трудомісткий і навіть інколи засмучує, якщо пропустити ключовий крок або невірно зрозуміти команди.
Встановити OpenCV через pip набагато простіше – це можна зробити швидше, ніж за 10 хвилин.

Хоча використання pip для встановлення OpenCV чудове, але для деяких проектів, можливо, ми захочемо встановлення повного OpenCV (якого встановленням через pip не отримати).

Нижче навчимося використовувати CMake та Make для компіляції OpenCV 4 на BusterOS з нуля.

Перш ніж почати: візьмемо наш Raspberry Pi 4 (RPi) і запишемо BusterOS на карту microSD.

Розглянемо вимоги до апаратного забезпечення:

• Raspberry Pi: ми передбачаємо, що використовується апаратне забезпечення RPi 4B 1ГБ, 2ГБ або 4ГБ.
• Операційна система: наведені інструкції стосуються лише Raspbian Buster.
• 32 ГБ мікроSD: рекомендується клас 10.
• Адаптер карти мікроSD: USB-адаптер карти мікроSD потрібний, щоб ми могли скористатися ноутбуком для запису карти пам'яті.

Після того, як обладнання буде готове, нам треба перенести свіжу копію операційної системи Raspbian Buster на карту мікроSD.

1. Перейдемо на офіційну сторінку завантаження BusterOS (рис. 1) і почнемо завантаження. Рекомендується "Raspbian Buster з робочим столом та рекомендованим програмним забезпеченням".
2. Завантажимо Balena Etcher - програмне забезпечення для запису образів карт пам'яті. Програма працює на всіх основних ОС.
3. Використаємо Etcher для перенесення BusterOS на карту пам'яті (рис. 2).

Завантаження Raspbian Buster для Raspberry Pi і OpenCV 4
Рис. 1. Завантаження Raspbian Buster для Raspberry Pi і OpenCV 4.

Завантаживши файл .img образу Raspbian Buster, можемо записати його на мікроSD-карту за допомогою Etcher:

Запис Raspbian Buster
Рис. 2. Запис Raspbian Buster, яку будемо використовувати для установки OpenCV 4, за допомогою Etcher

Через кілька хвилин процес запису буде завершений - вставляємо мікроSD-карту у RPi 4, а потім вмикаємо його.
Тепер можемо перейти до решти етапів установки OpenCV.

Крок 1: Розгортаємо файлову систему, щоб зробити доступним весь обсяг пам’яті

Зробимо такі припущення:

1. Ми працюємо з абсолютно новою, свіжою програмою Raspbian Buster.
2. Нам комфортно з командним рядком та середовищем Unix.
3. Ми маємо встановлене SSH або VNC-з'єднання з RPi. Крім того, можемо скористатися безпосереднім підключенням клавіатури + миші + екрана.

Вставимо мікроSD у RPi та завантажимо його в режим робочого столу.

Після завантаження налаштуємо параметри WiFi/Ethernet для підключення до Інтернету, бо для завантаження та встановлення необхідних пакетів для OpenCV знадобиться підключення до Інтернету.
Можемо використати VNC, або відкрити термінал.

Першим кроком є запуск raspi-config та розширення нашої файлової системи за допомогою команди:

sudo raspi-config

Далі вибираємо пункт меню “7 Advanced Options”:

Екран конфігурації raspi-config для Raspbian Buster
Рис. 3. Екран конфігурації raspi-config для Raspbian Buster, щоб розширити файлову систему

Далі вибираємо “A1 Expand filesystem”:

Пункт меню розширення файлової системи
Рис. 4. Пункт меню розширення файлової системи на картці мікроSD

Після запрошення слід вибрати перший варіант, "A1 Expand File System", натиснути клавішу Enter на клавіатурі, прокрутити стрілку вниз до кнопки "<Finish>", а потім перезавантажити RPi, якщо це не буде запропоновано:

sudo reboot

Після перезавантаження файлова система буде розширена, щоб включала весь наявний простір на нашій картці мікроSD. Можемо переконатися, що диск був розширений, виконавши команду df -h та переглянувши результат виконання:

df –h

Filesystem      Size  Used Avail Use% Mounted on
/dev/root        29G  5.3G   23G  20% /
devtmpfs        1.8G     0  1.8G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G  8.6M  1.9G   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mmcblk0p1  253M   40M  213M  16% /boot
tmpfs           386M     0  386M   0% /run/user/1000

Як бачите, файлову систему Raspbian було розширено, щоб вона включала всі 32 ГБ картки мікро-SD.

Примітка: Нова ОС при першому запуску автоматично розширює файлову систему на весь обсяг картки, тому варто лише перевірити, чи це зроблено, за допомогою команди df -h

Однак, навіть коли файлова система розширена, вже використано 15% від 32 ГБ карти.
Хоча це не потрібно, але рекомендуємо видалити і Wolfram Engine і LibreOffice, щоб додати близько 1 ГБ місця на RPi:

sudo apt-get purge wolfram-engine
sudo apt-get purge libreoffice*
sudo apt-get clean
sudo apt-get autoremove

Крок 2: Встановлюємо залежності

Наступні команди оновлять всі існуючі пакети з подальшим встановленням залежностей, бібліотеки вводу-виводу та пакети оптимізації для OpenCV:

Першим кроком є оновлення всіх встановлених пакетів:

sudo apt-get update && sudo apt-get upgrade

Тепер нам треба встановити деякі інструменти для розробників, зокрема CMake, який допомагає нам налаштувати процес компіляції OpenCV:

sudo apt-get install build-essential cmake pkg-config

Далі треба встановити декілька пакетів вводу-виводу зображень, які дозволяють завантажувати різні формати файлів зображень з диска. Приклади таких форматів файлів включають JPEG, PNG, TIFF тощо:

sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng-dev

Так само, як пакети вводу-виводу зображень, нам також потрібні пакети вводу-виводу відео. Ці бібліотеки дозволяють нам зчитувати різні формати відеофайлів з диска, а також працювати безпосередньо з відеопотоками:

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev

Бібліотека OpenCV поставляється з підмодулем highgui, який використовується для відображення зображень на нашому екрані та побудови основних графічних інтерфейсів. Для компіляції модуля highgui нам треба встановити бібліотеку розробок GTK та передумови:

sudo apt-get install libfontconfig1-dev libcairo2-dev
sudo apt-get install libgdk-pixbuf2.0-dev libpango1.0-dev
sudo apt-get install libgtk2.0-dev libgtk-3-dev

Багато операцій всередині OpenCV (а саме матричні операції) можна додатково оптимізувати, встановивши кілька залежностей:

sudo apt-get install libatlas-base-dev gfortran

Ці бібліотеки оптимізації особливо важливі для пристроїв з обмеженими ресурсами, таких як RPi. Наступні передумови призначені для наборів даних HDF5 та інтерфейсів інтерфейсу Qt:

sudo apt-get install libhdf5-dev libhdf5-serial-dev libhdf5-103
sudo apt-get install libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5

Нарешті, давайте встановимо файли Python 3, щоб ми могли компілювати OpenCV із прив’язками Python:

sudo apt-get install python3-dev

Якщо в нас свіжа установка ОС, можливо, ці версії Python вже є найновішою версією (про це побачимо повідомлення в терміналі).

Крок 3: Створимо віртуальне середовище Python та встановимо NumPy

Будемо використовувати віртуальне середовище Python, як найкращу практику при роботі з Python.

Віртуальне середовище Python - це ізольоване середовище розробки/тестування/виробництва у нашій системі - воно повністю захищене від інших середовищ. Найкраще, що ми можемо керувати пакетами Python у своєму віртуальному середовищі всередині за допомогою pip (менеджер пакунків Python).

Звичайно, існують альтернативи для управління віртуальними середовищами та пакетами (а саме Anaconda/conda). Ми вже використовували Anaconda раніше, а тепер спробуємо pip, virtualenv та virtualenvwrapper, які вважаються одними з найкращих інструментів.

Можемо встановити pip, використовуючи наступні команди:

wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py
sudo python3 get-pip.py
sudo rm -rf ~/.cache/pip

Давайте зараз встановимо virtualenv та virtualenvwrapper:

sudo pip install virtualenv virtualenvwrapper

Після встановлення і virtualenv, і virtualenvwrapper відкриємо файл ~/.bashrc:

sudo nano ~/.bashrc

… І додамо наступні рядки до нижньої частини файлу:

# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh

Використання редактора nano для оновлення
Рис. 5. Використання редактора nano для оновлення ~/.bashrc з налаштуваннями virtualenvwrapper

Зберігаємо та виходимо за допомогою ctrl + x, y, enter.

Тепер перезавантажимо файл ~/.bashrc, щоб застосувати зміни до нашого поточного сеансу bash:

source ~/.bashrc

Далі створимо наше віртуальне середовище Python 3:

mkvirtualenv cv -p python3

Ми створюємо віртуальне середовище Python з назвою cv за допомогою Python 3. Рекомендується Python 3 при використанні з OpenCV 4+.
Можемо назвати віртуальне середовище як завгодно, але використаємо cv як стандартну конвенцію про іменування на сайті PyImageSearch.
Якщо на RPi приєднаний модуль камери, то нам варто встановити зараз API PiCamera:

pip install "picamera[array]"

Крок 4. Компілюємо OpenCV 4 з джерела

Як вже згадувалось, є два варіанти.

1. Якщо встановлювати файл OpenCV через pip, то це буде зроблено за лічені секунди. Маємо, безумовно, найшвидший і найпростіший метод встановлення OpenCV. Це метод, який рекомендується 90% людей - особливо початківцям.
2. Якщо ж ми вирішили компілювати OpenCV 4 з джерела, то отримаємо повну установку OpenCV 4. Це займе 2-4 години, залежно від процесора RPi. Дана опція виконує повну установку OpenCV, включаючи запатентовані ("невільні") алгоритми.

Обираємо другий варіант і завантажимо вихідний код OpenCV для сховищ opencv та для opencv_contrib, після чого розархівуємо їх:

cd ~
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.1.2.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.1.2.zip
unzip opencv.zip
unzip opencv_contrib.zip
mv opencv-4.1.2 opencv
mv opencv_contrib-4.1.2 opencv_contrib

Будемо використовувати OpenCV 4.1.2; однак, якщо будуть випущені новіші версії OpenCV, мо можемо оновити відповідні номери версій.

Збільшення простору SWAP

Перед початком компіляції необхідно збільшити обсяг SWAP. Збільшення SWAP дозволить нам компілювати OpenCV з використанням усіх чотирьох ядер RPi (і без зависання компіляції через виснаження пам'яті).

Далі відкрийте файл /etc/dphys-swapfile:

sudo nano /etc/dphys-swapfile

… Та відредагуємо змінну CONF_SWAPSIZE:

# set size to absolute value, leaving empty (default) then uses computed value
#  you most likely don't want this, unless you have an special disk situation
# CONF_SWAPSIZE=100
CONF_SWAPSIZE=2048

Зауважимо, що тут збільшується файл підкачки з 100 МБ до 2048 МБ. Це дуже важливо для компіляції OpenCV з декількома ядрами на Raspbian Buster.
Тестування автора PyImageSearch показало, що значення 2048 МБ є найбільш ефективним для запобігання блокувань під час компіляції OpenCV.

Зберігаємо та виходимо за допомогою ctrl+x, y, enter.

Якщо не збільшувати SWAP, то є велика ймовірність, що RPi зависне під час компіляції.
Тепер перезапустимо службу файла підкачки:

sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start

Примітка: Збільшення розміру файла підкачки - це прекрасний спосіб спалити картку мікроSD Raspberry Pi. На флеш-пам’яті обмежена кількість записів, які можна виконувати, поки карта фактично не зможе більше утримувати 1 і 0. Ми дозволятимемо робити великий файл підкачки лише на короткий проміжок часу, тож нічого страшного. Незалежно від цього, не забудьте створити резервну копію файлу .img після встановлення OpenCV + Python на випадок, якщо карта несподівано рано перестане працювати. На цій сторінці можемо прочитати більше про великі розміри файлу підкачки, які пошкоджують карти пам'яті.

Компілюємо та встановлюємо OpenCV 4 на Raspbian Buster

Зараз ми готові компілювати та встановити повну, оптимізовану бібліотеку OpenCV на Raspberry Pi 4.

Переконаймося, що знаходимося у віртуальному середовищі cv за допомогою команди workon:

workon cv

Встановимо NumPy (залежність OpenCV) у віртуальне середовище Python:

pip install numpy

І, нарешті, налаштуємо свою збірку:

1 cd ~/opencv
2 mkdir build
3 cd build
4 cmake -D CMAKE_BUILD_TYPE=RELEASE \
5     -D CMAKE_INSTALL_PREFIX=/usr/local \
6     -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
7     -D ENABLE_NEON=ON \
8     -D ENABLE_VFPV3=ON \
9     -D BUILD_TESTS=OFF \
10    -D INSTALL_PYTHON_EXAMPLES=OFF \
11    -D OPENCV_ENABLE_NONFREE=ON \
12    -D CMAKE_SHARED_LINKER_FLAGS=-latomic \
13    -D BUILD_EXAMPLES=OFF ..

Є чотири прапори CMake, на які треба звернути увагу:

• (1) Увімкнено прапори оптимізації NEON та (2) VFPv3. Ці рядки гарантують, що ми збираємо найшвидший і оптимізований OpenCV для процесора ARM на RPi (рядки 7 і 8).
Примітка: Устаткування Raspberry Pi Zero W не сумісне з NEON або VFPv3, тому треба видалити рядки 7 та 8, якщо компілюємо для Raspberry Pi Zero W.
• (3) Запатентовані алгоритми “NonFree” дають нам повне встановлення OpenCV (рядок 11).
• І, вивчивши джерело OpenCV, було встановлено, що нам треба прапор (4) -латомічного спільного лінкера (рядок 12).

Є загальна проблема для початківців:

• У термінальному блоці вище ми змінюємо каталоги на ~/opencv/.
• Потім створюємо в ньому каталог build і переходимо в цей каталог.
• Якщо спробувати виконати CMake, не перебуваючи в каталозі ~/opencv/build, CMake вийде з ладу. Спробуйте запустити pwd, щоб побачити, в якому робочому каталозі перебуваєте, перш ніж запустити cmake.

Команда CMake запуститься через близько 3-5 хвилин, коли вона готується та налаштовує OpenCV для компіляції.
Коли CMake закінчиться, не забудьте перевірити вихід CMake в розділі Python 3:

CMake налаштовує компіляцію OpenCV 4
Рис. 6. CMake налаштовує компіляцію OpenCV 4 з джерела на запущеному Buster RPi 4

Зверніть увагу, чи правильно встановлені в оточенні шляхи змінних Interpreter, Libraries, numpy та пакетів. Кожен із них посилається на наше віртуальне середовище cv.

Тепер рухаємося вперед і прокручуємо вгору, щоб переконатися, що встановлені " Non-Free algorithms":

Встановлення OpenCV 4
Рис. 7. Встановлення OpenCV 4 за допомогою "Non-Free algorithms" на Raspbian Buster

Як бачимо, "Non-Free algorithms" для OpenCV 4 будуть компільовані і встановлені.

Тепер, коли ми підготувалися до нашої компіляції OpenCV 4, саме час запустити процес компіляції, використовуючи всі чотири ядра:

sudo make -j4

Використання Make для компіляції OpenCV 4
Рис. 8. Використання Make для компіляції OpenCV 4 на RPi 4, що працює з Raspbian Buster

Запуск make може тривати від 1 до 4 годин, залежно від обладнання RPi. RPi 4 - найшвидший на момент написання цього тексту.
Якщо припустити, що OpenCV компільовано без помилок (як на знімку вище), то можемо встановити оптимізовану версію OpenCV на свій RPi:

sudo make install
sudo ldconfig

Скидаємо SWAP

Не забудьте повернутися до файлу /etc/dphys-swapfile та:

1. Скиньте CONF_SWAPSIZE до 100 МБ.
2. Перезапустіть службу файла підкачки.

Sym-link OpenCV 4 на Raspberry Pi

Символічні посилання - це спосіб вказати з одного каталогу на файл або папку в іншому місці нашої системи. Для цього підкроку позначимо прив’язку cv2.so до нашого віртуального середовища cv.

Давайте перейдемо до створення нашого сим-зв’язку. Не забудьмо використовувати "заповнення вкладки" для всіх шляхів нижче (а не копіювати ці команди наосліп):

cd /usr/local/lib/python3.7/site-packages/cv2/python-3.7
sudo mv cv2.cpython-37m-arm-linux-gnueabihf.so cv2.so
cd ~/.virtualenvs/cv/lib/python3.7/site-packages/
ln -s /usr/local/lib/python3.7/site-packages/cv2/python-3.7/cv2.so cv2.so

Маємо на увазі, що точні шляхи можуть змінюватися, і нам слід скористатися "заповненням вкладки".

Крок 5: Тестування встановлення OpenCV 4 на Raspberry Pi з BusterOS

Для швидкої перевірки доступу, відкриваємо віртуальне середовище cv, запускаємо оболонку Python та спробуємо імпортувати бібліотеку OpenCV:

cd ~
workon cv
python
>>> import cv2
>>> cv2.__version__

'4.1.2'
>>>

Вітаємо! Ми тільки що встановили OpenCV 4 на свій Raspberry Pi.

Література
1. https://www.pyimagesearch.com/2019/09/16/install-opencv-4-on-raspberry-pi-4-and-raspbian-buster/

 

Попереднє заняття - Наступне заняття

Новини

  • SDR в IoT

    iotSDR пропонує платформу розробок для IoT-радіо та мережевих доменів. На платі два передавачі Microchip AT86RF215, для вводу-виводу модему на Xilinx ZYNQ SoC, приймач GNSS MAX2769 для GPS, Galileo, BieDou та Glonass. Плата сумісна з ПЗ GNURadio SDR. Дозволяє розробити протоколи фізичного рівня LoRa, SigFox, WightLess, Bluetooth, BLE, 802.15.4, ZigBee тощо для IoT, або шлюз IoT через TheThingsNetwork, LPWAN або Google Thread. Пам'ять EEPROM: 1x AT24MAC602 , flash-пам'ять: 1x QSPI 128 Мб, RAM: 256 MБ DDR3,слот для Micro SD карти, входи/виходи: 2x 8-бітних інтерфейси PL, інтерфейс 8-бітного PS, Gigabit Ethernet, USB 2.0 (USB3310), USB 2.0 (CP2104), 2x SMA RF-роз'єми для приймача діапазонів IoT, 2x SMA RF-роз'єми для приймача 2,4 ГГц , RF-роз'єм приймач GNSS, FPGA-роз'єм JTAG для програмування. Розміри плати: 76,2 мм x 101,6 мм.

     

    in Новини

Записатися на курс