> For the complete documentation index, see [llms.txt](https://copter-space.gitbook.io/uchebnik-mashinnoe-zrenie-tom-2/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://copter-space.gitbook.io/uchebnik-mashinnoe-zrenie-tom-2/razdel-3/poluchenie-i-obrabotka-izobrazheniya-s-kamery-raspberry-pi.md).

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

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

```
sudo raspi-config
```

![](/files/-M28BMM9IrWNOb3GlopM)

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

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

В Питоне 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. Если всё выполнено правильно – на экране отобразится изображение с камеры:

![](/files/-M28CaOzaaOhDsRmpW1n)

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

```
# 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
```

&#x20;Код нужно вписать в файл **test\_video.py** и запустить с помощью команды **python test\_video.py.** На экране должен отобразиться видеопоток с камеры:

![](/files/-M28DIqCLK3qjODCwMn0)
