Top.Mail.Ru

Python, picamera и Raspberry Pi 4 Model B – базовые примеры.

Доброго времени суток! На очереди третья часть цикла, посвященного работе с камерой на Raspberry Pi, встречаем привычных героев – High Quality Camera и Raspberry Pi 4 Model B. Ранее мы подробно прошлись по подключению и настройке модуля камеры, а также по использованию стека libcamera для решения разнообразных задач. А сегодня, опять же, как и планировалось, рассмотрим некоторые примеры использования камеры посредством python и пакета picamera.

Приступаем сходу к делу, и первым очевидным шагом будет установка необходимых пакетов.

Установка python picamera.

На самом деле, во многие актуальные официальные дистрибутивы пакет уже включен по умолчанию, если же нет, то установка осуществляется максимально просто:

sudo apt-get update
sudo apt-get install python-picamera python3-picamera

Альтернативный вариант:

sudo pip install picamera

Так же напоминаю, что для работы с picamera необходимо перейти на стек raspicam. Об этом мы говорили в предыдущей статье, но почему бы не повторить ) Итак, запускаем raspi-config:

sudo raspi-config

Раздел “Interface options”:

raspi-config

“Legacy camera support”:

Raspicam stack
Настройки камеры Raspberry Pi

На этих незамысловатых действиях заканчиваем с подготовкой и переходим к практической деятельности. По прекрасной традиции пойдем по четким этапам и начнем в этот раз с захвата видео-потока с камеры. Но прежде пару слов об инициализации объекта камеры.

Инициализация.

Для любых манипуляций с камерой первично необходимо создать и проинициализировать нужный объект, создаем файл, к примеру, camera_test.py:

from picamera import PiCamera

hqCamera = PiCamera(resolution=(1920, 1080), framerate=25)

В данном случае задаем разрешение 1920*1080 и fps 25. Аналогичного эффекта можно добиться чуть иначе, кому как по душе:

from picamera import PiCamera

hqCamera = PiCamera()
hqCamera.resolution = (1920, 1080)
hqCamera.framerate = 25

Picamera. Запись видео в файл.

Начнем с максимально базовой, а оттого и наиболее популярной, операции – записи видео с камеры в файл. Смотрим код, потом в случае необходимости разбираем подробно:

from picamera import PiCamera

hqCamera = PiCamera()
hqCamera.resolution = (1920, 1080)
hqCamera.framerate = 25

hqCamera.start_recording('my_python_video.h264')
hqCamera.wait_recording(5)
hqCamera.stop_recording()

Итак, инициализируем камеру, затем при помощи start_recording() начинаем запись. В качестве аргумента указано имя результирующего файла. wait_recording() – это банальная задержка на 5 секунд, в течение которой запись продолжается. По истечению 5-ти секунд останавливаем запись при помощи stop_recording(). Запускаем на исполнение:

python camera_test.py

И закономерным итогом будет сохраненный файл my_python_video.h264 продолжительностью 5 секунд. Для просмотра можно использовать любой проигрыватель:

vlc my_python_video.h264

Я лично использую mpv, просто больше нравится:

mpv my_python_video.h264

Отличная опция, зачастую крайне полезная – разбить видео-поток на несколько итоговых видео-файлов:

from picamera import PiCamera

hqCamera = PiCamera()
hqCamera.resolution = (1920, 1080)
hqCamera.framerate = 25

hqCamera.start_recording('my_python_video_0.h264')
hqCamera.wait_recording(5)

for i in range(1, 8):
    hqCamera.split_recording('my_python_video_%d.h264' % i)
    hqCamera.wait_recording(5)
	
hqCamera.stop_recording()

Относительно предыдущего варианта использования здесь у нас добавляется вызов функции split_recording() с аргументом в виде требуемого имени файла. Указывая в качестве этого аргумента 'my_python_video_%d.h264' % i мы обеспечиваем у выходных файлов разные имена. Вместо %d будет подставлено значение переменной i, поэтому в итоге получим набор:

Raspberry Pi PiCamera python

Каждый из них имеет длительность 5 секунд, поскольку мы использовали wait_recording(5).

Picamera. Захват изображений.

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

from picamera import PiCamera
import time

hqCamera = PiCamera()
hqCamera.resolution = (1920, 1080)

hqCamera.start_preview()
time.sleep(5)
hqCamera.capture('my_python_image.jpg')

Здесь мы последовательно – запускаем превью, ожидаем 5 секунд и сохраняем изображение с камеры в файл my_python_image.jpg. Максимально быстро и просто, описывать здесь абсолютно нечего. В данном случае размер получаемого файла будет соответствовать разрешению, указанному при инициализации камеры - resolution = (1920, 1080). В случае необходимости можно указать иное значение:

import time
from picamera import PiCamera

hqCamera = PiCamera()
hqCamera.resolution = (1920, 1080)

hqCamera.start_preview()
time.sleep(5)
hqCamera.capture('my_python_image_720.jpg', resize=(1280, 720))

И еще один базовый вариант использования пакета picamera – последовательное сохранение изображений с камеры через некий интервал времени:

from picamera import PiCamera
from time import sleep

hqCamera = PiCamera()
hqCamera.resolution = (1920, 1080)

hqCamera.start_preview()
hqCamera(5)

for image in hqCamera.capture_continuous('my_python_image{counter:02d}.jpg'):
    sleep(5)

Ключевую работу производит функция capture_continuous(), которая сохраняет изображения каждые 5 секунд (sleep(5)), при этом генерируя для каждого последующего файла уникальное имя. Смотрим на результат:

Python picamera example

Получили набор изображений, которые были созданы с интервалом в 5 секунд (плюс-минус небольшая погрешность).

На самом деле, всевозможные режимы и настройки здорово описаны в официальной документации, я сознательно затронул только максимально базовые и наиболее популярные задачи, чтобы в случае необходимости открыть пост, найти конкретный случай, по-быстрому скопировать, запустить и далее уже развивать в соответствии со своей конкретной потребностью. Своего рода базовая-мини-памятка.

Периодически буду накидывать в статью еще какие-нибудь примеры, так что пишите в комментарии, какой функционал необходим. А на сегодня на этом заканчиваем, всех благодарю за внимание 🤝

Подписаться
Уведомить о
guest

3 комментариев
Старые
Новые
Межтекстовые Отзывы
Посмотреть все комментарии
Меружан
3 месяцев назад

Добрый день. Спасибо за детальное объяснение материала. Не могли бы Вы рассказать как на дисплее просмотреть параллельно записываемый видео. Заранее благодарью.

Меружан
Ответ на комментарий  Aveal
3 месяцев назад

Спасибо!

3
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x