Работа с камерой Raspberry Pi (часть 1) - Time-lapse
Камеру вполне можно считать одним из наиболее интересных аксессуаров для Raspberry Pi. Помимо того, что устройство умеет работать с USB-камерами, официальный производитель "малинки" выпускает две модели - RaspiCam и NoIR Camera, подключающиеся к специальному разъёму на плате. Камеры абсолютно идентичны, за одним небольшим исключением: в модели NoIR отсутствует инфракрасный фильтр. Последний устанавливается во все потребительские фото и видеокамеры для того, чтобы получаемая матрицей картинка соответствовала той, которую получает наш глаз. Без этого фильтра многие объекты теряют свой цвет (например, Кока-Кола становится прозрачной), а горячие - светятся, как раскалённые. Много примеров можно найти здесь, а для себя уясним, что NoIR нужна только для охранных систем (в паре с инфракрасными прожекторами) и неутомимых экспериментаторов.
Установка и настройка
Перед началом установки камеры, посмотрите официальную видеоинструкцию, там есть нюанс с зажимом. Там же описано, как включить камеру в настройках устройства. Ещё неплохо было бы отключить "демаскирующий" красный светодиод на камере. Для этого нужно открыть файл настроек
sudo nano /boot/config.txt
и добавить в него следующую строку:
disable_camera_led=1
Всё, после перезагрузки устройства светодиод больше не напомнит о себе.
Работа
Камера для Raspberry Pi по своим параметрам вполне сравнима с камерой смартфона среднего класса: 5MP для фото и Full HD для видео, без автофокуса, зума и прочих стабилизаторов. Кстати, кому интересно, тут есть сравнения камеры "малинки" с некоторыми мобильными телефонами. Тем не менее, спектр настроек этой камеры впечатлит даже заядлых фотографов. В Raspbian есть три очень мощных утилиты для работы с камерой: raspistill, raspivid и raspistillyuv. При их помощи можно много чего делать интересного, главное не брезговать документацией. Например, можно снимать time-lapse.
Time-lapse
Не буду объяснять что это такое, за меня это лучше сделает Википедия, а мы сразу приступим. Для начала нужно создать папку для снимков (например, timelapse) и зайти в неё:
mkdir timelapse
cd timelapse
Теперь надо запустить процесс интервальной фотосъёмки с сохранением снимков в этой папке. Да, не пугайтесь, мы снимаем фотографии, а потом соберём из них видеоролик.
raspistill -o a%04d.jpg -t 86400000 -tl 120000 &
Рассмотрим подробнее использованные настройки:
- -o a%04d.jpg - автоматическая генерация имени файлов. Будет выглядеть так: a0001.jpg, a0002.jpg, a0003.jpg и т.д.
- -t 86400000 - общая продолжительность съёмки в миллисекундах, в данном случае одни сутки
- -tl 120000 - интервал между кадрами в миллисекундах, в данном случае две минуты
- символ & в конце строки запустит съёмку в фоновом режиме
Также можно организовать съёмку через cron, тогда она будет "вечной". Подробнее об этом тут и тут.
После того, как съёмка завершена, самое время делать видео. Для этого сначала необходимо создать текстовой файл со списком всех кадров-фотографий:
cd timelapse
ls *.jpg > stills.txt
Теперь нужно установить приложение MEncoder и запустить "склейку":
sudo apt-get install mencoder -y
mencoder -nosound -ovc lavc -lavcopts vcodec=mpeg4:aspect=4/3:vbitrate=80000 -vf scale=1296:972,flip,mirror -o timelapse.avi -mf type=jpeg:fps=20 mf://@stills.txt
Данный пример кодирует видео без звука кодеком mpeg4 (библиотека libavcodec) с частотой 20 кадров/сек, соотношением сторон 4:3 и разрешением 1296x972 (половина от максимального разрешения камеры 2592x1944). Картинка развёрнута по вертикали и горизонтали, потому что камера была закреплена вверх ногами. Битрейт видео специально указан заоблачный - 80 Мбит/сек, так как кодировщик сам "выжмет максимум" из исходных фотографий. Например, видео из примера выше получилось с битрейтом 7647 Кбит/сек. Учитывая невысокую аппаратную мощность видео из примера, состоящее из пятиста с небольшим кадров, на Raspberry Pi B+ делается чуть менее получаса. Ниже список ключей и фильтров MEncoder. Наиболее полезными будут именно фильтры.
Ключи MEncoder
- -ovc help - Список всех доступных видео кодеков
- -oac help - Список всех доступных аудио кодеков
- -vf help - Список всех доступных аудио/видео фильтров
- -of help - Список всех доступных выходных форматов
- -ss
- Начальное время кодирования - -endpos
- Конечное время кодирования - -mc
- Максимальная величина корректировки A-V синхронизации на один кадр - -noskip - Запрет на пропускание кадров. Помогает при рассинхроне
- -novideo - Отключение видео
- -nosound - Отключение звука
- -nosub - Отключение субтитров
- -ovc copy - Копирование видео (сохранение без изменений)
- -oac copy - Копирование звука (сохранение без изменений)
- -ofps
- Количество кадров в секунду - -aid
- Порядковый номер кодируемой аудиодорожки (по умолчанию 0) - -alang
- Язык кодируемой аудиодорожки (две буквы для DVD и три для MKV) - -sid
- Порядковый номер субтитров - -slang
- Язык субтитров - -subcp
- Кодировка субтитров
Фильтры MEncoder
Фильтры указываются через запятую, после ключа -vf
- -vf
=help - Получаем справку по фильтру (если она есть) - crop=w:h:x:y - Обрезаем изображение до указанного размера, отбрасывая остальное. Начальная позиция обрезаемого изображения, по умолчанию, в центре
- scale=w:h - Масштабируем изображение
- dsize=w:h - Задаем размер/пропорции отображаемого видео (не путать с размером кадра). Фильтр сам по себе ничего не делает, он всего лишь указывает как масштабировать дальше
- rotate=0 - Поворот на 90 градусов по часовой стрелке и отражение (по умолчанию)
- rotate=1 - Поворот на 90 градусов по часовой стрелке
- rotate=2 - Поворот на 90 градусов против часовой стрелки
- rotate=3 - Поворот на 90 градусов против часовой стрелки и отражение
- flip - Зеркально отражаем изображение по вертикали
- mirror - Зеркально отражаем изображение по горизонтали
- harddup - Дублирующиеся кадры будут принудительно кодироваться на выходе. Необходим, если вы после кодирования планируете редактировать видеофайл. Следует размещать в самом конце списка фильтров
Знатно накомментили:
А как поднастроить юсб камеру , чтобы также получать фото в ответ на photo ? Камера подключена по Юсб и по команде luvcview -s 640x480 -i 30 изображение показывает. Но при команде raspistill -w 640 -h 480 -o /home/pi/camera/photo.jpg идет ошибка:
mmal: Cannot read cameara info, keeping the defaults for OV5647
...
mmal: Camera is not detected. Please check carefully the camera module is installed correctly
Заранее благодарю !