Подключение и настройка различных типов камер для Raspberry Pi. От модулей до USB-веб-камер
В ходе экспериментов были протестированы четыре типа камер: оригинальный модуль Raspberry Pi Camera Rev 1.3 (сенсор OV5647), модуль IMX219 (8 Мп), альтернативный модуль OV5647 и USB-веб-камера Canyon CNR-FWC120FH. Статья систематизирует опыт подключения, настройки и тестирования каждого типа камеры, а также содержит практические рекомендации по выбору камеры для различных задач.
Подключение и настройка различных типов камер для Raspberry Pi: от модулей до USB-веб-камер
Введение
В ходе экспериментов были протестированы четыре типа камер: оригинальный модуль Raspberry Pi Camera Rev 1.3 (сенсор OV5647), модуль IMX219 (8 Мп), альтернативный модуль OV5647 и USB-веб-камера Canyon CNR-FWC120FH. Статья систематизирует опыт подключения, настройки и тестирования каждого типа камеры, а также содержит практические рекомендации по выбору камеры для различных задач.
Оригинальный модуль Raspberry Pi Camera Rev 1.3
Технические характеристики
| Параметр | Значение |
|---|---|
| Сенсор | OmniVision OV5647 |
| Разрешение | 5 Мп (2592 x 1944) |
| Видео | 1080p при 30 fps, 720p при 60 fps, 640x480 до 90 fps |
| Угол обзора | ~65 градусов |
| Фокусное расстояние | 3.6 мм |
| Диафрагма | F/2.8–F/2.9 |
| Глубина резкости | От 1 метра до бесконечности |
| Интерфейс | CSI (Camera Serial Interface) |
| Совместимость | Полная, оригинальный модуль Raspberry Pi |
Подключение
Модуль подключается через разъем CSI на плате Raspberry Pi. Шлейф вставляется контактами в сторону разъема. На Pi Zero разъем находится рядом с USB-портом.
Настройка
В современных версиях Raspberry Pi OS (Bookworm и новее) автодетект камер включен по умолчанию. Для проверки используется команда:
1
rpicam-hello --list-cameras
Если камера не определяется, необходимо отключить автодетект и вручную указать драйвер в файле /boot/firmware/config.txt:
1
2
camera_auto_detect=0
dtoverlay=ov5647
Тестирование
Для захвата тестового снимка:
1
rpicam-still -o test_original.jpg
Для снимка в полном разрешении с максимальным качеством:
1
rpicam-still -o test_original_full.jpg --width 2592 --height 1944 --quality 100
Для просмотра доступных режимов:
1
rpicam-hello --list-cameras
Особенности
Глубина резкости начинается от 1 метра, что делает камеру непригодной для предметной съемки на близких расстояниях. Объекты ближе 70 см будут нерезкими. Для макросъемки требуется использование макро-насадок.
Модуль IMX219 (8 Мп)
Технические характеристики
| Параметр | Значение |
|---|---|
| Сенсор | Sony IMX219 |
| Разрешение | 8 Мп (3280 x 2464) |
| Видео | 1080p при 30 fps, 720p при 60 fps |
| Угол обзора | ~120–160 градусов (зависит от объектива) |
| Размер пикселя | 1.12 µm |
| Интерфейс | CSI (Camera Serial Interface) |
| Совместимость | Требует ручной настройки для сторонних модулей |
Подключение
Подключение осуществляется через тот же разъем CSI. Шлейф вставляется контактами в сторону разъема. На Pi Zero требуется аккуратность из-за хрупкости разъема.
Настройка
Сторонние модули IMX219 часто требуют ручной настройки. В файле /boot/firmware/config.txt необходимо указать:
1
2
camera_auto_detect=0
dtoverlay=imx219
В некоторых случаях помогает указание порта:
1
dtoverlay=imx219,cam0
Тестирование
Для проверки работы:
1
2
rpicam-hello --list-cameras
rpicam-still -o test_imx219.jpg
Особенности
Модуль IMX219 отличается широким углом обзора, что создает эффект “рыбьего глаза”. Для предметной съемки требуется программная коррекция дисторсии через OpenCV или кадрирование центральной части изображения. Качество изображения незначительно выше оригинального модуля OV5647.
Типичные проблемы и решения
Проблема: Модуль IMX219 не определяется командой rpicam-hello --list-cameras.
Решение: Проверить физическое подключение. Для сторонних модулей отключить автодетект и вручную указать dtoverlay=imx219 в /boot/firmware/config.txt. Убедиться, что шлейф вставлен правильно и не поврежден.
Проблема: Сильный эффект “рыбьего глаза” при съемке.
Решение: Это особенность широкоугольного объектива. Для коррекции используется OpenCV с функцией cv2.undistort(), или кадрирование центральной части изображения.
Альтернативный модуль OV5647 (SHCHV)
Технические характеристики
| Параметр | Значение |
|---|---|
| Сенсор | OmniVision OV5647 |
| Разрешение | 5 Мп (2592 x 1944) |
| Видео | 1080p при 30 fps, 720p при 60 fps |
| Угол обзора | ~72 градуса (стандартный объектив) |
| Интерфейс | CSI (Camera Serial Interface) |
| Совместимость | Требует ручной настройки для сторонних модулей |
Подключение
Подключение аналогично оригинальному модулю через разъем CSI.
Настройка
Для сторонних модулей OV5647 требуется ручная настройка в /boot/firmware/config.txt:
1
2
camera_auto_detect=0
dtoverlay=ov5647
Тестирование
Тестирование выполняется командами:
1
2
rpicam-hello --list-cameras
rpicam-still -o test_ov5647.jpg
Особенности
По характеристикам идентичен оригинальному модулю Raspberry Pi Camera Rev 1.3. Качество изображения и глубина резкости совпадают. Основное отличие — качество сборки и оптики, что может незначительно влиять на резкость и цветопередачу.
Типичные проблемы и решения
Проблема: Камера не определяется, хотя драйвер указан.
Решение: Проверить физическое подключение шлейфа. Убедиться, что в config.txt нет конфликтующих параметров. Попробовать указать порт: dtoverlay=ov5647,cam0.
Проблема: Некорректная цветопередача (синеватый оттенок).
Решение: Проблема часто связана с автоматическим балансом белого (AWB) при смешанном освещении. В скрипте можно принудительно установить режим баланса белого: picam2.set_controls({"AwbMode": 5}). Режим 5 соответствует дневному свету.
USB-веб-камера Canyon CNR-FWC120FH
Технические характеристики
| Параметр | Значение |
|---|---|
| Матрица | 2 Мп, CMOS |
| Разрешение видео | 1920 x 1080 при 30 fps |
| Интерфейс | USB 2.0, UVC (Plug-and-Play) |
| Фокусировка | Ручная |
| Угол обзора | ~45 градусов |
| Микрофон | Встроенный |
| Особенности | Крепление на монитор, кнопка для фото |
Подключение
USB-камера подключается через USB-порт. На Pi Zero рекомендуется использовать USB-хаб с внешним питанием, так как ток по USB ограничен.
Настройка
Для проверки определения камеры используется команда:
1
lsusb
Для определения назначенного видео-устройства:
1
ls /dev/video*
Камера обычно получает имя /dev/video0.
Установка ПО
Для тестирования USB-камер удобно использовать утилиту fswebcam:
1
2
sudo apt update
sudo apt install fswebcam -y
Тестирование
Для захвата тестового снимка:
1
fswebcam -r 1920x1080 --no-banner test_usb.jpg
Для сохранения с максимальным качеством JPEG:
1
fswebcam -r 1920x1080 --no-banner --jpeg 100 test_usb.jpg
Особенности
Ключевая особенность камеры — наличие ручной фокусировки. Кольцо на объективе позволяет настраивать резкость для конкретного расстояния до объекта, что делает камеру более гибкой для предметной съемки по сравнению с модульными камерами с фиксированным фокусом. Качество изображения уступает профессиональным веб-камерам: наблюдается меньшая детализация и легкая “мыльность” по краям кадра. Угол обзора около 45 градусов, что относительно узко.
Типичные проблемы и решения
Проблема: USB-камера не определяется командой ls /dev/video*.
Решение: Проверить подключение через хаб (особенно на Pi Zero). Убедиться, что камера поддерживает стандарт UVC. Попробовать подключить камеру напрямую (без хаба). При подключении нескольких камер имя устройства может отличаться.
Проблема: Камера сильно греется при длительной работе. Решение: Некоторые модели USB-камер (включая Canyon CNR-FWC120FH) могут перегреваться, что приводит к ухудшению качества изображения. Рекомендуется делать паузы в съемке или обеспечить дополнительное охлаждение.
Проблема: Изображение нерезкое. Решение: Для камер с ручной фокусировкой требуется настройка кольца объектива под конкретное расстояние до объекта. При изменении дистанции фокус необходимо корректировать заново.
Дополнительные возможности по тестированию на Python
Для универсальной работы с модульными камерами (CSI) используется библиотека Picamera2. Базовый скрипт для захвата и сохранения снимка:
1
2
3
4
5
6
7
8
9
10
11
from picamera2 import Picamera2
picam2 = Picamera2()
camera_config = picam2.create_preview_configuration(
main={"size": (2592, 1944), "format": "RGB888"}
)
picam2.configure(camera_config)
picam2.start()
picam2.capture_file("photo.jpg")
picam2.stop()
Скрипт для работы с модульной камерой и вывода на экран ILI9341 (при наличии дисплея):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import board
import digitalio
from adafruit_rgb_display import ili9341
from picamera2 import Picamera2
from PIL import Image
spi = board.SPI()
cs = digitalio.DigitalInOut(board.D8)
dc = digitalio.DigitalInOut(board.D25)
rst = digitalio.DigitalInOut(board.D24)
display = ili9341.ILI9341(spi, cs=cs, dc=dc, rst=rst)
picam2 = Picamera2()
camera_config = picam2.create_preview_configuration(
main={"size": (240, 320), "format": "RGB888"}
)
picam2.configure(camera_config)
picam2.start()
while True:
frame = picam2.capture_array()
img = Image.fromarray(frame)
display.image(img)
Для коррекции эффекта “рыбьего глаза” на модуле IMX219 используется OpenCV:
1
2
3
4
5
6
7
8
import cv2
import numpy as np
# Параметры коррекции дисторсии
K = np.array([[150, 0, 120], [0, 200, 160], [0, 0, 1]])
D = np.array([-0.3, 0.1, 0, 0])
frame_corrected = cv2.undistort(frame, K, D, None, new_camera_matrix)
Для USB-камер захват видео в реальном времени выполняется через OpenCV:
1
2
3
4
5
6
7
8
9
10
11
import cv2
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if ret:
cv2.imshow('USB Camera', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Типичные проблемы и решения
Проблема: При компиляции драйвера fbcp-ili9341 возникает ошибка fatal error: bcm_host.h: No such file or directory.
Решение: Ошибка возникает на новых версиях ОС (Bookworm и новее), где пакет libraspberrypi-dev удален. Драйвер fbcp-ili9341 требует старый стек DispmanX, который больше не поддерживается. Для работы с дисплеем в новых версиях ОС рекомендуется использовать альтернативные драйверы или Python-скрипты напрямую.
Проблема: Модуль IMX219 создает сильный эффект “рыбьего глаза”.
Решение: Это особенность широкоугольного объектива. Коррекция выполняется программно с использованием OpenCV (функция cv2.undistort()) или кадрированием центральной части изображения. Для предметной съемки предпочтительнее использовать камеры с ручной фокусировкой.
Проблема: USB-камера не определяется командой ls /dev/video*.
Решение: Проверить подключение через хаб (особенно на Pi Zero). Убедиться, что камера поддерживает стандарт UVC. При подключении нескольких камер имя устройства может отличаться.
Проблема: Некорректная цветопередача (синеватый или фиолетовый оттенок).
Решение: Проблема связана с автоматическим балансом белого (AWB) при смешанном освещении. Для исправления в скрипте можно принудительно установить режим баланса белого: picam2.set_controls({"AwbMode": 5}). Режим 5 соответствует дневному свету. Для USB-камер баланс белого настраивается через параметры V4L2.
Проблема: Модульные камеры не фокусируются на близких объектах. Решение: Глубина резкости модульных камер начинается от 1 метра. Для макросъемки требуется использование макро-насадок или замена объектива на модулях со сменной оптикой. Альтернативно, использовать USB-камеры с ручной фокусировкой.
Проблема: USB-камера сильно греется при длительной работе. Решение: Некоторые модели USB-камер (включая Canyon CNR-FWC120FH) могут перегреваться, что приводит к ухудшению качества изображения. Рекомендуется делать паузы в съемке или обеспечить дополнительное охлаждение.
Заключение
Эксперименты с четырьмя типами камер показали, что выбор камеры для Raspberry Pi зависит от конкретной задачи. Модульные камеры через CSI-интерфейс обеспечивают высокую скорость передачи данных и аппаратное ускорение, но имеют фиксированный фокус и ограниченную глубину резкости. Это делает их непригодными для предметной съемки на близких расстояниях без использования макро-насадок. USB-веб-камеры уступают по скорости и качеству из-за ограничений интерфейса, но наличие ручной фокусировки делает их более гибкими для работы с объектами на разном расстоянии. Для учебных задач по компьютерному зрению и детекции объектов подходят любые камеры, однако для качественной предметной съемки предпочтительнее USB-камера с ручной фокусировкой или модульный модуль со сменной оптикой и последующей программной коррекцией дисторсии.







