ВКР (1229297), страница 6
Текст из файла (страница 6)
– функции для организации простого пользовательского интерфейса (все демо-приложения используют HighGUI).
Типичный процесс обработки изображения представлен на рисунке 2.14.
Рисунок 2.14 – Пример работы программы с использованием OpenCV
В версии 2.2 библиотека была реорганизована. Вместо универсальных модулей cxcore, cvaux, highGUI и других было создано несколько компактных модулей с более узкой специализацией:
– opencv_core – основная функциональность. Включает базовые структуры, вычисления и операции линейной алгебры, DFT, DCT, ввод/вывод в формате XML и YAML и т. д.;
– opencv_imgproc – обработка изображений;
– opencv_highgui – простой графический пользовательский интерфейс, ввод/вывод изображений и видео;
– opencv_ml – модели машинного обучения (SVM, деревья решений, обучение со стимулированием и т. д.);
– opencv_features2d – распознавание и описание плоских примитивов;
– opencv_video – анализ движения и отслеживание объектов;
– opencv_objdetect – обнаружение объектов на изображении;
– opencv_calib3d – калибровка камеры, поиск стерео-соответствия и элементы обработки трёхмерных данных;
– opencv_flann – библиотека быстрого поиска ближайших соседей (FLANN 1.5) и обертки OpenCV;
– opencv_contrib – сопутствующий код, ещё не готовый для применения;
– opencv_legacy – устаревший код (для обратной совместимости);
– opencv_gpu – ускорение некоторых функций OpenCV за счет CUDA, создан при поддержке NVidia.
3 РЕАЛИЗАЦИЯ Программно-аппаратного комплекса
3.1 Реализация аппаратного комплекса
Разрабатываемый программно-аппаратный комплекс предназначен для определения плотности и направления пешеходного и автомобильного потока на улицах городов. В дальнейшем на основе полученных данных может проводиться геомаркетинговый анализ: определение наиболее привлекательных мест для размещения рекламы и коммерческих предприятий; выявление часов наибольшей плотности пешеходного и автомобильного потока и т.д. Также полученная информация представлять интерес для правоохранительных органов (фиксация массового скопления народа, нарушение ПДД) и органов местного самоуправления (определение проблемных зон - наличие пробок, недостаток парковочных мест, низкая пропускная способность пешеходных тротуаров в часы пик и т.д.). Схема процесса обработки данных программно-аппаратным комплексом представлена на рисунке 3.1.
Рисунок 3.1 – Процессы работы программно-аппаратного комплекса
В настоящий момент закуплено оборудование для изготовления экспериментальной установки общей стоимостью 33 933 руб., из них собственные вложения – 19 538 руб. (Raspberry Pi2 OEM - 4 590 руб., карта памяти San Disk micro SD XC 64 Гб – 2 750 руб., Wi-Fi USB адаптер с антенной RTL 8188СUS – 429 руб., термокожух Computar Ganz GH-FW12 – 9 016 руб., Raspberry pi camera module rev 1.3 – 2 753 руб.) и финансовая поддержка РФФИ в рамках научного проекта №13-07-00615 – 14 395 руб. (IP-видеокамера с широкоугольным объективом Hikvision DS-2CD853F-EW – 12 990 руб., блок питания PD-25А – 1 405 руб.).
Основными компонентами устройства являются: корпус, блок питания, IP-камера, микрокомпьютер, интерфейсные модули. Устройство обеспечивается питанием 220 В. Блок питания преобразует напряжение питания в 5 В и 12 В. Напряжение в 5 В требуется для питания микрокомпьютера, а 12 В используется для нагревательного элемента и питания IP-камеры. Связь между IP-камерой и микрокомпьютером обеспечивается протоколом 10BASE, кроме того, микрокомпьютер оборудован WI-FI модулем. Изображения отдельных элементов представлены на рисунках 3.2-3.4.
Рисунок 3.2 – Блок питания
Рисунок 3.3 – Камера
Рисунок 3.4 – Микрокомпьютер
В процессе работы устройства IP-камера генерирует видео-поток и транслирует его по протоколу TCP/IP на микрокомпьютер по кабелю 10BASE. Микрокомпьютер производит обработку поступающих изображений и накапливает данные анализа в внутренней памяти RAM. В случае понижения температуры ниже допустимой, микрокомпьютер производит включение нагревательного элемента посредством реле. Эта часть реализована с помощью открытого порта GPIO, находящегося на верхней стороне платы микрокомпьютера. Для обеспечения возможности снятия видеоданных и данных статистики с устройства на микрокомпьютере установлен модуль Wi-Fi. Микрокомпьютер поддерживает открытой точку доступа (AP) модуля Wi-Fi. Сотрудник компании, приблизившись к устройству на расстояние ближе 20 метров, может подключиться к точке доступа с помощью персонального смартфона или планшета. После успешного подключения устройство отправляет результаты анализа на телефон сотрудника. Далее его можно просмотреть с помощью любого браузера. На рисунке 3.5 изображен собранный аппаратный модуль.
Рисунок 3.5 – Экспериментальная установка
Рисунок 3.6 – Мобильная установка
За время прохождения преддипломной практики на предприятии ООО «ИТЦ – Компьютер» была собрана экспериментальная и мобильные установки (рисунок 3.5 и 3.6). Установка испытана в различных погодных условиях и показала хорошую отказоустойчивость. Собран материал, необходимый для отладки алгоритма распознавания пешеходов.
3.2 Реализация программного модуля
Программный модуль представляет собой программу, реализованную на языке С++, с использованием библиотек OpenCV. Модуль позволяет распознавать пешеходов на изображении и вычислять степень близости распознаваемого объекта к «эталону» пешехода.
3.2.1 Среда разработки и установка библиотеки компьютерного зрения OpenCV
OpenCV является библиотекой алгоритмов компьютерного зрения, обработки изображений и численных алгоритмов общего назначения с открытым кодом, которая реализована на C/C++, также разрабатывается для Python, Java, Ruby, Matlab, Lua и других языков [52].
Для разработки приложения был выбран язык С++, так как он является, де-факто, промышленным стандартом и обладает гибким функционалом.
В связи с низким быстродействием микрокомпьютера используется операционная система семейства Linux Ubuntu. Для того, чтобы обрабатывать видеопоток на микрокомпьютере требуется установить библиотеку компьютерного зрения OpenCV. Для этого необходимо скомпилировать библиотеки в текущей операционной системе. После компиляции и основных настроек операционная система будет готова к работе с функциями библиотеки компьютерного зрения OpenCV.
Также была выбрана операционная система Ubuntu, так она основана на ОС Debian, которая будет работать на устройстве. Данные операционные системы не требовательны к ресурсам, поэтому подходят микрокомпьютерам, которые ограничены в производительности и по количеству ядер процессора, а также в оперативной памяти.
Сначала необходимо установить связи между OpenCV и Ubuntu. выполнив следующую команду. При ее выполнении некоторые библиотеки могут быть обновлены, а в случае отсутствия – загружены.
Листинг 3.1 – Установка библиотек
sudo apt-get -y install libopencv-dev build-essential cmake git libgtk2.0-dev pkg-config python-dev python-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff4-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip
Для корректной работы OpenCV со средой разработки нужно выполнить следующие команды. В процессе их выполнения будет создана директория для хранения исполняемого кода (скопированных файлов), алгоритмов библиотеки.
Листинг 3.2 – Компиляция библиотеки OpenCV
cd opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..
make -j $(nproc)
sudo make install
Если установлены все необходимые компоненты, будет выведено сообщение об успешной компиляции, иначе – сообщение об ошибках.
Для корректной работы библиотеки необходимо выполнить следующие команды, которые позволяют подключить OpenCV к интегрированной среде разработки Qt Creator.
Листинг 3.3 – Конфигурация
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
Завершающим этапом является подключение библиотеки OpenCV к интегрированной среде разработки Qt Creator.
Листинг 3.4 – Подключение
INCLUDEPATH += /usr/local/include/opencv-3.0.0
LIBS += -L/usr/local/lib -lopencv_core -lopencv_imgcodecs -lopencv_highgui -lopencv_imgproc -lopencv_photo -lopencv_video -lopencv_videoio -lopencv_features2d -lopencv_calib3d
Поскольку требуется только консольный интерфейс, то оптимально сделать выбор в сторону интегрированной среды разработки Code Blocks, она менее требовательно ресурсам, чем интегрированная среда Qt Creator.
Рисунок 3.7 – Указания пути библиотекам
После подготовительных этапов и указания путей к библиотекам, генерации и конфигурирования библиотеки компьютерного зрения OpenCV, можно приступать к разработке программного модуля.
3.2.2 Реализация алгоритма распознавания пешеходов
Библиотека компьютерного зрения включает встроенные функции распознавания пешеходов. В модуле object содержится функция detectMultiScale, которая является реализаций алгоритма, основанного на HOG (histogram oriented gradients). Функция создает массив координат предположений на изображении и сопряженный массив с степенями соответствия детектированных объектов.
Рисунок 3.8 – Изображение с детектированными объектами
Изменяя входные параметры, можно управлять скоростью распознавания и качеством детектирования. Например, при снижении коэффициента масштаба, объекты большего или меньшего размера будут игнорироваться. Это также означает, что скорость распознавания может быть изменена.
Главной характеристикой, определяющей качество детектирования является корректно настроенный дескриптор. Для задачи определения пешеходов на изображении, необходимо использовать заранее обученный детектор. В данной работе использовался стандартный дескриптор, так как невозможно сделать корректную выборку изображений за короткий срок.
Алгоритмы вычисления HOG-признаков и их использования для детектирования объектов в OpenCV реализованы в классе HOGDescriptor (модуль objdetect).
HOGDescriptor(Size winSize, Size blockSize, Size blockStride, Size cellSize, int nbins, int derivAperture=1, double winSigma=-1, int histogramNormType=HOGDescriptor::L2Hys, double L2HysThreshold=0.2, bool gammaCorrection=false, int nlevels=HOGDescriptor::DEFAULT_NLEVELS)
– winSize – размер изображения (окна детектирования), для которого будут вычисляться HOG-признаки;
– blockSize – размер блока в пикселях;
– blockStride – шаг блока по горизонтали и вертикали;
– cellSize – размер ячейки в пикселях;
– nbins – количество полос в гистограмме ориентации градиентов одной ячейки;
– derivAperture – не используется;
– winSigma – величина стандартного отклонения взвешенных вкладов магнитуд градиентов в гистограммы;
– histogramNormType – алгоритм нормировки вектора признаков блока;
– L2HysThreshold – пороговое значение компонент вектора признаков (параметр алгоритма нормировки);
– gammaCorrection – выполнять ли гамма-коррекцию изображения;
– nlevels – максимальное количество изменений масштаба изображения (параметр детектора).
Если все изображения одинакового и фиксированного размера, объекты занимают (приблизительно) одинаковую область изображения, то вектора признаков данных изображений имеют одинаковую длину, с помощью алгоритмов обучения с учителем можно достаточно точно классифицировать изображения с объектом и без него.