OpenCV — это популярная библиотека функций машинного зрения, которые позволяют роботам распознавать объекты окружающего мира. OpenCV применяют для навигации, обнаружения препятствий, распознавания лиц и жестов.
В этой статье будет предложена пошаговая инструкция по установке OpenCV на одноплатный компьютер Raspberry Pi 3. Также эта статья предваряет серию уроков, направленных на освоение базовых функций OpenCV.
Шаг 1. Свободное место
OpenCV и различные вспомогательные пакеты в сумме занимают достаточно много места. Настоятельно рекомендуется использовать SD-карту размером не менее 16 Гб.
Первое, что необходимо сделать перед установкой OpenCV — расширить файловую систему на весь объём SD-карты. Делается это с помощью меню настройки Raspbian. Заходим в терминал и вводим команду:
$ sudo raspi-config
Откроется меню, в котором нужно выбрать самый верхний пункт:
Жмем Enter, а затем кнопку <Finish>. После этого перезапускаем систему командой:
$ sudo reboot
Если у вас SD-карта размером всего 8 Гб, можно удалить что-нибудь лишнее, например пакет wolfram-engine.
$ sudo apt-get purge wolfram-engine
Эта операция освободит дополнительные 700 Мб места.
Шаг 2. Установка зависимостей
Для полноценной работы с OpenCV нам потребуется обновить существующие пакеты и установить ряд новых. Начнем с обновления.
$ sudo apt-get update $ sudo apt-get upgrade
В зависимости от скорости интернета, данные операции займут около 5-10 минут. Далее устанавливаем в систему cmake и еще несколько полезных штук:
$ sudo apt-get install build-essential cmake pkg-config
Следом пакеты для работы с известными форматами изображений:
$ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
Пакеты для работы с видео:
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev $ sudo apt-get install libxvidcore-dev libx264-dev
Пакеты для создания простых экранных форм. Это все тоже потом понадобится.
$ sudo apt-get install libgtk2.0-dev
Специальные ускоренные операции над матрицами.
$ sudo apt-get install libatlas-base-dev gfortran
Заголовочные файлы языка python версий 2.7 и 3
$ sudo apt-get install python2.7-dev python3-dev
Шаг 3. Загрузка OpenCV из репозитория
Сначала скачаем архив с самим OpenCV. Для этого перейдем в папку /home/pi/Downloads:
$ cd ~/Downloads
Загрузим архив с помощью wget и распакуем unzip-ом:
$ wget -O opencv.zip https://github.com/opencv/opencv/archive/master.zip $ unzip opencv.zip
Следом скачаем пакет с дополнительной всячиной — opencv_contrib.
$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/master.zip $ unzip opencv_contrib.zip
Шаг 4. Виртуальное окружение
Перед дальнейшей установкой OpenCV, мы немного наведем порядок. Создадим виртуальное окружение, которое оградит наши дальнейшие эксперименты от основной части операционной системы. Это полезно, на случай если потребуется удалить текущую версию opencv и установить новую.
Начнем с установки менеджера пакетов pip:
$ wget https://bootstrap.pypa.io/get-pip.py $ sudo python get-pip.py
Затем установим менеджер виртуального окружения:
$ sudo pip install virtualenv virtualenvwrapper $ sudo rm -rf ~/.cache/pip
Добавим пару строчек в профиль пользователя, который хранится в файле ~/.profile:
$ echo -e "\n# virtualenv and virtualenvwrapper" >> ~/.profile $ echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.profile $ echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.profile
Теперь нужно сделать следующие три шага:
- закрыть все окна терминалов
- разлогиниться
- снова залогиниться
- открыть терминал и ввести команду:
$ source ~/.profile
Примечание. Вообще, эту команду теперь рекомендуется вводить при каждом входе в систему.
Далее создаем виртуальное окружение с именем «cv»:
$ mkvirtualenv cv -p python3
Чтобы проверить правильность установки виртуального окружения, перезагрузим Raspberry Pi:
$ sudo reboot
Откроем терминал и зайдем в окружение:
$ source ~/.profile $ workon cv
Индикатором того, что мы находимся в виртуальном окружении будет префикс (cv) в начале командной строки.
Последнее, что осталось сделать перед сборкой OpenCV — установка математического пакета NumPy:
$ pip install numpy
Шаг 5. Компиляция и установка OpenCV
Находясь в ранее созданном виртуальном окружении, зайдем в папку с исходными кодами OpenCV и выполним команды:
$ cd ~/Downloads/opencv-master $ mkdir build $ cd build $ cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/Downloads/opencv_contrib-master/modules -D BUILD_EXAMPLES=ON ..
В конце процедуры появится список компонентов OpenCV, готовых к установке.
Красным выделена секция, посвященная python.
Ну а теперь само интересное — сборка бинарников. Не выходя из текущей папки, запускаем команду make:
$ make -j4
j4 означает, что мы будем собирать пакет используя все 4 ядра Raspberry Pi. Это сильно ускорит процедуру, но даже при таких условиях сборка займет около полутора часов.
Сборка должна завершиться примерно таким вот отчетом:
Примечание. Лично у меня, во время сборки система пару раз зависала наглухо. То есть даже мышь не шевелилась. Помогло выключение/включение питания и повторный запуск сборки с ключом -j2.
Последнее, что нужно сделать — установить собранный бинарник в папку с python:
$ sudo make install $ sudo ldconfig
Шаг 6. Завершение установки
После установки, в рабочей папке python появится файл cv2.cpython-34m.so, который нужно переименовать во что-то более благозвучное:
$ cd /usr/local/lib/python3.4/site-packages/ $ sudo mv cv2.cpython-34m.so cv2.so
Чтобы мы могли пользоваться OpenCV, находясь в виртуальном окружении, сделаем там ссылку на получившийся cv2.so:
$ cd ~/.virtualenvs/cv/lib/python3.4/site-packages/ $ ln -s /usr/local/lib/python3.4/site-packages/cv2.so cv2.so
Шаг 7. Проверка
Чтобы проверить правильность установки, зайдем в виртуальное окружение, запустим интерпретатор языка python и попробуем импортировать модуль cv2:
$ source ~/.profile $ workon cv $ python >>> import cv2 >>> cv2.__version__ '3.1.0' >>>
Вот и всё — OpenCV установлен успешно! В следующих уроках мы будем разбираться с обработкой изображения с видеокамеры, применительно к робототехнике.
Здравствуйте. после команды:
> -D OPENCV_EXTRA_MODULES_PATH=~/Downloads/opencv_contrib-master/modules
Происходит ошибка
CMake Error: The source directory «/home/pi/Downloads/opencv-master/build/OPENCV_EXTRA_MODULES_PATH=/home/pi/Downloads/opencv_contrib-master/modules» does not exist.
и Каталога opencv_contrib-master не существует
*каталог существует.
Поставь \
-D OPENCV_EXTRA_MODULES_PATH=~/Downloads/opencv_contrib-master/modules \
Вообщем, не ставить “\”, а спокойно с пробелом и одной строкой запуститься 🙂
Ребята, Help!!! Застрял на создании виртуального окружения, ввёл команду $ sudo rm -rf ~/.cache/pip и ничего не произошло, потом добавил пару строчек в профиль пользователя, который хранится в файле ~/.profile, как в инструкции, разлогинился, залогинился, ввёл команду $ source ~/.profile и он мне написал bash: sourse: команда не найдена. В чём причина ?
Разобрался. Но теперь сборка бинарника зависает на 79%. Использование 4х или 2х ядер при сборке ничего не меняет.
Help !!! сборка бинарника зависает на 79%. Использование 4х или 2х ядер при сборке ничего не меняет. После чего пишет: virtual memory exhausted: Невозможно выделить память.
Расширь swap пространство на Raspberry
Автор,
добавьте в статью что для компиляции может не хватить свапа.
чтобы это исправить, нужно:
1. в файле /etc/dphys-swapfile, поменять CONF_SWAPSIZE=100 на CONF_SWAPSIZE=1024 или больше.
2. рестартовать сервис service dphys-swapfile stop service dphys-swapfile start
после компиляции и проверки — вернуть обратно.
также на компиляцию влияет наличие доп. плат и/или корпуса.
у меня, при установленном экране RPI 3.5 Display, зависало наглухо
Увеличь максимальный файл подкачки
файл /etc/dphys-swapfile
находишь строчку CONF_SWAPSIZE=100, меняешь это значение например на 1000
это увеличит размер файла подкачки.
Здравствуйте,
Зависает make на 87% : переустанавливал систему, пробовал все варианты -j1-j2-j3-j4,
CONF_SWAPSIZE=1024 и CONF_SWAPSIZE=2048 пробовал, размер выделяемой памяти на GPU и CPU изменял, sd памяти тоже хватает.
Если есть идеи по решению проблемы, буду очень благодарен!)
Аналогично на 85 — 87 % зависало. make clean сделал, в итоге плюнул и оставил на ночь make -j2. Утром сессии ssh оборваны оказались, на raspberry pi 3 b+ была не зависшая, проверил через ps -aux среди запущенных приложений «cc1…» не было (мониторил через top что происходит во время компиляции — следующая картина поначалу почти по 47 % процессорного времени отжирается каждым из процессов «cc1…» а памяти жрётся относительно немного, по достижении 85 % (сборка модулей для Python2 и Python3) процессорное время под процессы «cc1…» отдаётся от 4 до 11 % зато постоянно увеличивается выделяемая память в swap, итого было занято 99 % оперативы (1 ГБ) и 800 МБ swap — по 49 % памяти для каждого из процессов «cc1…»).
В общем я посчитал что сборка завершилась успешно и запустил sudo make install, sudo ldconfig. Команды завершились без ошибок, но!!! каталога «/usr/local/lib/python3.5/site-packages/» у меня не оказалось. В каталоге «/usr/local/lib/python2.7/site-packages/» пусто. В общем получается что ничего не получилось.
Команда «apt-cache search opencv» показала кучу пакетов, может есть способ попроще установить opencv?
Все делал по инструкции, долго ждал сборки. А в итоге модуль св2 не видит. Разница от гайда была только в том, что не в той папке лежал файл cv2.cpython-34m.so. И назывался cv2.cpython-35m-arm-linux.so
Разобрался. Но только сейчас получилось, что opencv установлен только для python2. хотя все папки находятся в каталоге третьего питона.
Застрял на 2х ошибках, подскажите что делать?
collect2: error: ld returned 1 exit status
make[2]: *** [apps/version/CMakeFiles/opencv_version.dir/build.make:85: bin/opencv_version] Error 1
make[1]: *** [CMakeFiles/Makefile2:26052: apps/version/CMakeFiles/opencv_version.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs….
[ 34%] Building CXX object modules/surface_matching/CMakeFiles/opencv_surface_matching.dir/src/pose_3d.cpp.o
[ 34%] Building CXX object modules/surface_matching/CMakeFiles/opencv_surface_matching.dir/src/ppf_helpers.cpp.o
[ 34%] Building CXX object modules/surface_matching/CMakeFiles/opencv_surface_matching.dir/src/ppf_match_3d.cpp.o
[ 34%] Building CXX object modules/surface_matching/CMakeFiles/opencv_surface_matching.dir/src/t_hash_int.cpp.o
[ 34%] Linking CXX shared library ../../lib/libopencv_surface_matching.so
[ 34%] Built target opencv_surface_matching
make: *** [Makefile:163: all] Error 2
Тоже 2 ошибки вылезают:
[ 32%] Building CXX object modules/surface_matching/CMakeFiles/opencv_surface_matching.dir/src/ppf_helpers.cpp.o
/usr/bin/ld: ../../lib/libopencv_core.so.4.1.1: undefined reference to `__atomic_compare_exchange_8′
/usr/bin/ld: ../../lib/libopencv_core.so.4.1.1: undefined reference to `__atomic_fetch_sub_8′
/usr/bin/ld: ../../lib/libopencv_core.so.4.1.1: undefined reference to `__atomic_load_8′
/usr/bin/ld: ../../lib/libopencv_core.so.4.1.1: undefined reference to `__atomic_store_8′
/usr/bin/ld: ../../lib/libopencv_core.so.4.1.1: undefined reference to `__atomic_fetch_add_8′
collect2: error: ld returned 1 exit status
make[2]: *** [apps/version/CMakeFiles/opencv_version.dir/build.make:85: bin/opencv_version] Error 1
make[1]: *** [CMakeFiles/Makefile2:25950: apps/version/CMakeFiles/opencv_version.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs….
[ 32%] Building CXX object modules/surface_matching/CMakeFiles/opencv_surface_matching.dir/src/ppf_match_3d.cpp.o
[ 32%] Building CXX object modules/surface_matching/CMakeFiles/opencv_surface_matching.dir/src/t_hash_int.cpp.o
[ 32%] Linking CXX shared library ../../lib/libopencv_surface_matching.so
[ 32%] Built target opencv_surface_matching
make: *** [Makefile:163: all] Error 2
(cv) pi@raspberrypi:~/Downloads/opencv-master/build $
У меня после команды mkvirtualenv cv -p python3 говорит -bash: mkvirtualenv: command not found. Как исправить?
После ввода команды:
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/Downloads/opencv_contrib-master/modules \
-D BUILD_EXAMPLES=ON ..
установка останавливается и курсор на месте не мигает. Raspberry не весит, все остальные функции работают