Доброго времени суток! На очереди третья часть цикла, посвященного работе с камерой на 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](https://microtechnics.ru/wp-content/uploads/2022/11/raspi-config.jpg)
“Legacy camera support”:
На этих незамысловатых действиях заканчиваем с подготовкой и переходим к практической деятельности. По прекрасной традиции пойдем по четким этапам и начнем в этот раз с захвата видео-потока с камеры. Но прежде пару слов об инициализации объекта камеры.
Инициализация.
Для любых манипуляций с камерой первично необходимо создать и проинициализировать нужный объект, создаем файл, к примеру, 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
, поэтому в итоге получим набор:
Каждый из них имеет длительность 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)
), при этом генерируя для каждого последующего файла уникальное имя. Смотрим на результат:
Получили набор изображений, которые были созданы с интервалом в 5 секунд (плюс-минус небольшая погрешность).
На самом деле, всевозможные режимы и настройки здорово описаны в официальной документации, я сознательно затронул только максимально базовые и наиболее популярные задачи, чтобы в случае необходимости открыть пост, найти конкретный случай, по-быстрому скопировать, запустить и далее уже развивать в соответствии со своей конкретной потребностью. Своего рода базовая-мини-памятка.
Периодически буду накидывать в статью еще какие-нибудь примеры, так что пишите в комментарии, какой функционал необходим. А на сегодня на этом заканчиваем, всех благодарю за внимание 🤝
Добрый день. Спасибо за детальное объяснение материала. Не могли бы Вы рассказать как на дисплее просмотреть параллельно записываемый видео. Заранее благодарью.
Приветствую! Посмотри тут - https://microtechnics.ru/sborka-libcamera-apps-iz-ishodnikov-i-primer-kastomizaczii/, там ближе у концу пример.
Спасибо!