0 实验题目
在输入视频中跟踪人脸,设计一个视频人脸检测系统,能够分割出多个人脸。
1 实验步骤
1.1 使用opencv人脸分类器
classfier = cv2.CascadeClassifier("/Users/longfeifei/Downloads/Python/Day09/haarcascade/haarcascade_frontalface_alt.xml")
1.2 对每一帧视频框出人脸
while cap.isOpened():
ok, frame = cap.read() # 读取一帧数据
if not ok:
break
grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 将当前桢图像转换成灰度图像
# 人脸检测,1.2和2分别为图片缩放比例和需要检测的有效点数
faceRects = classfier.detectMultiScale(grey, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
if len(faceRects) > 0: # 大于0则检测到人脸
for faceRect in faceRects: # 单独框出每一张人脸
x, y, w, h = faceRect
# 画出矩形框
cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 2)
1.3 显示识别跟踪结果
cv2.imshow(window_name, frame)
c = cv2.waitKey(10)
此次实验系统设计思路较为简单,系统概括为:
读取视频 -> 使用分类器检测 —> 得出每一帧结果 ->显示框选跟踪结果
2 实验结果
本次实验我选择了两个个跟踪难度不同的视频作为素材,分别导入设计的系统之中。
实验一:《克拉恋人》片段
素材特点:人物简单,但动作幅度较大,景别变化快
效果截图:
实验二:《如懿传》众妃群像选段
素材特点:人物复杂度极高,且画面景别变化快。