上学期的嵌入式系统设计实践课上用树莓派做了一个简单的视频采集系统,能自适应识别摄像头的分辨率和帧率以及人脸检测。(题外话:树莓派真的还挺好玩的)
概述
该视频采集系统包含的功能有:
仪器与开发环境
硬件:
- 树莓派开发板组件1套
- 显示屏幕1块
- 摄像头2个(不同分辨率的)
- 网线1根
开发平台:
开发语言:
整体方案
- 使用USB接口的摄像头采集视频数据;
- 使用python和openCV对视频进行处理,实现自适应识别摄像头的分辨率和帧率以及人脸检测;
- 通过HDMI接口连接到树莓派屏幕上进行实时视频显示。
实现
import cv2
cap = cv2.VideoCapture(0)
faceCascade=cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml')
cap.set(cv2.CAP_PROP_FRAME_WIDTH,10000)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,10000)
if cap.isOpened:
while True:
ret,frame = cap.read()
width = cap.get(3)
height = cap.get(4)
speed = cap.get(5)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(
gray,
scaleFactor=1.2,
minNeighbors=5,
minSize=(20, 20)
)
for (x,y,w,h) in faces:
cv2.rectangle(frame, (x,y), (x+w,y+h), (255,0,0),2)
text = "resolution:" + str(width) + "*" + str(height) + ",speed:" + str(speed)
cv2.putText(frame, text, (5, 20), cv2.FONT_HERSHEY_COMPLEX, 0.8, (0, 0, 0), 1)
cv2.namedWindow("Video", 0)
cv2.imshow("Video", frame)
input = cv2.waitKey(int(1/speed*1000))
if input==ord('q'):
break
else:
print("Can't open the camera!")
cap.release()
cv2.destroyAllWindows()
|