0 实验题目

在输入视频中跟踪人脸,设计一个视频人脸检测系统,能够分割出多个人脸。

1 实验步骤

1.1 使用opencv人脸分类器

  1. classfier = cv2.CascadeClassifier("/Users/longfeifei/Downloads/Python/Day09/haarcascade/haarcascade_frontalface_alt.xml")

1.2 对每一帧视频框出人脸

  1. while cap.isOpened():
  2. ok, frame = cap.read() # 读取一帧数据
  3. if not ok:
  4. break
  5. grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 将当前桢图像转换成灰度图像
  6. # 人脸检测,1.2和2分别为图片缩放比例和需要检测的有效点数
  7. faceRects = classfier.detectMultiScale(grey, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
  8. if len(faceRects) > 0: # 大于0则检测到人脸
  9. for faceRect in faceRects: # 单独框出每一张人脸
  10. x, y, w, h = faceRect
  11. # 画出矩形框
  12. cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 2)

1.3 显示识别跟踪结果

  1. cv2.imshow(window_name, frame)
  2. c = cv2.waitKey(10)

此次实验系统设计思路较为简单,系统概括为:
读取视频 -> 使用分类器检测 —> 得出每一帧结果 ->显示框选跟踪结果

2 实验结果

本次实验我选择了两个个跟踪难度不同的视频作为素材,分别导入设计的系统之中。

实验一:《克拉恋人》片段

素材特点:人物简单,但动作幅度较大,景别变化快
效果截图:
WX20200525-222116@2x.pngWX20200525-221955@2x.pngWX20200525-221733@2x.png

实验二:《如懿传》众妃群像选段

素材特点:人物复杂度极高,且画面景别变化快。

WX20200525-222748@2x.pngWX20200525-222741@2x.pngWX20200525-222729@2x.pngWX20200525-222718@2x.png