Как стать автором
Обновить

Комментарии 13

Здорово все, конечно. Но когда малинка стала микроконтроллером? По-моему, это все таки процесор с перефирией

Спасибо за замечание, поправил! Сам привык называть их бордами.


Компиляция непосредственно на микроконтроллере плате, принято названная нативной, действительно трудоёмка
Извините, а последняя картинка с двумя промахнувшимися областями — это такой троллинг в сторону OCV? :)
А что тут от OCV, встречный вопрос?) deep learning модуль выдаёт предсказания, которые совпадают с оригинальным фреймворком (авторский Caffe в данном случае). Всё зависит от качества тренировки исходной нейросети.

Я то вообще удивился, что нашлось хоть что-то, с учётом качества картинки. Да ещё и матрёшку признали антропоморфной (хотя по правде сказать, сеть была крайне неуверена и чаще предсказывала, что это «bottle»).

Если для кросскомпиляции нужно специфическое окружение — не проще ли chroot вместо docker'а?

Да, можно и действительно проще. Нужно ещё будет использовать qemu, чтобы докачивать пакеты в rootfs.

Проблема в переносимости — такой подход не заинтегрировать гладко в CI, если нужно, посколько трюк с qemu сработает только тогда, когда на самой хостовой машине, выделенной под CI поставлен qemu-user-static. Поправьте меня, если не прав.

Непонятно, при чем тут qemu.
Я процесс кросс-компиляции представляю так:
Берём кросс-компилятор, который умеет целевую платформу. Делаем sysroot, точно как на целевой платформе. После make install получим набор файлов, который нужно перенести в вашу машинку. Можно завернуть в .deb, можно завернуть в образ sd карты через genext2fs… CI и qemu это уже совершенно другие задачи.

Извиняюсь, наверное стоило сразу попробовать показать примером то, что имелось ввиду. Да, можем взять нашу плату, выкачать оттуда заголовочные файлы с нативными библиотеками на хост и указывать кросс-компилятору в качестве зависимостей. Но это не совсем прозрачный подход. Никто не будет запоминать, в каком порядке и откуда на конечном устройстве появились нужные пакеты зависимостей. Для себя — нормально, но как только появляется новый пользователей этого процесса — для него это магия типа "не трогай эти папочки — сломаешь сборку".


То есть ещё раз — Ваше решение правильное, но хочется иметь воспроизводимый набор инструкций. Например, взять публичный чистый Raspbian образ, докачать в него зависимостей и использовать в качестве rootfs донора. Тогда если по шагам:


  1. Качаем Raspbian Lite


    wget http://downloads.raspberrypi.org/raspbian_lite/archive/2018-11-15-21:03/root.tar.xz

  2. Распаковываем и внедряемся:


    mkdir sysroot
    sudo tar -xf root.tar.xz -C sysroot
    sudo chroot sysroot


Только на chroot получим ошибку


chroot: failed to run command ‘/bin/bash’: Exec format error

Потому что OS то для ARM, да ещё и 32 битная, а мы (я в данном случае) работаем на 64-битном Intel® Core™ i5.


Тогда то и можно попробовать qemu:


sudo apt-get install -y qemu-user-static
sudo cp /usr/bin/qemu-arm-static sysroot/usr/bin/
sudo chroot sysroot 

Готово, я внутри и могу доустанавливать пакеты.

Как-то сложно. Я это вижу так. От каких пакетов зависит opencv известно? По-моему, да ;). Raspbian это же вариация debian? Значит, можно распаковать -dev пакеты, вместе с их зависимостями, именно тех версий, что используются в релизе вашего raspbian.
Все это вполне автоматизируется. Магии apt должно хватить.

Может на основе этого сделаете готовый Jenkins-agent и выложите на hub.docker.com? Это поможет не строить велосипеды и за минуты готовить среду для сборки opencv проекты

Вопрос насколько долго это будет актуально и гибко. Выложить может любой пользователь, но поддерживать будет не каждый. Чего далеко ходить, python-opencv: Maintainer Kubuntu Developers, не OpenCV team.

Полученные библиотеки работают с gpu?

У малинки вроде бы не плохая видеокарта 24gflops (3-яя модель уже 93gflops) в теории раз в 30 быстрее cpu.

гугл даже выдает открытые реализации opencl, т.е. в теории это решаемо.

Здорово, собирал сам 3.4.1 для Raspbian Jessie как раз из-за dnn. Недавно задумался переходить на Стретч, и тут ваша статья. А собранный deb можно где-нибудь стянуть?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории