Плата Intel Edison обладает достаточной вычислительной мощностью, поэтому было бы логично использовать все её возможности. Одна из ресурсоемких задач это компьютерное зрение.
В этой статье мы опишем, как собрать и установить библиотеку OpenCV на плату Intel Edison и подключить USB-камеру. OpenCV мы соберём с включенным IPP и TBB, что позволит библиотеке полностью использовать оба ядра Intel Edison.
Оригинальная статья описывает работу с предыдущей версией образа Yocto Intel Edison. Сейчас доступен новый вариант образа (edison-image-ww05-15.zip), работа с которым намного проще, так как большинство нужных пакетов уже установлено. В новом образе уже есть cmake, UVC и разделы имеют правильный размер, поэтому описание этих шагов вы можете пропустить. Дополнительно, в перевод добавлен исходный код двух простых примеров для работы с OpenCV и с USB камерой в OpenCV.
Сборка OpenCV на Intel Edison потребует как минимум 2 Гб дополнительной памяти, поэтому надо будет установить microSD карту необходимого объема в слот на плате.
Приготовьте стандартный (или специальный с дополнительными пакетами) образ Edison’а используя Board Support Package и Startup Guide. Можете использовать оригинальный образ или настроить свой с дополнительными пакетами.
Если вы хотите использовать обычную USB камеру, тогда понадобится включить UVC в ядре Linux’а. Если вы закончили построение своего собственного образа (сделали 'bitbake edison-image'), то теперь вы готовы настроить Linux ядро. Введите на хост машине:
Затем найдите и активируйте Device Drivers -> Multimedia support -> Media USB Adapters. Когда настройка будет закончена, замените defconfig содержимым .config, который вы только что изменили. Введите:
Напоследок выполним bitbake ещё раз:
Если у вас старый образ, рекомендуем изменить стандартное разбиение разделов, потому что размер корневой файловой системы всего 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 завершится, выполните:
Проверьте, есть ли у вас 'dfu-util'. Если нет, установите:
Сейчас надо записать образ дважды, чтобы применить настройки разделов. Во-первых, выполните:
И затем выполните запись без '--recovery'
После удачного запуска Edison’а, присоедините USB кабель к последовательному порту. Проверьте, какой номер USB устройства получил ваш Edison при соединении с Linux компьютером. Затем подключитесь через ‘screen’ (введите соответствующий номер вместо ‘X’, например, ttyUSBX -> ttyUSB0)
Если вы видите, что Edison удачно загрузился, войдите как ‘root’ и проверьте доступное место, выполнив:
После того, как ваш хост компьютер подключился к Edison’у через последовательный порт, выполните:
Следуйте инструкциям и настройте пароли и WiFi. Если у вас не будет задан пароль, тогда доступ по ssh будет запрещен. Подключите хост компьютер и Edison к одной точке доступа. Для передачи файлов можете использовать любой способ подключения по FTP или SCP.
Убедитесь, что у платы Edison есть доступ в интернет, так как он понадобится при автоматической установке IPP.
Старый образ Edison’а не поставляется вместе с 'cmake', но он нам потребуется, чтобы собрать OpenCV. Придётся вручную установить его. Один из способов, использовать ‘opkg’. Пользователь AlexT с форума Intel создал репозиторий, описанный в ветке.
AlexT рассказывает как присоединить репозиторий через ‘opkg’. Чтобы Edison’а получал пакеты из репозитория, замените всё, что у вас есть в /etc/opkg/base-feeds.conf следующим (другие конфигурационные файлы opkg изменять не надо):
Введите ‘opkg update’. Вы должны увидеть следующие строки, означающие, что вы успешно подсоединились к репозиторию:
Теперь вы готовы установить CMake. Введите:
Введите 'cmake' и вы должны увидеть страницу помощи.
Перед тем, как мы перейдем к самому OpenCV, нам потребуется много свободного места для его построения на Edison. Поэтому нам нужна дополнительная внешняя память, минимум 2 Гб. Мы отформатируем micro SD карточку и подмонтируем ее к Edison’у. Карточку можно отформатировать как сразу на плате, так и на Linux хост машине. Для форматирования карточки на Linux компьютере введите (block_device замените на ваше устройство, например, /dev/mmcblk1 )
Или:
Пометим раздел:
Вставьте SD карту в Edison и подмонтируйте её:
Проверьте, что она подмонтировалась без проблем, используя 'df -h'. Для удобства, можно настроить автомонтирование ‘auto mount’. Добавьте /dev/block_device <ваша папка> ' в /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. На вашем хост компьютере введите:
И скопируйте файлы в папку /usr/include/tbb на Edison с таким же именем. Также надо скопировать на Edison следующие файлы:
На этой странице, можно посмотреть полный список файлов библиотеки tbb.
Теперь на Edison в <OpenCV_DIR> напечатайте (не забыв ‘.’ точку в конце командной строки)
Эта команда включает IPP и TBB и выключает всё ненужное. С опцией 'BUILD_SHARED_LIBS=OFF' вы сможете создавать исполняемые программы для запуска без установленного OpenCV. Это может пригодиться, например, при распространении приложений. (Если вам не нужны IPP и TBB используйте WITH_TBB=OFF и WITH_IPP=OFF). В результате конфигурирования вы должны увидеть, что IPP и TBB включены.
Если проблем нет, введите:
Полная сборка займет от 30 минут до одного часа. Если вы получили ошибку
при создании OpenCV или примеров OpenCV, тогда надо добавить ‘-lv4l2’ после ‘-lv4l1’ в соответствующие конфигурационные файлы. Подобная ошибка может появиться в более чем 50 файлах, поэтому будет лучше сделать эту замену следующей командой:
Когда сборка закончится, установите то, что построили:
У вас может не быть в наличии машины с Linux. Здесь описан вариант такой установки TBB.
Скачайте TBB с сайта www.threadingbuildingblocks.org, это tgz архив. Распакуйте. Нам понадобится две папки, которые надо будет скопировать на Edison.
Всё её содержимое надо будет скопировать на плату Edison в /usr/include/tbb
И её содержимое надо будет скопировать на плату Edison в /usr/lib настроив правильно линки на библиотечные so-файлы.
Самый лёгкий способ создать простое OpenCV приложение это использовать примеры, которые идут вместе с библиотекой.
Перейдите в папку '/samples' и введите:
всё будет сконфигурировано и готово для компиляции примеров. Теперь вы можете заменить один из файлов с примерами в 'samples/cpp' и построить его через cmake. Например, вы можете заменить 'image.cpp' вашим собственным кодом. Сначала сделайте резервную копию оригинального файла:
В этом примере считывается картинка из файла ‘lena.jpg’, переводится в режим градаций серого и записывается в файл ‘test_gray_Image.jpg’. Поднимемся на один уровень выше и скомпилируем пример:
Если вы получите ошибку:
пока строите OpenCV или примеры OpenCV, надо будет добавить ‘-lv4l2’ после ‘-lv4l1’ в соответствующие конфигурационные файлы. Подобная ошибка может появиться в более чем 50 файлах, поэтому будет лучше сделать эту замену следующей командой:
Запустим:
Если всё нормально, на экране появится:
И в папке:
Должен появиться файл:
Скопируйте его на хост компьютер и посмотрите. И, если видишь, что с картины смотрит кто-нибудь на нас, или принц в плаще старинном… Но лучше, если это будет черно-белая Лена, что означает, что OpenCV работает.
И ещё, так как Edison не имеет видеовыхода, будет ошибка, если в коде будет вывод на графический экран. Например, не получится использовать 'imshow', который создает и показывает изображение или видео.
Проверим работу OpenCV с камерой. Проще всего использовать камеру, которая работает в Linux и совместима с UVC.
Для подключения камеры по USB надо передвинуть на плате переключатель SW1, чтобы он находился в стороне полноразмерного USB порта, куда будет подключена камера.
Подключив камеру, можно вывести информацию обо всех USB устройствах:
Последняя строка это как раз наша камера. Проверим, что она может работать по UVC:
Если такие строки найдены, то камера поддерживает UVC и её можно использовать в OpenCV. Введите следующий код:
В данном примере инициализируется камера, с неё получается одно изображение, переводится в черно-белый вариант и записывается в файл.
Если всё работает, можете использовать камеру в OpenCV.
facedetect.zip (13.81 MB)
mjpg-streamer-for-Edison.zip (957.36 KB)
VTune-Result-Edison.zip (1.07 MB)
Воспроизведение звука на Intel Edison через Bluetooth с использованием Advanced Audio Distribution Profile (A2DP)
Практикум «Intel IoT». Edison — могучая «кроха»
В этой статье мы опишем, как собрать и установить библиотеку OpenCV на плату Intel Edison и подключить USB-камеру. OpenCV мы соберём с включенным IPP и TBB, что позволит библиотеке полностью использовать оба ядра Intel Edison.
Примечание от переводчика
Оригинальная статья описывает работу с предыдущей версией образа Yocto Intel Edison. Сейчас доступен новый вариант образа (edison-image-ww05-15.zip), работа с которым намного проще, так как большинство нужных пакетов уже установлено. В новом образе уже есть cmake, UVC и разделы имеют правильный размер, поэтому описание этих шагов вы можете пропустить. Дополнительно, в перевод добавлен исходный код двух простых примеров для работы с OpenCV и с USB камерой в OpenCV.
Сборка OpenCV на Intel Edison потребует как минимум 2 Гб дополнительной памяти, поэтому надо будет установить microSD карту необходимого объема в слот на плате.
Подготовка образа (старый образ)
Приготовьте стандартный (или специальный с дополнительными пакетами) образ 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===
Введите ‘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 следующие файлы:
/usr/lib/libtbb.so,
/usr/lib/libtbbmalloc.so,
/usr/lib/libtbbmalloc_proxy.so
/usr/lib/pkgconfig/tbb.pc
На этой странице, можно посмотреть полный список файлов библиотеки 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 минут до одного часа. Если вы получили ошибку
'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># make install
Установки TBB без компьютера с Linux
У вас может не быть в наличии машины с Linux. Здесь описан вариант такой установки TBB.
Скачайте TBB с сайта www.threadingbuildingblocks.org, это tgz архив. Распакуйте. Нам понадобится две папки, которые надо будет скопировать на Edison.
<DIR>/include/tbb
Всё её содержимое надо будет скопировать на плату Edison в /usr/include/tbb
<DIR>/lib/ia32/gcc4.4/
И её содержимое надо будет скопировать на плату Edison в /usr/lib настроив правильно линки на библиотечные so-файлы.
Создание приложений с использованием OpenCV 3.0.0-rc1
Самый лёгкий способ создать простое OpenCV приложение это использовать примеры, которые идут вместе с библиотекой.
Перейдите в папку '/samples' и введите:
root@edison:<OpenCV DIR>/samples# cmake .
всё будет сконфигурировано и готово для компиляции примеров. Теперь вы можете заменить один из файлов с примерами в 'samples/cpp' и построить его через cmake. Например, вы можете заменить 'image.cpp' вашим собственным кодом. Сначала сделайте резервную копию оригинального файла:
root@edison:<OpenCV DIR>/samples/cpp# cp image.cpp image_orig.cpp
Замените image.cpp следующим кодом:
#include <iostream>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
int main( int argc, char** argv )
{
const char* imagename = "../data/lena.jpg";
Mat img = imread(imagename);
if(img.empty())
{
cout<<"Can’t load image "<<imagename<<endl;
return -1;
}
cout<<"Image read ok"<<endl;
Mat gray_image;
cvtColor( img, gray_image, CV_BGR2GRAY );
if( ! imwrite( "../data/test_gray_Image.jpg", gray_image ) )
{
cout<<"Can't write image"<<endl;
return -1;
}
cout<<"Write image ok"<<endl;
return 0;
}
В этом примере считывается картинка из файла ‘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 следующим кодом:
#include <iostream>
#include "opencv2/opencv.hpp"
using namespace cv;
using namespace std;
int main(int, char**)
{
VideoCapture cap(0); // open the default camera
if(!cap.isOpened()) // check if we succeeded
{
cout<<"Can't open camera"<<endl;
return -1;
}
cout<<"Camare init ok"<<endl;
Mat img,frame;
cap >> frame;
cvtColor(frame, img, CV_BGR2GRAY);
if( ! imwrite( "../data/test_camera_Image.jpg", img) )
{
cout<<"Can't write image"<<endl;
return -1;
}
cout<<"Camera image write OK"<<endl;
return 0;
}
В данном примере инициализируется камера, с неё получается одно изображение, переводится в черно-белый вариант и записывается в файл.
Если всё работает, можете использовать камеру в OpenCV.
Дополнительные ссылки:
facedetect.zip (13.81 MB)
mjpg-streamer-for-Edison.zip (957.36 KB)
VTune-Result-Edison.zip (1.07 MB)
Предыдущие публикации:
Воспроизведение звука на Intel Edison через Bluetooth с использованием Advanced Audio Distribution Profile (A2DP)
Практикум «Intel IoT». Edison — могучая «кроха»
Комментарии (10)
radiolok
22.05.2015 19:39+2Вопрос на засыпку — возможно ли подключить к Intel Edison камеру RealSense и разработать соответствующий Автономный софт для нее?
varerysan Автор
24.05.2015 00:48Помню у RealSense камеры было требование USB 3.0. А в Intel Edison только USB 2.0, поэтому скорее всего не заработает.
SvetlanaGEm
25.05.2015 11:17+1Возможно, но пока только к камере Creative Senz3D. На эту тему у нас была переводная статья habrahabr.ru/company/intel/blog/249603
BelBES
Хм, а почему вы не делаете кросс-компиляцию?
И в чем сакральный смысл запуска OpenCV на борде для IoT? Ну кроме «потому, что мы можем» разумеется… ведь в это железяке вроде как нет GPU и ничего увесистого там реализовать все равно не получится.
vpolin
Не совсем понял, причем тут графика и IoT. Графика вроде больше к мобильному сегменту относится.
Смысл запуска на борде: например, разработка ПО для распознавания лиц, подсчета уникальных посетителей в магазинах, и прочих вещей из мира IoT. Причем с использованием оптимизаций IPP для эдисона и авто-распараллеливания через TBB, поскольку эдисон двухъядерный.
--Владимир
BelBES
Графика относится непосредственно к CV и возможности использовать, например, OpenCL'ные оптимизации из OpenCV.
Было бы интересно посмотреть на бенчмаркинг производительности OpenCV для Intel Edison. Особенно для IPP оптимизаций, т.к. TBB вряд-ли где-то даст ускорение больше, чем 2X, что не серьезно :)
Ответил выше, есть сомнения насчет производительности на текущий момент в таких кейсах.
vpolin
Сомнения есть всегда и это хорошая мотивация для экспериментов тем, кому это надо.
Кому-то хватит производительности OpenCV на эдисоне для своих задач, а кому-то будет недостаточно и 4х-голового xeon с парой xeon phi или tesla карточек. Кстати, на таком сервере тоже высокопроизводительной графики нет.
Эта статья для тех, кто считает, что ему может хватить текущей производительности эдисона.:)
BelBES
Мне всегда казалось, что показать крутые чиселки производительности должно быть в интересах производителя железа и не должно отдаваться на откуп конечным пользователям. А то ведь пользователи чего-то не того намеряют и репутация железки упасть может :-)
Хм… т.е. карты линейки Tesla по вашему не достаточно мощная графика?:)
vpolin
у теслы нет графического выхода, это не графика, а числодробилка. С натяжкой её можно назвать GPGPU, поскольку там такая же CUDA, как на «нормальном джефорсе», только число блоков обработки и рабочая частота поболее.:)
BelBES
Эм… разве я где-то упоминал про GPU не в контексте числомолотилок?:)