使用OpenCV使用dlib的面部界标检测器计算面数

时间:2018-02-05 19:53:36

标签: python-3.x opencv

基本上我正在编写的代码需要在每帧计算的值前面添加一个字符串

例如:

面部1 :(眼睛纵横比),(嘴长宽比)

面部2 :(眼睛// //),(// // //)

......依此类推,取决于使用dlib预测器找到的面数。

此处所需的字符串是“Face1:” |||| “Face2:” ...已找到其他值

以下是代码:

# Start capturing WebCam
#cap = cv2.VideoCapture(0)
framecount = 0

while True:
     ret, frame = cap.read()
     framecount += 1
     frame = imutils.resize(frame, width = 1500)

     if ret:
         gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
         rects = detector(gray, 0)

         for rect in rects:
             x = rect.left()
             y = rect.top()
             x1 = rect.right() - x
             y1 = rect.bottom() - y

             landmarks = np.matrix([[p.x, p.y] for p in predictor(frame, rect).parts()])

             left_eye = landmarks[LEFT_EYE_POINTS]
             right_eye = landmarks[RIGHT_EYE_POINTS]

             inner_mouth = landmarks[MOUTH_INNER_POINTS]
             outer_mouth = landmarks[MOUTH_OUTLINE_POINTS]

             left_eye_hull = cv2.convexHull(left_eye)
             right_eye_hull = cv2.convexHull(right_eye)
             inner_mouth_hull = cv2.convexHull(inner_mouth)
             outer_mouth_hull = cv2.convexHull(outer_mouth)

             # drawing the contours on frame
             cv2.drawContours(frame, [left_eye_hull], -1, (0, 255, 0), 1)
             cv2.drawContours(frame, [right_eye_hull], -1, (0, 255, 0), 1)

             # Eye aspect ratio and Mouth aspect ratio
             ear_left = eye_aspect_ratio(left_eye)
             ear_right = eye_aspect_ratio(right_eye)
             MAR = mouth_aspect_ratio(inner_mouth)

             ## This part below:
             print(framecount," {:.2f}".format(ear_left), " {:.2f}".format(MAR))


             print("Number of faces: ", len(rects))

第一个打印功能将打印出视频帧并显示眼睛纵横比和嘴宽高比。如果有多个面部,它将重复帧数不止一次,但会有不同的值。

所以,它做了我需要做的事情,但是我想在每个值之前添加一个名字。

第二个打印功能显示视频中存在的面部数量,在我的情况下,它显示三个面部的数字3。

输出示例:

Output example

使用枚举输出的示例:

Output example enum

0 个答案:

没有答案