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

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

```
sudo raspi-config
```

![](https://2542517100-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M27OPqz2FqsvuWyC0Y0%2F-M28AwzPVH5KVfYQYG7t%2F-M28BMM9IrWNOb3GlopM%2F017.png?alt=media\&token=f3e05896-ce09-4b69-bdba-0792e2012106)

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

![](https://2542517100-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M27OPqz2FqsvuWyC0Y0%2F-M28CEPddY38TGYE71R-%2F-M28CaOzaaOhDsRmpW1n%2F018.png?alt=media\&token=01e5342d-6581-400f-a896-2c351d4964b0)

&#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.** На экране должен отобразиться видеопоток с камеры:

![](https://2542517100-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M27OPqz2FqsvuWyC0Y0%2F-M28CcRFBxmlVzgQXK0l%2F-M28DIqCLK3qjODCwMn0%2F019.png?alt=media\&token=ef2d3d41-661b-4069-bdf9-5776d51574aa)
