Приложение Маяки Эстонии

Работа с камерой Raspberry Pi (часть 1) - Time-lapse

25 Февраля

Камеру вполне можно считать одним из наиболее интересных аксессуаров для 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 - Дублирующиеся кадры будут принудительно кодироваться на выходе. Необходим, если вы после кодирования планируете редактировать видеофайл. Следует размещать в самом конце списка фильтров

Пример timelapse-видео

Знатно накомментили:

Петрович
2019-03-04 06:24:27
Делает 10-12 снимков и всё. Тишина. Не работает короче.
Виктор Линьков
2017-04-26 14:02:52
Не знаете ли как сравнить 2а фото на стационарном компьютере (у меня стоит ubuntu) чтобы не загружать процессор распберри ПО motion ?
Гость
2016-10-26 15:18:37
Товарищи !

А как поднастроить юсб камеру , чтобы также получать фото в ответ на 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

Заранее благодарю !
Nobody
2022-05-18 15:52:17
raspistill работает только со внутренними камерами.
Lentyay
2016-10-26 15:32:44
Сам не пробовал, может это поможет.
Dmitriy
2016-06-19 16:42:55
а где часть 2?

Оставить комментарий

Цитировать
в комментарии