Установка Open CV (Linux)

Open Source Computer Vision Library

Это библиотека для языка программирования Python упрощающая работу с машинным зрением (раздел машинного обучения - Machine Learning).
Для понимания предлагаю рассмотреть процесс распознавания лица (классика), если б не существовало OpenCV:
  1. Перво-наперво необходимо иметь огромную коллекцию изображений с лицами людей и без них
  2. Структурировать этот набор - сопоставить каждому изображению пояснение: присутствует ли на нем человеческое лицо.
  3. Равномерно и правильно разделить структурированную коллекцию на обучающую и контрольную выборку.
  4. Далее путем перебора и сочетания разнообразных методов машинного обучения (“дерево”, “случайный лес”, “градиентный спуск”, “ближайшие соседи” и т.д.) составить нейросеть, дающую приемлемый результат распознавания как на обучающей, так и на контрольной выборке. На этот этап могут уйти месяцы(!) (в зависимости от доступных вычислительных ресурсов)
А разработчики OpenCV предоставляют всем бесплатный набор первоклассных алгоритмов машинного зрения для различного применения - бери, да используй!)

ПРЕДУПРЕЖДЕНИЕ:
  • Далее рассматриваются тонкости установки OpenCV на Raspbian, однако, инструкция вполне универсальна для всех дистрибутивов семейства Debian
  • установка OpenCV занимает много времени (2-3 часа), однако не обязательно проходить весь путь за один раз - можно остановиться и продолжить с того же места.
  • Потребуются начальные навыки работы в терминале Линукса.
  • Установку будем производить на Raspberry Pi 3 на чистый, только что проинсталлированный Raspbian Desktop последней версии. см. Установка Raspbian

Подготовка

Потребуется 7 Гб свободного места на флешке.
Чтобы проверить наличие свободного места на флешке откроем терминал (Ctrl + Alt + T) и введем команду
df -h

Если места недостаточно, хотя объем флешки должен позволять, то стоит проверить расширена ли файловая система на весь доступный объем (в новых версиях дистрибутива это теперь делается по умолчанию - от апреля 2018 года).
Если система не очень новая, тогда можно зайти в раздел главных настроек
sudo raspi-config

и выбрать первый пункт “1. Expand File System”, а затем перезагрузить Малину

Установка необходимых пакетов

Если обновления давно не проводились, то желательно произвести их сейчас
sudo apt-get update -y && sudo apt-get upgrade -y

Устанавливаем комплект пакетов для сборки программ из исходников
sudo apt-get install build-essential cmake pkg-config -y

Затем устанавливаем комплект библиотек для работы с графическим контентом разных форматов
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev -y

Далее тоже самое для видео контента
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev -y
sudo apt-get install libxvidcore-dev libx264-dev -y

Ставим пакет компиляции модуля highgui для вывода изображений и интерфейсов на экран
sudo apt-get install libgtk2.0-dev -y

И напоследок библиотека линейной алгебры и компилятор Фортрана:
sudo apt-get install libatlas-base-dev gfortran -y 

Python

Далее устанавливаем Питон (ну или Пайтон). Базовые версии 2,7 и 3 уже вшиты в Raspbian, однако понадобятся дополнительные пакеты:
sudo apt-get install python2.7-dev python3-dev -y 

Далее для Питона (ну или Пайтона) рекомендую установить утилиты virtualenv   и virtualenvwrapper - это аналог Ruby Version Manager’а только для Питона, позволяют работать с Питоном в выбранном “виртуальном окружении” - наборе пакетов определенных версий (аналоги гемсетов Руби) - это удобно при работе над несколькими проектами с различными наборами библиотек (и особенно различными версиями библиотек): чтоб переключиться на, допустим Python 2.7 c OpenCV 3.1 достаточно будет ввести в терминале всего одну команду. Устанавливаем:
sudo pip install virtualenv virtualenvwrapper 
sudo rm -rf ~/.cache/pip 
echo -e "\n# virtualenv and virtualenvwrapper" >> ~/.profile 
echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.profile 
echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.profile 
source ~/.profile 

На этом зависимости установлены.
Создаем виртуальное окружение с помощью virtualenv. И тут же стоит определиться с версией Питона - если цель - это создание проекта с нуля, тогда стоит выбрать python3, а иначе - python2
В процессе исторического развития языка Python во время актуальности версии 2.7 было написано очень много хороших программ. И даже сейчас во времена стабильных 3.5 версий Python 2.7 не забыт до сих пор и активно используется и  поддерживается - произошло ветвление. Так же и с библиотеками Питона - не все будут работать одинаково хорошо как на 2.7 так и на 3.5
mkvirtualenv cv -p python3 

Убеждаемся, что сейчас находимся в созданном виртуальном окружении cv. Это можно узнать по сочетанию “(cv)” в консоли у текущей активной строки: И наконец устанавливаем библиотеку Numpy для удобной работой с массивами и матрицами больших размерностей
pip install numpy 

Скачивание Open CV из репозитория

Создадим папку для библиотеки в домашней директории и перейдем в нее
cd ~ 
mkdir opencv 
cd opencv/ 

Определимся с версией OpenCV.
С момента выхода версии 3.0, старые версии 2.4.х продолжают поддерживаться и выпускаться и между ними имеются серьезные отличия. К примеру пакет дополнительных модулей ‘contrib’ доступен только для новых версий 3+.
Перейдем на домашнюю страницу проекта в раздел “Releases”. Предлагаю далее устанавливать свежую версию (3+ а не 2.4.х.х) и брать не самый крайний релиз: Таким образом выбор пал на версию 3.4.0.
Чтоб получить ссылку для скачивания перейдем в офф. репозиторий Open CV в раздел релизов: https://github.com/opencv/opencv/releases и скопируем ссылку на zip-архив выбранной версии: Возвращаемся к Raspberry.
Находясь в папке /opencv выполним команду для скачивания исходников:
wget -O opencv.zip https://github.com/opencv/opencv/archive/3.4.0.zip 

эта команда скачает архив и переименует его в opencv.zip
Распакуем скачанный архив и после удалим его:
unzip opencv.zip 
rm opencv.zip 

Скачаем и распакуем ту же версию дополнительных модулей contrib (в данном случае - 3.4.0). Страница релизов офф. репозиотрия: https://github.com/opencv/opencv_contrib/releases
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/3.4.0.zip 
unzip opencv_contrib.zip 
rm opencv_contrib.zip 

В итоге должно получиться следующее (команда ls показывает содержимое текущей папки):

Компиляция и установка OpenCV

Еще раз убедимся, что находимся в созданном виртуальном окружении для OpenCV (глава установки Python). Если окружение уже точно было создано, то перейти в него можно командой workon cv
Переходим в папку распакованного архива OpenCV (версия, и соответственно, название папки может отличаться):
cd opencv-3.4.0/ 

Далее выполняем серию команд для запуска процесса сборки инсталлятора.
Это 3 команды - последняя многострочная, в ней ОСОБОЕ внимание обращаем  на путь к папке распакованного архива contrib:
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=~/opencv/opencv_contrib-3.4.0/modules \ 
 -D BUILD_EXAMPLES=ON .. 

В случае успешной сборки увидим следующее. На данный момент мы всего лишь выполнили все условия для компиляции инсталлятора OpenCV, поэтому обратите внимание на секцию Python3 (или Python2) она должна быть как на скриншоте, в ином случае (или в случае фейла) проверьте:
  • возможно во время сборки не было активировано виртуальное окружение (cv) - workon cv
  • Еще возможная причина фейла: неверный абсолютный путь к папке дополнительных модулей contrib
  • На крайний случай можно проверить текущую директорию - вы должны находиться в папке build распакованного архива OpenCV выбранной версии
  • Напоследок убедиться, что версии релизов основного и contrib пакетов совпадают
В любом случае ничего страшного) Следует все перепроверить и запустить сборку заново Если сборка прошла гладко, значит все условия для компиляции инсталлятора OpenCV удовлетворены и мы сейчас соберем из исходников собственный свежий стабильный дистрибутив OpenCV с extra-модулями!
Запускаем компиляцию
Параметр -j4 означает количество задействованных ядер процессора, у Raspberry Pi 3 их 4.
ВНИМАНИЕ!! Этот процесс в лучшем случае займет порядка 1,5 часов времени!!!
make -j4 

Если наблюдаем краш в первые 5 минут компиляции, это вполне может произойти даже при идеальных условиях, то сбрасываем результат и запускаем компиляцию на одном ядре:
make clean 
make 

В случае успеха увидим следующее - процесс компиляции завершен на 100% Остается запустить собранный инсталлятор командой
sudo make install 
sudo ldconfig 

Все, OpenCV установлен на Raspberry! Для удобного его использования дело остается за малым - пробросить симлинк на OpenCV в созданное виртуальное окружение Питона (cv). Определим директорию - так как OpenCV - это библиотека Питона, то должна находиться в папке остальных библиотек, проверим:
  • команда ls выводит в терминал содержимое указанной директории
  • не забудьте указать в команде папку Python с версией, для которой собственно устанавливали OpenCV
ls /usr/local/lib/python3.5/site-packages/ 
В исключительных случаях библиотека может находиться в соседней папке dist-packages:
ls /usr/local/lib/python3.5/dist-packages/ 

Перейдем в эту директорию
cd /usr/local/lib/python3.5/site-packages/ 

Переименуем файл библиотеки - так будет проще вызывать ее в коде Python
sudo mv cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so 

Скопируем полный путь к файлу.

Перейдем в каталог библиотек виртуального окружения cv:
cd ~/.virtualenvs/cv/lib/python3.5/site-packages/ 

Создадим здесь симлинк на OpenCV:
ln -s /usr/local/lib/python3.5/site-packages/cv2.so cv2.so 

Проверим результат командой ls:

Проверка

Откроем новое окно терминала
source ~/.profile 
workon cv 
python 
import cv2 
cv2.__version__ 

Если все сделано правильно, то в консоли Питона библиотека OpenCV импортируется без ошибок
В случае ошибки импортирования внимательно проверьте правильность переименовывания файла библиотеки и создание симлинка на него (расширение - .so), а также успешность перехода в виртуальное окружение cv

Теперь можно удалить файлы сборки (опять же внимание на версии):
rm -rf ~/opencv/opencv-3.4.0 ~/opencv/opencv_contrib-3.4.0



Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.