先给你结论:用 libcamera 原生接口 + Python 是最稳最快的方式,OpenCV/FFmpeg 都可以作为上层处理工具,但原型阶段优先用 picamera2(libcamera 的 Python 封装)。
在 Raspberry Pi OS (64-bit) 下,先确保驱动和库都装好:
sudo apt update && sudo apt upgrade -y
sudo apt install -y python3-picamera2 python3-libcamera python3-opencv
libcamera-hello
如果能弹出预览窗口,说明摄像头和驱动工作正常✅
这是最直接的原型代码,完全满足你 “1 秒取一帧” 的需求:
import time
from picamera2 import Picamera2
import cv2
picam2 = Picamera2()
picam2.configure(picam2.create_still_configuration(main={"size": (1920, 1080)}))
picam2.start()
try:
while True:
frame = picam2.capture_array()
cv2.imwrite(f"screen_capture_{int(time.time())}.jpg", frame)
print(f"已保存截图: screen_capture_{int(time.time())}.jpg")
time.sleep(1)
finally:
picam2.stop()
picam2.capture_array() 直接返回 numpy.ndarray,可以无缝对接 OpenCV 做识别
- 1 秒 1 帧的延迟完全可控,树莓派 5 性能足够轻松处理
- 不需要额外配置,烧录好官方系统后直接跑
如果后续要做实时识别,也可以用 OpenCV 直接读取摄像头流:
import cv2
import time
cap = cv2.VideoCapture(0, cv2.CAP_V4L2)
if not cap.isOpened():
print("无法打开摄像头")
exit()
try:
while True:
ret, frame = cap.read()
if not ret:
print("无法获取帧")
break
cv2.imwrite(f"opencv_capture_{int(time.time())}.jpg", frame)
time.sleep(1)
finally:
cap.release()
cv2.destroyAllWindows()
- 分辨率:1080p (1920×1080) 足够识别屏幕文字,4K 会浪费算力
- 对焦:Camera Module 3 是电动对焦,可在代码里用
picam2.set_controls({"AfMode": 2, "AfTrigger": 0}) 触发自动对焦,保证屏幕清晰
- 性能:1 秒 1 帧对树莓派 5 来说毫无压力,CPU 占用极低
- 冲突:和 CH9729 键鼠控制器完全无冲突,可同时运行 Python 脚本控制两者
原型阶段直接用 picamera2 + OpenCV 的组合:
- 先用
picamera2 实现 1 秒 1 帧截屏,验证摄像头和存储功能
- 再把
capture_array() 拿到的帧传给 OpenCV,做屏幕模板匹配 / 文字识别
- 最后对接 CH9729 控制另一台电脑,完成 RPA 闭环
要不要我帮你把这段代码改成带屏幕模板匹配的 RPA 原型?比如识别屏幕上的某个按钮,然后触发 CH9729 模拟鼠标点击。