Raspberry Pi. Подключение и работа с CSI-камерой
В начале
Рассмотрим методы правильного подключения камеры к Raspberry Pi и работу с ней через терминальное окно и с помощью языка программирования Python.Материалы по теме: Установка ОС Raspbian, Терминал Linux. Основы
Подключая камеру к Raspberry помним следующее:
- камера боится статического электричества, прикасаться к ней во время работы желательно через антистатический материал
- камера потребляет 250 мА - при использовании посредственного блока питания Малины подключение камеры может вызвать нехватку питания при активной работе камеры
- в камере нет микрофона
- верх камеры находится со стороны противоположной выходу шлейфа, но для отражение изображения по вертикали есть специальная команда - об это ниже.
Подключение
Желательно выполнять подключение камеры к выключенной Raspberry. Быстро выключить Малину можно командойsudo shutdown now
Шлейфовый разъем CSI находится рядом с HDMI:

Для удобства фиксации камеры есть готовые решения, например - Акриловый холдер.



Для работы с камерой в Raspbian уже предустановлены необходимые утилиты и драйвера. Обновим пакеты для использования свежих версий:
sudo apt-get update -y
sudo apt-get dist-upgrade -y
mkdir ~/pi_cam/
cd ~/pi_cam/
raspistill -v -o test.jpg

В ОС Raspbian предустановлены следующие пакеты для работы с камерой:
- raspivid, raspvidyuv - захват видео
- raspistill, raspiyuv- получение фотографий
Все утилиты запускаются из терминала и достаточно просты в использовании.
Пакеты, с названиями, оканчивающимися на “yuv” не используют компонент кодирования - сохраняют “сырую” необработанную информацию, полученную сенсором камеры.
Общие параметры
Рассмотрим значения параметров. Стоит заметить, что:- Если какой то аргумент не указан при обращении к утилите, то применяется его значение по умолчанию.
- ЕСЛИ КОЛОНКА “ДИАПАЗОН ДОПУСТИМЫХ ЗНАЧЕНИЙ” ПУСТА - значит никаких дополнительных значений передавать не нужно - достаточно передачи самого аргумента.
- Превью демонстрируется только на подключенном к Raspberry физическом мониторе. В случае доступа к Малине через удаленный рабочий стол (VNC) превью демонстрироваться не будет при любых настройках так как изображение превью посылается напрямую на монитор поверх остальной информации
- Аналогичная картина с просмотром видео через рабочий стол
Аргумент | Описание | Диапазон допустимых значений | Значение по умолчанию |
-p | Параметры окна предпросмотра | ширина,высота,x-координата, y-координата | |
-f | Предпросмотр во весь экран | no | |
-n | Без предпросмотра | ||
-op | Прозрачность окна предпросмотра | 0...255 | 255 |
-sh | Резкость | -100...100 | 0 |
-co | Контраст | -100...100 | 0 |
-br | Освещенность | 0...100 | 50 |
-sa | Насыщенность | -100...100 | 0 |
-ISO | Чувствительность датчика в камере | -100...100 | 0 |
-vs | Стабилизация видео (только для видео) | no | |
-ev | Экспокоррекция | -10...10 | 0 |
-ex | Экспозиция |
| auto |
-awb | Баланс белого |
| auto |
-ifx | Разнообразные эффекты | none, negative, solarise, posterise, whiteboard, blackboard, sketch, denoise, emboss, oilpaint, hatch, gpen, pastel, watercolour, film, blur, saturation, colourswap, washedout, colourpoint, colourbalance, cartoon | none |
-cfx | Баланс цветов | 0...255:0...255 | 128:128 |
-mm | Замер экспозиции |
| average |
-rot | Поворот | 0 ... 359 | 0 |
-hf | Отражение по горизонтали | No | |
-vf | Отражение по вертикали | No | |
-roi | Область интереса сенсора | координаты от левого верхнего угла и ширина и высота области 0 … 1,0 … 1,0 … 1,0 … 1 | 0,0,1,1 |
-ss | Скорость затвора | в микросекундах | 6000000 |
-drc | Сжатие динамического диапазона |
| off |
-st | показывать статистику | No |
raspistill - захват фото
Эта утилита выдает кодированное сжатое изображение, и для выполнения этого действия есть немало параметров, передающихся аргументами при запуске raspistill.Аргументы
Аргумент | Описание | Диапазон допустимых значений | Значение по умолчанию |
-w | Ширина | 0...макс | макс |
-h | Высота | 0...макс | макс |
-q | Качество | 0...100 | 75 |
-o | Имя файла | путь к файлу | - |
-v | Вывод в терминал | Информация о процессе захвата | no |
-t | Задержка перед действием | в миллисекундах | 0 |
-tl | Таймлапс | пример: -tl 2000 -o image%04d.jpg 2000 - интервал %04d - шаблон 4х значного числа | - |
-e | Кодирование в формат | jpg, bmp, gif, and png | jpg |
-x | Добавление EXIF тегов | до 32 тегов | - |
-r | Сохранение массива Байера в Мeta-данных кодированного избражения | - |
Примеры
Рассмотрим конкретные примеры использования raspistill:Захват стандартного изображения через 2 секунды с сохранением в файл image.jpg (в той папке, в которой сейчас находитесь). Разрешение при этом будет стандартным (максимальным)
raspistill -t 2000 -o image.jpg
raspistill -o image.jpg -w 640 -h 480
raspistill -o image.jpg -q 5
raspistill -o image.png –e png
raspistill -o image.jpg -x IFD0.Artist=Boris -x GPS.GPSAltitude=1235/10
raspistill -t 600000 -tl 10000 -o image_num_%03d_today.jpg -l latest.jpg
raspistill -t 0 -k -o my_pics%02d.jpg
raspiyuv
Аргументы запуска в точности как у raspistill (см. выше), из них НЕДОСТУПНЫ только следующие:-q - качество
-e - указание целевого формата изображения
-x - Добавление EXIF тегов
-r - Сохранение массива Байера в Meta-данных кодированного изображения
Однако имеется СОБСТВЕННЫЙ аргумент
-rgb - сохранение “сырых” raw-данных в формате RGB888 (8 бит/канал)
raspivid - захват видео
Параметры запуска
Аргумент | Описание | Диапазон допустимых значений | Значение по умолчанию |
-w | Ширина | 0...макс | 1920 |
-h | Высота | 0...макс | 1080 |
-b | Битрейт видео | количество бит в секунду. 10Mbits/s задается -b 10000000 | |
-o | Имя файла | путь к файлу | - |
-v | Вывод в терминал | Информация о процессе захвата | |
-t | Задержка перед действием | в миллисекундах | 0 |
-fps | Фреймрейт | Количество кадров в секунду 2...30 | |
-k | Запуск/останов записи по нажатию Enter | процесс прерывается нажатием “X” | |
-sg | Сохранение отрезков видео с фиксированной продолжительностью в отдельные файлы | Задается длительность одного отрезка и маска файлов -sg 3000 -o video%04d.h264 | |
-wr | Ограничение максимального количества файлов при сегментации | Применяется с аргументом -sg и по сути реализует циклическую перезапись как в видеорегистраторах |
Рассмотрим конкретные примеры:
Запись 5-ти секундного стандартного видео (1920x1080, 30 кадров/сек) с сохранением в файл video.h264
raspivid -t 5000 -o video.h264
raspivid -t 5000 -o video.h264 -b 3500000
raspivid -t 5000 -o video.h264 -f 5
sudo apt-get install omxplayer #если плеер еще не установлен
omxplayer video.h264
Коды ошибок
- 0 - успешное завершение
- 64 - передана неверная команда (ошибка в синтаксисе)
- 70 - ошибка в утилите или при связи с камерой
- 130 - выполнение прервано пользователем (сочетанием клавиш Ctrl + C)
Библиотека PiCamera
Это библиотека для языка программирования Python позволяющая упростить и автоматизировать работу с камерой RaspberryПолное описание библиотеки на английском здесь на офф. сайте
В современных версиях дистрибутива Raspbian библиотека уже предустановлена, проверить это можно через консоль Python
python3
import picamera

exit()
sudo apt-get install python3-picamera
import picamera #импортируем библиотеку работы с камерой
camera = picamera.PiCamera() #создаем объект камеры
camera.capture('image.jpg') #вызываем у объекта камеры метод захвата изображения
camera.close() #закрываем сессию работы с камерой