Quantcast
Channel: Статьи Intel Developer Zone
Viewing all articles
Browse latest Browse all 357

Установка OpenCV 3.0.0-rc1 (с использованием IPP и TBB) на Intel Edison Yocto. USB-камера в OpenCV

$
0
0

Подготовка образа (старый образ)

Приготовьте стандартный (или специальный с дополнительными пакетами) образ Edison’а используя Board Support Packageи Startup Guide. Можете использовать оригинальный образ или настроить свой с дополнительными пакетами.
 

Включение UVC (USB Video device Class) в ядре Linux (старый образ)

Если вы хотите использовать обычную USB камеру, тогда понадобится включить UVC в ядре Linux’а. Если вы закончили построение своего собственного образа (сделали 'bitbake edison-image'), то теперь вы готовы настроить Linux ядро. Введите на хост машине:

   ~/edison-src> bitbake virtual/kernel -c menuconfig

Затем найдите и активируйте Device Drivers -> Multimedia support -> Media USB Adapters. Когда настройка будет закончена, замените defconfig содержимым .config, который вы только что изменили. Введите:

  ~/edison-src> cp /build/tmp/work/edison-poky-linux/linuxyocto/3.10.17+gitAUTOINC+6ad20f049a_c03195ed6e-r0/linux-edison-standardbuild/.config build/tmp/work/edison-poky-linux/linuxyocto/3.10.17+gitAUTOINC+6ad20f049a_c03195ed6er0/defconfig

Напоследок выполним bitbake ещё раз:

  ~/edison-src> bitbake virtual/kernel -c configure -f -v


  ~/edison-src> bitbake edison-image

 

Изменение разделов (старый образ)

Если у вас старый образ, рекомендуем изменить стандартное разбиение разделов, потому что размер корневой файловой системы всего 512 Мб, большая часть которой будет занята сразу же. '/home'– занимает всё, что осталось после присоединения заданных разделов, и обычно это более 2 Гб. Поэтому создание обоих разделов по 1.3 Гб будет более разумно.

Посмотрите в файл 'edison-src/device-software/meta-edison-distro/recipes-bsp/u-boot/files/edison.env' (для нового релиза исходников это файл 'edison-src/device-software/meta-edison/recipes-bsp/u-boot/files/edison.env') измените размер Rootfs с 512 Мб до 1312 Мб. В результате размер /home будет сокращен автоматически. Ещё одно изменение надо будет сделать перед повторной записью образа. Это размер rootfs, который устанавливается в 'edison-src/device-software/meta-edison-distro/recipes-core/images/edison-image.bb'и также равен 512 Мб. Измените размер rootfs снова и перестройте образ, выполнив 'bitbake edison-image'. Когда bitbake завершится, выполните:

 ~/edison-src> /device-software/utils/flash/postBuild.sh

Проверьте, есть ли у вас 'dfu-util'. Если нет, установите:

 ~/edison-src> sudo apt-get install dfu-util

Сейчас надо записать образ дважды, чтобы применить настройки разделов. Во-первых, выполните:

 ~/edison-src> /build/toFlash/flashall.sh --recovery

И затем выполните запись без '--recovery'

 ~/edison-src> /build/toFlash/flashall.sh

После удачного запуска Edison’а, присоедините USB кабель к последовательному порту. Проверьте, какой номер USB устройства получил ваш Edison при соединении с Linux компьютером. Затем подключитесь через ‘screen’ (введите соответствующий номер вместо ‘X’, например, ttyUSBX -> ttyUSB0)

> sudo screen /dev/ttyUSBX 115200

Если вы видите, что Edison удачно загрузился, войдите как ‘root’ и проверьте доступное место, выполнив:

 root@edison:~# df -h

 

Настройка WiFi, пароля для ssh и FTP

После того, как ваш хост компьютер подключился к Edison’у через последовательный порт, выполните:

 root@edison:~# configure_edison --setup

 Следуйте инструкциям и настройте пароли и WiFi. Если у вас не будет задан пароль, тогда доступ по ssh будет запрещен. Подключите хост компьютер и Edison к одной точке доступа. Для передачи файлов можете использовать любой способ подключения по FTP или SCP.

Убедитесь, что у платы Edison есть доступ в интернет, так как он понадобится при автоматической установке IPP.
 

Установка CMake (старый образ)

Старый образ Edison’а не поставляется вместе с 'cmake', но он нам потребуется, чтобы собрать OpenCV. Придётся вручную установить его. Один из способов, использовать ‘opkg’. Пользователь AlexT с форума Intel создал репозиторий, описанный в ветке.

AlexT рассказывает как присоединить репозиторий через ‘opkg’. Чтобы Edison’а получал пакеты из репозитория, замените всё, что у вас есть в /etc/opkg/base-feeds.conf следующим (другие конфигурационные файлы opkg изменять не надо):

===/etc/opkg/base-feeds.conf contents below===
src/gz all http://repo.opkg.net/edison/repo/all
src/gz edison http://repo.opkg.net/edison/repo/edison
src/gz core2-32 http://repo.opkg.net/edison/repo/core2-32

===end of /etc/opkg/base-feeds.conf contents===

Now type 'opkg update' and

Введите ‘opkg update’. Вы должны увидеть следующие строки, означающие, что вы успешно подсоединились к репозиторию:

root@edison:~# opkg update
Downloading http://repo.opkg.net/edison/repo/all/Packages.gz.
Inflating http://repo.opkg.net/edison/repo/all/Packages.gz.
Updated list of available packages in /var/lib/opkg/all.
Downloading http://repo.opkg.net/edison/repo/edison/Packages.gz.
Inflating http://repo.opkg.net/edison/repo/edison/Packages.gz.
Updated list of available packages in /var/lib/opkg/edison.
Downloading http://repo.opkg.net/edison/repo/core2-32/Packages.gz.
Inflating http://repo.opkg.net/edison/repo/core2-32/Packages.gz.
Updated list of available packages in /var/lib/opkg/core2-32.

Теперь вы готовы установить CMake. Введите:

root@edison:~# opkg install cmake-dev

Введите 'cmake'и вы должны увидеть страницу помощи.
 

OpenCV 3.0.0

Перед тем, как мы перейдем к самому OpenCV, нам потребуется много свободного места для его построения на Edison. Поэтому нам нужна дополнительная внешняя память, минимум 2 Гб. Мы отформатируем micro SD карточку и подмонтируем ее к Edison’у. Карточку можно отформатировать как сразу на плате, так и на Linux хост машине. Для форматирования карточки на Linux компьютере введите (block_device замените на ваше устройство, например, /dev/mmcblk1 )

 > mkfs.ext4 block_device

Или:

  > mke4fs -t ext4 block_device

Пометим раздел:

  > e4label <block_device> new_label

Вставьте SD карту в Edison и подмонтируйте её:

 root@edison:~# mkdir <Desired DIR>
 root@edison:~# mount block_device <Desired DIR > 

Проверьте, что она подмонтировалась без проблем, используя 'df -h'. Для удобства, можно настроить автомонтирование ‘auto mount’. Добавьте /dev/block_device <ваша папка> 'в /etc/fstab.

 root@edison:~# vi /etc/fstab

И добавьте '/dev/mmcblk1 /home/ext'

  Скачайте OpenCV for Linux 3.0 c официальной страницы OpenCV. Скопируйте полученный zip-файл на Edison через FTP или SCP. Лучше сразу копировать на внешнюю SD карту, так как, когда OpenCV будет построен, он займет более 1 Гб. Распакуйте скачанный файл командой 'unzip opencv-3.0.0-rc1.zip'и проверьте, что папка opencv-3.0.0-rc1 была создана. Перейдите в папку <OpenCV_DIR>, введите 'cmake .'и посмотрите какие опции есть.

Мы включим IPP и TBB для лучшей производительности. Библиотека IPP будет загружена автоматически, когда флаг WITH_IPP будет включен. Этого нельзя сказать о библиотеке TBB. Её надо будет установить вручную. Поэтому, установите пакет TBB на ваш хост компьютер и скопируйте соответствующие файлы на Edison. Если на вашем хост компьютере Linux 64 разрядный, нужно указать i386 когда будете скачивать через apt-get. На вашем хост компьютере введите:

> sudo apt-get install libtbb-dev:i386

 И скопируйте файлы в папку /usr/include/tbb на Edison с таким же именем. Также надо скопировать на Edison следующие файлы:

На этой странице, можно посмотреть полный список файлов библиотеки tbb.
Теперь на Edison в <OpenCV_DIR> напечатайте (не забыв ‘.’ точку в конце командной строки)

 root@edison:<OpenCV DIR># cmake -D WITH_IPP=ON -D WITH_TBB=ON -D WITH_CUDA=OFF -D WITH_OPENCL=OFF -D BUILD_SHARED_LIBS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF .

Эта команда включает IPP и TBB и выключает всё ненужное. С опцией 'BUILD_SHARED_LIBS=OFF'вы сможете создавать исполняемые программы для запуска без установленного OpenCV. Это может пригодиться, например, при распространении приложений. (Если вам не нужны IPP и TBB используйте WITH_TBB=OFF и WITH_IPP=OFF). В результате конфигурирования вы должны увидеть, что IPP и TBB включены.

Если проблем нет, введите:

 root@edison:<OpenCV DIR># make -j2

Полная сборка займет от 30 минут до одного часа. Если вы получили ошибку

при создании OpenCV или примеров OpenCV, тогда надо добавить ‘-lv4l2’ после ‘-lv4l1’ в соответствующие конфигурационные файлы. Подобная ошибка может появиться в более чем 50 файлах, поэтому будет лучше сделать эту замену следующей командой:

root@edison:<OpenCV DIR># grep -rl -- -lv4l1 samples/* modules/* | xargs sed -i ‘s/-lv4l1/-lv4l1 -lv4l2/g’

 

Когда сборка закончится, установите то, что построили:

 root@edison:<OpenCV DIR># make install

 

Установки TBB без компьютера с Linux

У вас может не быть в наличии машины с Linux. Здесь описан вариант такой установки TBB.
Скачайте TBB с сайта www.threadingbuildingblocks.org, это tgz архив. Распакуйте. Нам понадобится две папки, которые надо будет скопировать на Edison.

 root@edison:<OpenCV DIR>/samples# cmake .

Всё её содержимое надо будет скопировать на плату Edison в /usr/include/tbb

root@edison:<OpenCV DIR>/samples# make example_facedetect

 then it will automatically get the building done and output file will be placed in 'samples/cpp'

И её содержимое надо будет скопировать на плату Edison в /usr/lib настроив правильно линки на библиотечные so-файлы.
 

Создание приложений с использованием OpenCV 3.0.0-rc1

Самый лёгкий способ создать простое OpenCV приложение это использовать примеры, которые идут вместе с библиотекой.
Перейдите в папку '/samples'и введите:

root@edison:<OpenCV DIR># grep -rl -- -lv4l1 samples/* modules/* | xargs sed -i ‘s/-lv4l1/-lv4l1 -lv4l2/g’

 

всё будет сконфигурировано и готово для компиляции примеров. Теперь вы можете заменить один из файлов с примерами в 'samples/cpp'и построить его через cmake. Например, вы можете заменить 'image.cpp'вашим собственным кодом. Сначала сделайте резервную копию оригинального файла:

 

root@edison:<OpenCV DIR>/samples/cpp# cp image.cpp image_orig.cpp

 

Замените image.cpp следующим кодом:


В этом примере считывается картинка из файла ‘lena.jpg’, переводится в режим градаций серого и записывается в файл ‘test_gray_Image.jpg’. Поднимемся на один уровень выше и скомпилируем пример:
 

root@edison:<OpenCV DIR>/samples/cpp# cd ..
root@edison:<OpenCV DIR>/samples# make example_image


Если вы получите ошибку:
 

'undefined reference to symbol 'v4l2_munmap' ... libv4l2.so.0 : error adding symbols: DSO missing from command line'


пока строите OpenCV или примеры OpenCV, надо будет добавить ‘-lv4l2’ после ‘-lv4l1’ в соответствующие конфигурационные файлы. Подобная ошибка может появиться в более чем 50 файлах, поэтому будет лучше сделать эту замену следующей командой:
 

root@edison:<OpenCV_DIR># grep -rl -- -lv4l1 samples/* modules/* | xargs sed -i ‘s/-lv4l1/-lv4l1 -lv4l2/g’


Запустим:
 

root@edison:<OpenCV DIR>/samples# cd cpp
root@edison:<OpenCV DIR>/samples/cpp#./cpp-example-image


Если всё нормально, на экране появится:
 

Write image ok


И в папке:
 

<OPENCV_DIR>/samples/data


Должен появиться файл:
 

test_gray_Image.jpg


Скопируйте его на хост компьютер и посмотрите. И, если видишь, что с картины смотрит кто-нибудь на нас, или принц в плаще старинном… Но лучше, если это будет черно-белая Лена, что означает, что OpenCV работает.

И ещё, так как Edison не имеет видеовыхода, будет ошибка, если в коде будет вывод на графический экран. Например, не получится использовать 'imshow', который создает и показывает изображение или видео.
 

Взглянем на мир

Проверим работу OpenCV с камерой. Проще всего использовать камеру, которая работает в Linux и совместима с UVC.
Для подключения камеры по USB надо передвинуть на плате переключатель SW1, чтобы он находился в стороне полноразмерного USB порта, куда будет подключена камера.

Подключив камеру, можно вывести информацию обо всех USB устройствах:
 

root@Edison:/# lsusb
Bus 001 Device 002: ID 1a40:0101 Terminus Technology Inc. 4-Port HUB
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 1871:0141 Aveo Technology Corp.


Последняя строка это как раз наша камера. Проверим, что она может работать по UVC:
 

root@Edison:/# lsusb -d 1871:0141 -v | grep "14 Video"
      bFunctionClass         14 Video
      bInterfaceClass        14 Video
      bInterfaceClass        14 Video
      bInterfaceClass        14 Video
      bInterfaceClass        14 Video
      bInterfaceClass        14 Video
      bInterfaceClass        14 Video
      bInterfaceClass        14 Video


Если такие строки найдены, то камера поддерживает UVC и её можно использовать в OpenCV. Введите следующий код:
 

Замените image.cpp следующим кодом:


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

Дополнительные ссылки:


facedetect.zip (13.81 MB)
mjpg-streamer-for-Edison.zip (957.36 KB)
VTune-Result-Edison.zip (1.07 MB)
 

 

 


Viewing all articles
Browse latest Browse all 357

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>