Камера для Raspberry Pi

Компактный камерный модуль для Raspberry Pi.

Вторая версия модуля оснащена восьмимегапиксельным сенсором Sony IMX219 Exmor. Он позволяет захватывать, записывать и транслировать видео в форматах 1080p, 720p и VGA. Максимальное разрешение для фотографий достигает 3280×2464 пикселей.

Модуль подключается в CSI-порт на Raspberry Pi — он не нагружает процессор, как это делают внешние камеры и не занимает дефицитные USB-порты.

Видеообзор

Подключение камеры

  1. Отключите Raspberry Pi от питания.
  2. Вставьте шлейф камеры в разъём с подписью CAMERA.

    Обратите внимание, цветовой ключ на шлейфе должен оказаться со стороны Ethernet-разъёма.

  3. Подключите монитор к Raspbery Pi через HDMI-разъём.
  4. Включите Raspberry Pi.
  5. После загрузки ОС Raspbian зайдите в меню конфигурации параметров Raspberry Pi:
    Preferences Raspberry Pi Configuration
  6. Перейдите на вкладку Interfaces и переключите радиокнопку Camera в положение Enabled.
  7. Сохраните изменения кнопкой OK и перезагрузите Raspberry Pi.

Примеры работы с камерой

Камера подключена и настроена, теперь можно проверить её возможности. Самый простой путь — использовать интегрированную среду разработки (IDLE) для языка Python 3. Эта среда входит в состав ОС Raspbian.

Проверим сигнал камеры

  1. Запустите IDLE войдя в главное меню и выбрав пункты Programming Python 3 (IDLE)
  2. Создайте новый файл и сохраните его с именем camera.py.

    Не сохраняйте файл под именем picamera.py. Это название зарезервировано для системного файла, если его перезаписать — камера не будет работать.

  3. Введите следующий код
    camera.py
    from picamera import PiCamera
    from time import sleep
     
    camera = PiCamera()
     
    # Запускаем предпросмотр сигнала с камеры на экране поверх всех окон
    camera.start_preview()
     
    # 10 секунд смотрим на экран
    sleep(10)
     
    # Выключаем предпросмотр
    camera.stop_preview()


  4. Сохраните файл комбинацией клавиш Ctrl + S и запустите его выполнение нажав F5. На десять секунд на экране появится изображение с камеры.

Ваша камера исправна, правильно подключена и готова к работе!

Сделаем фотографию

Изменим код предыдущего примера, чтобы сохранить фотографию с камеры в файл.

  1. Уменьшите время ожидания следующей команды с 10 до 3 секунд. Для этого измените параметр функции sleep. Не уменьшайте его меньше 2 секунд — камере необходима пауза между включением и выполнением снимка. За это время модуль автоматически скорректирует баланс белого и экспозицию.
  2. Перед последней строкой добавьте функцию camera.capture и укажите путь по которому будет находится наша фотография. У вас должен получиться следующий код:
    camera.py
    from picamera import PiCamera
    from time import sleep
     
    camera = PiCamera()
     
    # Запускаем предпросмотр сигнала с камеры на экране поверх всех окон
    camera.start_preview()
     
    # Даём камере три секунды на автофокусировку и установку баланса белого
    sleep(3)
     
    # Делаем снимок и сохраняем его на рабочий стол с именем image.jpg
    camera.capture('/home/pi/Desktop/image.jpg')
     
    # Выключаем режим предпросмотра
    camera.stop_preview()


  3. Сохраните файл и запустите его. В результате его выполнения на рабочем столе появится фотография с камеры.

Запишем видео

Теперь попробуем использовать модуль в режиме видеокамеры — снимем минутный ролик и сохраним его на рабочий стол. Для этого изменим код из предыдущего примера.

  1. Замените функцию capture() на функции start_recording() и stop_recording() — для начала и окончания записи.
  2. Длину ролика можно задать с помощью параметра функции sleep, как мы это делали в предыдущих примерах. Но мы рекомендуем использовать метод camera.wait_recording — он отслеживает и обрабатывает ошибки записи. Ваш код будет таким:
    camera.py
    from picamera import PiCamera
    from time import sleep
     
    camera = PiCamera()
     
    # Запускаем предпросмотр сигнала с камеры на экране поверх всех окон
    camera.start_preview()
     
    # Начинаем запись видеофайла
    camera.start_recording('/home/pi/video.h264')
     
    # Минуту пишем потоковое видео
    camera.wait_recording(60)
     
    # Останавливаем запись
    camera.stop_recording()
     
    # Выключаем предпросмотр
    camera.stop_preview()

Проверить записанное видео проще всего через встроенный OMXplayer. Откройте терминал и запустите видео командой:

omxplayer video.h264

Видео может проигрываться несколько быстрее, чем было записано — это связано с настройками OMXplayer.

Перенастроим разрешение, частоту кадров и режим баланса белого

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

camera.py
from time import sleep
from picamera import PiCamera
 
camera = PiCamera()
 
# Зададим разрешение камеры — 1024 пикселя по ширине и 768 по высоте
camera.resolution = (1024, 768)
 
# Зададим частоту кадров
camera.framerate = 25
 
# Переключим баланс белого из режима авто в профиль естественного освещения
camera.awb_mode = 'sunlight'
 
# Запустим запись видео в файл с разрешением камеры
camera.start_recording('highres.h264')
 
# Запустим запись во второй файл с меньшим разрешением — 320 пикселей по ширине и 240 по высоте.
# Одновременно мы можем работать с 4 потоками. Номер потока (от 0 до 3) определяется в splitter_port
camera.start_recording('lowres.h264', splitter_port=2, resize=(320, 240))
 
# Запишем минуту видео
camera.wait_recording(60)
 
# Остановим запись файлов
camera.stop_recording(splitter_port=2)
camera.stop_recording()

Характеристики

  • Тип сенсора: Sony IMX 219 PQ CMOS, ¼ дюйма
  • Максимальное разрешение: 8 Мп (3280×2464)
  • Поддерживаемые видеоформаты: 1080p (30fps), 720p (60fps), 640×480p (90fps)
  • Эквивалентное фокусное расстояние: 33 мм
  • Светосила объектива: f/2
  • Размеры: 2592×1944
  • Вес: 3 г

Режимы работы сенсора

На аппаратном уровне модуль работает в одном из семи режимов.

# Разрешение Соотношение сторон Частота кадров Использование сенсора
1 1920×1080 16:9 0.1–30fps частичное
2 3280×2464 4:3 0.1–15fps полное
3 3280×2464 4:3 0.1–15fps полное
4 1640×1232 4:3 0.1–40fps полное
5 1640×922 16:9 0.1–40fps частичное
6 1280×720 16:9 40–60fps частичное
7 640×480 4:3 40–90fps частичное

На схеме показана площадь сенсора, которая используется в каждом режиме.

Другие разрешения получаются масштабированием и обрезкой одного из этих режимов.

Покажем как это выглядит на практике. Все снимки сделаны с одно точки, изменялось только разрешение камеры.

Ресурсы