Другие разделы этой статьи.
* Часть 1 — Установка ZoneMinder 1.36.x
* Часть 2 — Драйверы NVIDIA, Cuda 10.2, cuDNN 8.2.1, библиотеки TPU
* Часть 3 — Сборка и установка OpenCV 4.5.4
* Часть 4 — Настройка objectconfig.ini и тестирование локального ZMES
* Часть 5 — Сборка DLib (распознавание лиц) и ALPR
* Часть 6 — Установка и тестирование mlapi на том же хосте
* Часть 7 — Установка и тестирование mlapi на удаленном хосте (без ZMES)

Сборка OpenCV 4.5.4

К настоящему времени должна быть установлена ​​базовая установка ZM, установлены и работают драйверы Nvidia и Cuda с поддержкой cuDNN. Следующие шаги — настроить среду сборки для OpenCV 4.5, DLib и ALPR. Во время установки face_recognition создается DLib. Мы начнем с OpenCV 4.5 и перейдем на DLib, а затем закончим ALPR. Существует отличное руководство, на которое указывают исходные документы, и я буду перефразировать большую его часть в этом примере. Здесь — это статья, на которую указывает исходная документация для создания OpenCV с cuDNN.

sudo apt-get update
sudo apt-get upgrade
sudo apt install libopenblas64-dev libopenblas-dev build-essential git curl
sudo apt-get install libjpeg-dev libpng-dev libtiff-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install libv4l-dev libxvidcore-dev libx264-dev
sudo apt-get install libgtk-3-dev
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install python2-dev
sudo pip3 install numpy

Здесь вы можете создать виртуальную среду Python, если хотите сохранить эту среду отдельно. Это выходит за рамки данного примера.

Следующее, что вам нужно сделать, это выяснить вычислительные возможности (CC) графического процессора, который вы будете использовать для обнаружения. Это очень важно, если вы скомпилируете для неправильного CC, вы не узнаете, пока не сделаете свое первое обнаружение. Затем вам нужно будет вернуться, rm -rf папку build/ и перекомпилировать с правильным CC. Поэтому убедитесь, что вы получили правильный.

Если у вас есть несколько графических процессоров, вы можете компилировать для нескольких CC, но каждый добавленный CC фактически удваивает время компиляции OpenCV, вы предупреждены.

https://developer.nvidia.com/cuda-gpus#compute — это страница для поиска CC. Если у вас есть карта GTX, перейдите в раздел продуктов GeForce и TITAN.

Если вашей карты нет в списке, найдите серию под ней, например, 1660ti нет в списке. Однако 1650ti — это CC 1660ti (7.5).

Затем нам понадобятся исходные файлы OpenCV .zip и клонирование репозитория opencv_contrib. Исходный ZIP-файл доступен в репозитории OpenCV GitHub в разделе «Релизы». В октябре 2021 года в качестве текущей версии используется версия 4.5.4.

wget https://github.com/opencv/opencv/archive/refs/tags/4.5.4.zip
--2021-10-19 20:55:44--  https://github.com/opencv/opencv/archive/refs/tags/4.5.4.zip
Resolving github.com (github.com)... 140.82.112.3
Connecting to github.com (github.com)|140.82.112.3|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/opencv/opencv/zip/refs/tags/4.5.4 [following]
--2021-10-19 20:55:45--  https://codeload.github.com/opencv/opencv/zip/refs/tags/4.5.4
Resolving codeload.github.com (codeload.github.com)... 140.82.113.9
Connecting to codeload.github.com (codeload.github.com)|140.82.113.9|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/zip]
Saving to: '4.5.4.zip'
4.5.4.zip                                                       [                          <=>                                                                                                             ]  89.73M  17.8MB/s    in 7.1s
2021-10-19 20:55:52 (12.6 MB/s) - '4.5.4.zip' saved [94094204]
# Clone the opencv_contrib repo
git clone https://github.com/opencv/opencv_contrib.git

Теперь должен быть файл 4.5.4.zip и папка с именем opencv_contrib. Разархивируйте файл и создайте папку сборки внутри разархивированного каталога.

unzip 4.5.4.zip
cd opencv-4.5.4
mkdir build && cd build

Теперь приступаем к настройке сборки.

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D OPENCV_DNN_CUDA=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D CUDA_ARCH_BIN=7.5 \
-D WITH_CUBLAS=1 \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D HAVE_opencv_python3=ON \
-D PYTHON_EXECUTABLE=/usr/bin/python3 \
-D PYTHON2_EXECUTABLE=/usr/bin/python2 \
-D BUILD_EXAMPLES=ON ..
# Change the CUDA_ARCH_BIN=7.5 to whatever your CC is
# Otherwise this error will occur on your first detection ->
cv2.error: OpenCV(4.5.4) /home/baudneo/opencv-4.5.4/modules/dnn/src/cuda/execution.hpp:52: error: (-217:Gpu API call) invalid device function in function 'make_policy'
# Change the PYTHON_EXECUTABLE to where you have your venv python3 executable, if you are not using venv put the python3 executable (usually /usr/bin/python3). Same for PYTHON2_EXECUTABLE

Теперь вы можете проверить вывод CMake, чтобы убедиться, что cuDNN и Cuda используются.

OpenCV modules:
--     To be built:                 aruco barcode bgsegm bioinspired calib3d ccalib core cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev datasets dnn dnn_objdetect dnn_superres dpm face features2d flann freetype fuzzy gapi hfs highgui img_hash imgcodecs imgproc intensity_transform line_descriptor mcc ml objdetect optflow phase_unwrapping photo plot python3 quality rapid reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking ts video videoio videostab wechat_qrcode xfeatures2d ximgproc xobjdetect xphoto
# Notice all the cuda keywords!
--   NVIDIA CUDA:                   YES (ver 10.2, CUFFT CUBLAS FAST_MATH)
--     NVIDIA GPU arch:             75
--     NVIDIA PTX archs:
--
--   cuDNN:                         YES (ver 8.2.1)
# Also check that the python3 interpreter and numpy paths point to where they should (venv if configured that way)
 Python 3:
--     Interpreter:                 /usr/bin/python3 (ver 3.9.5)
--     Libraries:                   /usr/lib/x86_64-linux-gnu/libpython3.9.so (ver 3.9.5)
--     numpy:                       /home/baudneo/.local/lib/python3.9/site-packages/numpy/core/include (ver 1.21.2)
--     install path:                lib/python3.9/dist-packages/cv2/python-3.9

Как видите, есть Cuda 10.2 с cuDNN 8.2.1. Использование GPU arch 75 (CC: 7.5), а также CUBLAS и FAST_MATH. Python3 и NumPy указывают на правильные пути. Это то, что мы хотим!

Затем нам нужно скомпилировать, и это требует ресурсов, при использовании команды make вы можете использовать флаг -j ‹x›, чтобы использовать количество ядер ‹x›. Я предлагаю оставить 1 или 2 свободными и позволить использовать остальные. Компиляция занимает некоторое время в зависимости от вашего оборудования. Я использую двухпроцессорный процессор Xeon с 19/24 ядрами и 32 ГБ памяти DDR3 @ 800 МГц для компиляции OpenCV. Система используется для размещения ZM и нескольких других контейнеров LXC, пока я компилирую, поэтому мое время сборки может быть неточным для бездействующей системы. Этот тестовый хост ZM/neo-ZMES/neo-MLAPI находится в привилегированном LXC.

make -j 19
# Now it will compile and provide some output. Be patient! It takes my system roughly 15-20 mins or so
[100%] Built target opencv_python3
# Install it
sudo make install -j 19
# Now check that the interpreter can import OpenCV by jumping into a python3 shell and importing cv2 to check its version.
python3
import cv2
cv2.__version__
exit() or Ctrl+D
baudneo@ZMES-test:~/opencv-4.5.4/build$ python3
Python 3.9.5 (default, May 11 2021, 08:20:37)
[GCC 10.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.5.4'
>>> exit()

Другие разделы этой статьи.
* Часть 1 — Установка ZoneMinder 1.36.x
* Часть 2 — Драйверы NVIDIA, Cuda 10.2, cuDNN 8.2.1, библиотеки TPU
* Часть 3 — Сборка и установка OpenCV 4.5.4
* Часть 4 — Настройка objectconfig.ini и тестирование локального ZMES
* Часть 5 — Сборка DLib (распознавание лиц) и ALPR
* Часть 6 — Установка и тестирование mlapi на том же хосте
* Часть 7 — Установка и тестирование mlapi на удаленном хосте (без ZMES)