Подготовка Raspberry Pi к работе с OpenCV и 3Dberry

Готовая к работе карточка

Если вы приобретаете расширенный комплект с карточкой MicroSD, то всё работает сразу. На карточке имеется уже настроенная операционная система для Raspberry Pi, в которой предустановлен весь необходимый софт и обучающие примеры. Сразу отмечу, что все файлы для работы и обучения лежат в домашней папке - вы попадаете в нее, запустив файловый менеджер. Помимо этого, копия всех материалов лежит на рабочем столе в папке RED_FOLDER. Назначение этой папки простое - если в процессе баловства с кодами вы что-то "поломали", можно легко и быстро вернуться к первоначальному варианту кодов и картинок.

Иногда возникает необходимость сделать карточку "с нуля". Например, если ваша карточка испортилась/потерялась или вдруг просто понадобилась запасная и свежая. В этом случае достаточно скачать образ карточки и записать его на MicroSD.

ВАЖНО! Старый образ по ссылке запускался только на Raspberry Pi 2. Для работы на третьей малине необходимо немного танцев с бубном (rpi-update и борьба с глюком распбиана по "прыгающему" таскбару). Все они уже проделаны, поэтому для работы с Raspberry Pi 3 скачивайте образ с соответствующей поменткой в названии.

Запись образа на карточку

Прилагаемый образ необходимо развернуть на карту MicroSD. Важный момент - не просто скопировать на карточку, а именно "восстановить" карточку из образа. Образ можно записать на карту с помощью бесплатной программы Win32 Disk Imager: http://sourceforge.net/projects/win32diskimager/ Рецепты для Mac и Linux тут не привожу, предполагая что пользователи этих операционок знают как это сделать.

Сюрприз

Для многих будет открытием тот факт, что большинство карточек 8 Гб на самом деле имеют разный размер. Он может отличаться в пределах 100 мегабайт. Предлагаемый образ снят с карточки 8 Гб, но на некоторые карточки образ может не поместиться. Поэтому для пущего спокойствия рекомендуется использовать карточку на 16 Гб.

Если вам интересна эта тема - вот обсуждение проблемы на форуме Raspberry: https://www.raspberrypi.org/forums/viewtopic.php?t=19468&f=26

Тонкости для продвинутых

Для тех, кто все-таки хочет из принципа впихнуть текущий образ на карточку, на которую он "не лезет", могу сказать, что разметка внутри образа сделана специальным образом. Раздел расширен не на всю карточку - в хвосте оставлено 500 мегабайт неиспользованного пространства. Это значит, что при копировании образа "в лоб"  утилитой dd карточка получится рабочей, даже если dd ругнется на то, что у него случилась беда и он не смог записать всё полностью

Делаем образ ручками

Если вы хотите сделать свою карточку "с нуля", то вот данные о "начинке". Отмечу, что обучающие скрипты начиная с 4-го можно запускать и на настольном компьютере - они работают с картинками, которые уже есть в качестве примера.
Образ делался на базе Raspbian Jessy (https://www.raspberrypi.org/downloads/raspbian/).
Установлено:
OpenCV 2.4.10
Python 2.7
Мануал по сборке и компиляции на самой малине хорошо описан вот тут. Надо отметить, что это вариант для терпеливых - сборка идет на борту малины. На первой малине занимает около 16 часов, на второй около семи. Я шел этим путем, исключив установку virtualenv.

Для калибровки камеры использован пакет Stereovision. Я использовал свой форк (о причинах ниже): https://github.com/realizator/StereoVision

Мой вариант ставится командой
sudo pip install -e git+https://github.com/realizator/StereoVision.git#egg=StereoVision

Помимо установленного выше Питону потребуются некоторые пакеты типа matplotlib, их можно устанавливать через pip по ходу работы.

Обучающие примеры можно установить отсюда: https://github.com/realizator/3dberry-turorial

Немного подробностей про библиотеку StereoVision

Оригинальная библиотека StereoVision рассчитана на другой способ получения картинок для калибровки - выхватывание их из видеопотока после определения шахматной доски. Но делалось это для мощной настольной системы, а не для Raspberry. Если при калибровке подать картинку, на которой доска отсутствует или определется некорректно, скрипт вылетает с ошибкой. В своем форке я добавил проверку на "корректность" пары, которая откидывает некорректные и продолжает калибровку.

Подробности для тех, кому интересно глубже покопаться в структуре этой библиотеки:
Подробности в блоге автора egret
- Детали о "серийной съемке" от egret
- Оригинал либы: https://github.com/erget/StereoVision.