本文记录课程设计使用的 Raspberry Pi OS 与 OpenCV 环境。2023 年环境使用 Legacy Camera 和 cv2.VideoCapture(0);较新的 Raspberry Pi OS 通常采用 libcamera 或 Picamera2,应按当前系统版本调整。

返回项目 005 · 硬件组装与镜像烧录 · 检测、训练与识别

1、更新系统

1
2
sudo apt update
sudo apt upgrade

更新前确认网络稳定,并预留足够的 TF 卡空间。

2、安装项目依赖

课程环境使用系统包安装 OpenCV:

1
sudo apt install python3-opencv python3-pip python3-pil python3-numpy

检查 Python、OpenCV 和 cv2.face

1
python3 -c "import cv2; print(cv2.__version__); print(hasattr(cv2, 'face'))"

如果 cv2.faceFalse,说明当前 OpenCV 构建不包含 contrib 模块,需要根据系统架构安装包含 opencv_contrib 的版本。不要同时混用多套 apt、全局 pip 和虚拟环境包,否则很容易出现导入路径冲突。

课程设备性能有限,代码编辑使用 Thonny、系统文本编辑器或 SSH 即可,无需在树莓派上运行较重的 IDE。

3、启用并确认摄像头

2023 年课程环境通过:

1
sudo raspi-config

进入 Interface Options,启用当时系统提供的 Legacy Camera,然后重启。

新系统如果没有该选项,应使用 Raspberry Pi 官方相机栈测试,不需要寻找并强行恢复旧菜单。

4、OpenCV 相机测试

新建 test_camera.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import cv2

camera = cv2.VideoCapture(0)
camera.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

if not camera.isOpened():
raise RuntimeError("Camera could not be opened")

while True:
ok, frame = camera.read()
if not ok:
print("Failed to read a frame")
break

cv2.imshow("camera-test", frame)
if cv2.waitKey(1) & 0xFF == ord("q"):
break

camera.release()
cv2.destroyAllWindows()

运行:

1
python3 test_camera.py

正常读取画面后按 q 退出。

5、常见问题

现象 优先检查
无法打开摄像头 排线方向、接口卡扣、系统相机栈、设备节点
有设备但没有画面 是否被其他程序占用、分辨率、供电
cv2.face 不存在 OpenCV 是否包含 contrib 模块
图形窗口无法显示 是否在无桌面的 SSH 会话、DISPLAY 配置
安装包互相冲突 python3 -m pip show 与系统包来源

相机测试通过后,再进入检测、训练与识别