01 |
Содержание:
|
|
02 |
Этой статьей начинается цикл статей о библиотеке компьютерного зрения OpenCV и использования её на Raspberry Pi 3 посредством языка Python. Это библиотека с открытым исходным кодом, позволяет реализовывать различные алгоритмы обработки видео и изображений, при помощи стандартных типов данных, функций и классов. |
|
03 |
В статье подробно описан процесс установки библиотеки OpenCV 3.4.0 с дополнительными модулями на вновь установленную систему Raspbian Stretch 4.9 (от 29.11.2017). |
|
04 | На заметку: |
У данной статьи есть видеоверсия!
Подписывайтесь на канал
, чтобы быть в курсе обновлений! |
|
05 |
Подготовка перед установкой Библиотека OpenCV для своей установки требует значительный объем свободного дискового пространства — примерно 6,5-7 Гб (из них около 6 Гб можно будет удалить после установки). Поэтому, для использования OpenCV рекомендуется использовать SD-карту емкостью не менее 16 Гб. |
|
06 | На заметку: |
Проверить наличие свободного места на SD-карте, можно, воспользовавшись утилитой df с параметром -h:
1 df -h |
|
07 |
Если по каким-то причинам, на момент начала установки библиотеки OpenCV, файловая система не расширена на всю SD-карту, это необходимо сделать. Для этого из терминала нужно вызвать окно настроек: |
|
08 |
1 sudo raspi-config |
|
09 |
Далее Advanced Options → Expand Filesystem. После — перезагрузиться. |
|
10 |
Для того, чтобы освободить дополнительное место на SD-карте, можно удалить ненужные пакеты, например Wolfram Mathematica (около 700 Мб) или LibreOffice (около 200 Мб): |
|
11 |
1 2 sudo apt-get purge wolfram-engine
sudo apt-get purge libreoffice* |
|
12 |
То же самое можно сделать при помощи окна Add / Remove Software: |
|
14 |
При помощи команды clean освобождается дисковое пространство за счет удаления полученных .deb-файлов пакетов в локальном репозитории (очистка локального кэша): |
|
15 |
1 sudo apt-get clean |
|
16 |
Командой autoremove автоматически будут удалены установленные как зависимости других, но больше не нужные, «осиротевшие» пакеты. Это позволит высвободить ещё около 700-800 Мб: |
|
17 |
1 sudo apt-get autoremove |
|
18 | На заметку: |
Перед всеми манипуляциями, как обычно, необходимо обновить систему:
1 2 sudo apt-get update
sudo apt-get dist-upgrade |
|
19 | Важно: |
После обновления необходимо перезагрузить систему.
|
|
20 |
Установка зависимых пакетов Перед началом установки, нужно установить необходимые для работы библиотеки OpenCV пакеты, включая дополнительные пакеты для работы с изображениями, видео и т.д.:
|
Об установке библиотеки OpenCV можно также почитать на официальном ресурсе.
|
21 |
1 2 3 4 sudo apt-get install cmake cmake-curses-gui libgtk2.0-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libx264-dev libxvidcore-dev
sudo apt-get install libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev
sudo apt-get install gfortran libatlas-base-dev |
|
22 |
Не будет лишним установить дополнительный пакеты для работы с видео, закодированными разными кодеками: |
|
23 |
1 sudo apt-get install -y libdc1394-22-dev libavresample-dev libgphoto2-dev ffmpeg libgtk-3-dev |
|
24 |
Если планируется 3D-визуализация или 3D-моделирование (в т.ч. сложных процессов), понадобится пакет VTK (необязательно): |
25 | Python |
1 sudo apt-get install -y libvtk6-dev |
|
26 |
Далее нужно установить python-пакет NumPy. NumPy — это расширение языка Python, добавляющее поддержку больших многомерных массивов и матриц, вместе с большой библиотекой высокоуровневых математических функций для операций с этими массивами: |
|
27 | На заметку: |
Установка numpy занимает продолжительное время без признаков жизни — это не зависание.
|
|
28 |
1 sudo pip3 install numpy |
|
29 |
Скачивание и распаковка исходников Создадим в папке /home/pi рабочую папку opencv и перейдем в неё: |
|
30 |
1 2 3 cd /home/pi
mkdir opencv
cd opencv |
|
31 |
Теперь необходимо скачать архивы с исходниками библиотеки и дополнительных модулей и распаковать их: |
|
32 | На заметку: |
По ссылкам:
располагаются последние рабочие версии исходников, которые могут содержать код, работающий с ошибками. Ссылки на последние релизные версии можно найти на страницах: На момент написания статьи релизная версия библиотеки 3.4.1, дополнительных модулей 3.4.1. Рекомендуется использовать одинаковые релизные версии библиотеки и дополнительных модулей. |
|
33 | Важно: |
Использование нерелизных версий может вызвать ошибки, в том числе при создании конфигурации сборки, при помощи утилиты cmake.
|
|
34 | На заметку: |
В утилите wget -o и -O — разные параметры!
|
|
35 |
1 2 wget https://github.com/opencv/opencv/archive/3.4.0.zip -O opencv_source.zip
unzip opencv_source.zip |
|
36 |
Поскольку планируется использование дополнительных модулей, то же самое придется сделать и для них: |
|
37 |
1 2 wget https://github.com/opencv/opencv_contrib/archive/3.4.0.zip -O opencv_contrib.zip
unzip opencv_contrib.zip |
|
38 |
После того, как файлы будут разархивированы, их можно удалить: |
|
39 |
1 2 rm opencv_source.zip
rm opencv_contrib.zip |
|
40 |
Создаем папку для конфигурации: |
|
41 |
1 2 3 cd /home/pi/opencv/opencv-3.4.0
mkdir build
cd build |
|
42 |
Настройка конфигурации Теперь необходимо настроить параметры сборки, при помощи утилиты cmake, которая была установлена в начале. Для этого, все значимые параметры передаются в качестве переменных утилиты, вместе с присваиваемыми значениями: |
Подробно о значении переменных утилиты cmake можно почитать на официальном ресурсе.
|
43 |
1 2 3 4 5 6 7 8 cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=/home/pi/opencv/opencv_contrib-3.4.0/modules \
-D BUILD_EXAMPLES=ON \
-D BUILD_DOCS=ON \
-D ENABLE_NEON=ON .. |
|
44 |
Если создание конфигурации завершилось сообщениями Configuring done и Generating done, можно продолжать. |
|
46 |
Здесь же, в отчете, перед началом сборки бинарников, нужно убедиться, что дополнительные модули (например face) также будут включены в сборку: |
|
47 |
1 2 3 4 5 6 7 8 -- OpenCV modules:
-- To be built: aruco bgsegm bioinspired calib3d ccalib core datasets dnn dpm face features2d flann freetype fuzzy highgui img_hash imgcodecs imgproc line_descriptor ml objdetect optflow phase_unwrapping photo plot python2 python3 python_bindings_generator reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking ts video videoio videostab xfeatures2d ximgproc xobjdetect xphoto
-- Disabled: js world
-- Disabled by dependency: -
-- Unavailable: cnn_3dobj cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev cvv dnn_modern hdf java matlab ovis sfm viz
-- Applications: tests perf_tests examples apps
-- Documentation: NO
-- Non-free algorithms: NO |
|
48 |
После завершения кофигурирования, настройки конфигурации можно изменить при помощи утилиты, предоставляющей графический интерфейс — ccmake: |
|
49 |
1 ccmake .. |
|
51 |
Компиляция библиотеки OpenCV После настройки конфигурации, можно приступать к сборке. Параметр -jn, задает количество задействованных ядер процессора (n) — для Raspberry Pi 3 можно задействовать 4 ядра: |
|
52 | На заметку: |
В процессе компиляции процессор очень сильно греется. При отсутствии радиатора процессор будет снижать тактовую частоту, что очень вероятно приведет к зависанию системы.
В целях устранения возможности подобных неприятностей, рекомендуется использовать меньшее количество ядер, например 1 или 2 — -j1 или -j2. Или использовать корпус с активным охлаждением: |
|
53 |
1 make -j4 |
|
54 |
В случае зависания, рекомендуется, после перезагрузки, возобновить процедуру компиляции с задействованием одного ядра: |
|
55 |
1 2 cd /home/pi/opencv/opencv-3.4.0/build
make -j1 |
|
57 |
Установка библиотеки OpenCV После успешной компиляции, библиотеку OpenCV необходимо установить. Делается это при помощи той же утилиты make: |
|
58 | На заметку: |
Использование более корректной утилиты checkinstall не приведет к желаемому результату.
|
|
59 |
1 sudo make install |
|
60 |
После того, как библиотека OpenCV инсталлирована, утилитой ldconfig, создаем необходимые связки и формируем кэш установленных динамических библиотек: |
|
61 |
1 sudo ldconfig |
|
62 |
Для проверки, в оболочке Shell (Python 3) можно вбить пару строк: |
|
63 | Python |
1 2 3 4 >>> import cv2
>>> cv2.__version__
'3.4.0'
>>> |
|
64 |
Готово! Теперь ничего не сдерживает от реализации мегапроектов!
|
|
65 |
Удаление исходников После того, как библиотека установлена, все исходные файлы можно удалить (папка opencv — примерно 6 Гб): |
|
66 |
1 2 cd ~
rm -rf opencv |
|
67 |
Для ленивых Ниже представлены варианты упрощения/ускорения задачи установки библиотеки OpenCV. |
|
68 |
Все команды в одном месте — можно просто копировать и исполнять их в терминале по очереди: |
|
69 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 # ==== Необязательно ====
# Для тех, у кого мало места на флешке
sudo apt-get purge wolfram-engine
sudo apt-get purge libreoffice*
sudo apt-get clean
sudo apt-get autoremove
# ========================
sudo apt-get -y update && sudo apt-get -y dist-upgrade
# sudo apt-get install -y build-essential pkg-config # Уже предустановлены в системе
sudo apt-get install -y cmake cmake-curses-gui libgtk2.0-dev
sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libx264-dev libxvidcore-dev
sudo apt-get install -y libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev
# ==== Необязательно ====
sudo apt-get install -y gfortran libatlas-base-dev
sudo apt-get install -y libdc1394-22-dev libavresample-dev libgphoto2-dev ffmpeg libgtk-3-dev
sudo apt-get install -y libvtk6-dev
# ========================
sudo pip3 install numpy
cd /home/pi
mkdir opencv
cd opencv
wget https://github.com/opencv/opencv/archive/3.4.0.zip -O opencv_source.zip
wget https://github.com/opencv/opencv_contrib/archive/3.4.0.zip -O opencv_contrib.zip
unzip opencv_source.zip
unzip opencv_contrib.zip
rm opencv_source.zip
rm opencv_contrib.zip
cd /home/pi/opencv/opencv-3.4.0
mkdir build
cd build
# Если мало места, то убрать параметр OPENCV_EXTRA_MODULES_PATH
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=/home/pi/opencv/opencv_contrib-3.4.0/modules \
-D BUILD_EXAMPLES=ON \
-D BUILD_DOCS=ON \
-D ENABLE_NEON=ON ..
make -j1
sudo make install
sudo ldconfig |
|
70 |
Ещё один вариант — запуск Bash-скрипта — opencv_install.sh (5,13 KB), который также самостоятельно проделает все описанные в статье операции. |
|
71 | Важно: |
Перед использованием Bash-скрипта, необходимо вручную обновить систему и перезагрузить Малинку.
1 2 sudo apt-get update
sudo apt-get dist-upgrade |
|
72 |
При вызове скрипта, в качестве параметра необходимо указать устанавливаемую версию библиотеки: |
|
73 |
1 sh opencv_install.sh "3.4.0" |
|
74 |
Использование Bash-скрипта будет предпочтительнее при установке версий библиотеки отличных от 3.4.0. Содержимое скрипта представлено ниже: |
|
75 | bash |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 #!/usr/bin/env bash
OPENCV_VERSION="$1" # Версию скрипта передаем параметром, например 3.4.0
OPENCV_SOURCE_ZIP="https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip"
OPENCV_CONTRIB_SOURCE_ZIP="https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip" # Задаем путь к архиву с дополнительными модулями
OPENCV_PACKAGE_NAME="opencv-${OPENCV_VERSION}" # Папка для распаковки архива с библиотекой
OPENCV_CONTRIB_PACKAGE_NAME="opencv_contrib-${OPENCV_VERSION}" # Папка для распаковки архива с дополнительными модулями
PREFIX="${PREFIX:-/usr/local}"
MAKEFLAGS="${MAKEFLAGS:--j 4}"
install_build_dependencies() {
# Список устанавливаемых пакетов:
# - cmake Утилита для автоматической сборки программы из исходного кода
# - cmake-curses-gui Пакет GUI (графический интерфейс) для cmake
# - libgtk2.0-dev GTK+ инструментарий для создания графических пользовательских интерфейсов
# - libjpeg-dev Библиотеки для работы с разными форматами изображений
# - libpng12-dev
# - libtiff5-dev
# - libjasper-dev JasPer - набор программ для кодирования и обработки изображений
# - libavcodec-dev Библиотека кодеков от Libav (аудио/видео)
# - libavformat-dev Библиотека кодеков от Libav (аудио/видео)
# - libswscale-dev Библиотека для выполнения высокооптимизированных масштабирований изображений и цветовых пространств и операций преобразований
# - libv4l-dev Набор библиотек, для работы с устройствами video4linux2
# - libx264-dev Библиотека кодирования для создания видеопотоков H.264 (MPEG-4 AVC)
# - libxvidcore-dev Видеокодек MPEG-4 (Xvid)
# - gfortran Матричные преобразования
# - libatlas-base-dev Матричные преобразования
local build_packages="cmake cmake-curses-gui"
# build-essential Предустановлены в системе
# pkg-config"
local gtk_packages="libgtk2.0-dev"
local image_packages="libjpeg-dev libpng12-dev \
libtiff5-dev libjasper-dev"
local video_packages="libavcodec-dev libavformat-dev \
libswscale-dev libv4l-dev \
libxvidcore-dev libx264-dev"
local matrix_packages="gfortran libatlas-base-dev"
sudo apt-get install -y $build_packages $gtk_packages $image_io_packages \
$video_io_packages $matrix_packages
}
download_packages() {
cd /home/pi
mkdir opencv
cd opencv
wget "$OPENCV_SOURCE_ZIP" -O "${OPENCV_PACKAGE_NAME}.zip"
wget "$OPENCV_CONTRIB_SOURCE_ZIP" -O "${OPENCV_CONTRIB_PACKAGE_NAME}.zip"
}
unzip_packages() {
unzip "${OPENCV_PACKAGE_NAME}.zip"
unzip "${OPENCV_CONTRIB_PACKAGE_NAME}.zip"
rm "${OPENCV_PACKAGE_NAME}.zip"
rm "${OPENCV_CONTRIB_PACKAGE_NAME}.zip"
}
install_numpy() {
sudo pip3 install numpy
}
configure() {
cd /home/pi/opencv/"$OPENCV_PACKAGE_NAME"
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX="$PREFIX" \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=/home/pi/opencv/"$OPENCV_CONTRIB_PACKAGE_NAME"/modules \
-D BUILD_EXAMPLES=ON \
-D BUILD_DOCS=ON \
-D ENABLE_NEON=ON \
..
make ${MAKEFLAGS}
}
install_opencv() {
sudo make install
sudo ldconfig
}
log() {
local msg="$1"; shift
local _color_bold_yellow='\033[1;33m'
local _color_reset='\033[0m'
echo -e "${_color_bold_yellow}* ${msg} *${_color_reset}"
}
main() {
if [ $OPENCV_VERSION = "" ]
then
log "Need OpenCV_version, for example '3.4.0'"
exit
fi
log "Installing build dependencies..."
install_build_dependencies
log "Installing NumPy..."
install_numpy
log "Downloading OpenCV packages..."
download_packages
log "Unpacking OpenCV packages..."
unzip_packages
log "Building OpenCV..."
configure
log "Installing OpenCV..."
install_opencv
}
main |
|
78 |
Похожие запросы:
|
|