Получение и обработка изображения с камеры Raspberry PI

Для получения и обработки изображений Raspberry с камеры PI предназначен модуль picamera. На новой Raspberry PI первым делом необходимо включить камеру с помощью команды:

sudo raspi-config

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

Сделать фотографию можно с помощью команды raspistill -o myphoto.jpg. Данная команда активирует модуль камеры Raspberry PI, показывает окно предпросмотра, и через несколько секунд записывает изображение в указанный файл (myphoto.jpg) в текущем рабочем каталоге. Для использования камеры в программе на Питоне нужно выполнить установку модуля picamera с помощью команды pip install "picamera[array]". Стандартный модуль picamera предоставляет методы для управления камерой, но нам также нужен опциональный подмодуль array для использования функций OpenCV.

В Питоне OpenCV представляет изображения в виде массивов NumPy – подмодуль array позволяет получать NumPy массивы из камеры raspberry PI. Рассмотрим пример программы test_image.py:

# coding=UTF-8
# импорт необходимых пакетов
from picamera.array import PiRGBArray
from picamera import PiCamera
import time
import cv2

# инициализация объекта для захвата картинки
camera = PiCamera()
rawCapture = PiRGBArray(camera)

# «прогрев» камеры
time.sleep(0.1)

# получаем изображение с камеры
camera.capture(rawCapture, format="bgr")
image = rawCapture.array

# отображаем картинку на экране и ждём нажатия любой клавиши
cv2.imshow("Image", image)
cv2.waitKey(0)

Код можно вписать в любой текстовый редактор, и выполнить с помощью команды python test_image.py. Если всё выполнено правильно – на экране отобразится изображение с камеры:

Теперь рассмотрим программу для обработки видеопотока с камеры.

# coding=UTF-8
# импорт необходимых пакетов
from picamera.array import PiRGBArray
from picamera import PiCamera
import time
import cv2

# инициализация объекта захвата
camera = PiCamera()
camera.resolution = (640, 480)
camera.framerate = 32
rawCapture = PiRGBArray(camera, size=(640, 480))

# «прогрев» камеры
time.sleep(0.1)

# получаем кадр от камеры
for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
 
 # получаем кадр с камеры
 image = frame.array
 
 # отображаем кадр на экране
 cv2.imshow("Frame", image)
 key = cv2.waitKey(1) & 0xFF
 
 # очищаем поток для следующего кадра
 rawCapture.truncate(0)
 
 # по клавише `q` выходим из цикла
 if key == ord("q"):
 break

Код нужно вписать в файл test_video.py и запустить с помощью команды python test_video.py. На экране должен отобразиться видеопоток с камеры:

Last updated