Raspberry Pi: Работа с камерой

В этой статье мы расскажем вам как подключить внешнюю камеру к Raspberry Pi. А также как, написав небольшую программу на Python, делать фотографии, снимать видео и применять графические фильтры к изображениям.

Вы узнаете:

- Как правильно подключить камеру к Raspberry Pi;
- Как управлять камерой с помощью Python;
- Как использовать start_preview() и stop_preview() для вывода изображения с камеры;
- Как делать фотографии с помощью команды capture();
- Как записывать видео с помощью start_recording() и stop_recording();
- Как просматривать видео в программе omxplayer;
- Как изменять яркость и контраст на фотографиях, а также примернять визуальные эффекты.

Для повторения примеров из статьи вам понадобится камера "Camera Module" и одна из моделей Raspberry Pi.

Камера для Raspberry Pi

Вот так выглядит модуль камеры для Raspberry Pi, приступим к подключению.

Подключение

Первым делом отсоедините питание от Raspberry Pi, найдите на плате порт для подключения камеры и аккуратно потяните его вверх за боковые выступы. Верхняя часть разъема поднимется примерно на 2 миллиметра и немного отойдет в сторону.

Опустите край кабеля от камеры в открывшийся разъем так, чтобы синяя метка была со стороны аудио разъёма, а контакты смотрели на HDMI разъём. 

Аккуратно надавите на крышку разъёма для камеры и она закроется обратно. После подключения всё должно выглядеть как на фото:

Подключение камеры к разъёму на Raspberry Pi

Подключите питание, монитор, клавиатуру и мышка к Raspberry Pi и дождитесь пока система полностью загрузится. Из верхнего меню откройте основные настройки системы:

Меню Настройкаи системы

В появившемся окне перейдите во вкладку "Interfaces", выберите "Enabled" в строчке Camera и нажмите кнопку OK. После включения камеры система попросит ее перезагрузить. Перезагрузите систему. Теперь камера подключена, попробуем с ней поработать.

Просмотр изображения с камеры

Для начала работы с камерой вам необходимо запустить приложение Python 3.

Запускаем Python 3 для управления камерой

В открывшемся окне в меню выберите "New File" и скопируйте в него следующий код:

from picamera import PiCamera
from time import sleep

camera = PiCamera()

camera.start_preview()
sleep(10)
camera.stop_preview()

В начале этого примера мы подключаем библиотеки, необходимые для работы с камерой и временем, потом запускаем превью и через 10 секнд выключаем его.

В меню выберите "Save" (или нажмите Ctrl+S) и сохраните файл с именем camera.py в домашнюю директорию вашего пользователя (т.е. просто в ту папку, которую вам прелагает система).

Сохраняем первую программу

Для запуска программы нажимаем F5. Появится новое окно, в котором в течении следующих 10 секунд будет показано изображение с камеры. Если вы будете вращать камерой, то изображение будет двигаться. Получится примерно так:

Первое изображение с камеры Raspberry Pi

Обратите внимание на то, что изображение с камеры будет показываться на экране только если вы подключили монитор. Если вы работает удаленно через SSH или VNC, тогда вы его не увидите.

Вы можете поворачивать изображение с камеры на 90, 180 и 270 градусов. Если вам необходимо повернуть изображени, например, на 180 градусов, то перед запуском превью укажите camera.rotation = 180.

camera.rotation = 180
camera.start_preview()
sleep(10)
camera.stop_preview()

Также вы можете установить прозрачность картинки командой camera.start_preview(alpha=200). Переменная alpha обозначает степень прозрачности и может быть от 0 дл 255.

Делаем первую фотографию

Для того, чтобы сделать фотографию вам необходимо воспользоваться командой camera.capture(). Немного измените код программы:

camera.start_preview()
sleep(5)
camera.capture('/home/pi/Desktop/image.jpg')
camera.stop_preview()

Теперь ваша программа запускает превью, ждет 5 секунд, делает фото, сохраняет его на рабочий стол и закрывает превью. Между включением превью и захватом изображения нам необходимо подождать хотя бы 2 секунды, чтобы камера успела настроить уровень освещенности. 

Сохраняете изменения и запускаете программу, нажав F5. На экране появится превью, а через 5 секунд на рабочам столе появится файл image.jpg с вайшей фотографией. Дважды кликните по картинке и она откроется!

Take first photo

Теперь добавьте в программу цикл и запустите ее. Она откроет превью, сделает 5 фотографий с интервалом в 5 секунд и закроет превью.

camera.start_preview()
for i in range(5):
    sleep(5)
    camera.capture('/home/pi/Desktop/image%s.jpg' % i)
camera.stop_preview()

На рабочем столе появится 5 фотографий. В этом цикле переменная i менялась от 0 до 4, поэтому название первой фотографии будет image0.jpg.

Записываем видео

Для съёмки видео мы будем использовать команды начала и конца записи start_recording() and stop_recording(). Немного измените нашу программу:

camera.start_preview()
camera.start_recording('/home/pi/video.h264')
sleep(10)
camera.stop_recording()
camera.stop_preview()

Запустите код кнопкой F5. Программа запустит превью и начнет записывать видео. Через 10 секунд видео закончится и будет сохранено в файл video.h264 в корневую папку вашего пользователя /home/pi/. Для просмотра видео воспользуйтесь программой omxplayer.

Откройте программу Терминал, нажав на иконку в верхнем меню:

Запуск Терминала

По-умолчанию терминал открывается с локацией в домашней директории пользователя, поэтому для запуска видео вы можете просто ввести следующую команду и нажать Enter:

omxplayer video.h264

Откроется окно проигрывателя. Скорее всего видео будет проигрываться с более высокой скоростью, чем оно было записано, т.к. omxplayer использует большую частоту кадров.

Эффекты

Библиотека picamera для Python позволяет использовать большое количество настроект и фильтров, которые могут быть применены как к превью, так и к самой фотографии. Рассмотрим основные из них:

1. Изменение разрешения

По-умолчанию фотография делается такого разрешения, которое настроено на вашем мониторе, но вы можете его изменить с помощью команды camera.resolution(). Минимальное допустимое разрешение фотографий 64x64, а максимальное 2592x1944. Для видео оно составляет 1920x1080. Для использования максимального разрешения также необходимо будет уменьшить частоту кадров до 15 с помощью команды camera.framerate(). Для того чтобы сделать фотографию с максимальным разрешением добавьте следующие строчки перед запуском превью:

camera.resolution = (2592, 1944)
camera.framerate = 15

2. Добавление текста

Вы можете легко добавить поясняющий текст на фотографию, для этого используйте следующую команду после старта превью:

camera.annotate_text = "Hello world!"

Текст появится в верхней части фотографии. Для изменеия размера текста используйте команду camera.annotate_text_size. Размер текста можно изменять от 6 до 160, по-умолчанию используется 32.

Вы можете изменить цвет текста и фона за текстом. Для этого необходимо будет кроме PiCamera также импортировать Color

from picamera import PiCamera, Color

Для того, чтобы вывести желтый текст на синем фоне перед camera.annotate_text укажите следующий код:

camera.annotate_background = Color('blue')
camera.annotate_foreground = Color('yellow')

3. Настройка яркости и контраста

Вы можете настроить яркость на фотографии, установив ее от 0 до 100. По-умолчанию используется 50. Если вы хотите установить яркость, например, равной 70, то укажите следующий код после старта превью:

camera.brightness = 70

Для установки контраста используйте команду camera.contrast.

4. Визуальные эффекты

Вы можете использовать camera.image_effect для наложения большого числа различных визуальных эффетов: negative, solarize, sketch, denoise, emboss, oilpaint, hatch, gpen, pastel, watercolor, film, blur, saturation, colorswap, washedout, posterise, colorpoint, colorbalance, cartoon, deinterlace1, deinterlace2, none.

Чтобы применть эффект colorswap добавьте camera.image_effect = 'colorswap' после старта превью. С помощью следующей программы вы можете посмотреть все доступные фильтры. Код будет менять визуальные эффекты каждые 5 секунд:

camera.start_preview()
for effect in camera.IMAGE_EFFECTS:
    camera.image_effect = effect
    camera.annotate_text = "Effect: %s" % effect
    sleep(5)
camera.stop_preview()

В результате вы получите примерно вот такой набор изображений с фильтрами:

Применение различных фильтров библиотеки picamera

5. Баланс белого

Для регулировки баланса белого вы можете использовать команду camera.awb_mode и выбрать один из нескольких режимов: off, auto, sunlight, cloudy, shade, tungsten, fluorescent, incandescent, flash и horizon. По-умолчанию используется режим auto. Например, для режима sunlight вам необходимо добавить следующий код после начала превью:

camera.awb_mode = 'sunlight'

6. Экспозиция

Для выбора режима экспозиции воспользуйтесь командой camera.exposure_mode и выберите один из возможных режимов: off, auto, night, nightpreview, backlight, spotlight, sports, snow, beach, verylong, fixedfps, antishake и fireworks.

Полный список список функций и возможностей библиотеки picamera вы можете найти на официальном сайте.

Попробуйте сделать фотографии в разных режимах с применение различных фильтров. Это очень просто! В следующих статьях мы расскажем вам как сделать фотобудку для друзей или аппарат для съёмки мультиков!

Комментарии:

Похожие статьи: