01 марта 2018
Кравченко Виктор

Raspberry Pi 3: OpenCV + Python (#1) — установка библиотеки для использования с Python

Радиотехника и электроника Цифровые устройства Умный дом Raspberry Python OpenCV
01
Содержание:
  • Raspberry Pi 3: OpenCV + Python (#1) - установка библиотеки для использования с Python
  • Raspberry Pi 3: OpenCV + Python (#2) - выбор источника картинки В процессе написания
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:

13
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 пакеты, включая дополнительные пакеты для работы с изображениями, видео и т.д.:

  • 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 — Подпрограммы линейной алгебры

Об установке библиотеки 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 (необязательно):

VTK (Visualization ToolKit, англ. инструментарий визуализации) — открытая кроссплатформенная программа для трёхмерного моделирования, обработки изображений и прикладной визуализации. Сайт проекта — 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, можно продолжать.

45
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 ..
50
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
56
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

Похожие запросы:

  • Установка OpenCV 3 на Raspberry Pi 3
  • Как установить OpenCV на Raspberry Pi 3 Model B
  • Install guide: Raspberry Pi 3 + Raspbian Jessie + OpenCV 3
  • How to install OpenCV 3.0 on Raspbian Jessie
  • Installing OpenCV on your Raspberry Pi running Raspbian
  • Installing OpenCV 3.0 for Python 3+ on Raspbian
  • Install Open CV on Raspberry Pi
  • Raspbian Stretch: Install OpenCV 3 + Python on your Raspberry Pi
  • Compile OpenCV 3.2.0 + OpenCV Contrib for Python on Raspberry Pi
  • Compiling OpenCV 3.4 with extra contributed modules
comments powered by HyperComments