mediapipe 解决方案::FaceDetection

Posted

技术标签:

【中文标题】mediapipe 解决方案::FaceDetection【英文标题】:mediapipe solution::FaceDetection 【发布时间】:2021-12-16 23:14:39 【问题描述】:

我想使用 mediapipe 人脸检测模块从原始图像和视频中裁剪人脸图像,以构建用于情感识别的数据集。

有没有办法从 mediapipe faceDetection 解决方案中获取边界框?

cap = cv2.VideoCapture(0)
with mp_face_detection.FaceDetection(
    model_selection=0, min_detection_confidence=0.5) as face_detection:
  while cap.isOpened():
    success, image = cap.read()
    if not success:
      print("Ignoring empty camera frame.")
      continue

    image.flags.writeable = False
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    results = face_detection.process(image)
    
    # Draw the face detection annotations on the image.
    image.flags.writeable = True
    image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
    if results.detections:
      for detection in results.detections:
        
        mp_drawing.draw_detection(image, detection)
        
        ## 
        '''
        
        #### here i want to grab the bounding box for the detected faces in order to crop the face image
        
        '''    
        ##
            
    cv2.imshow('MediaPipe Face Detection', cv2.flip(image, 1))
    if cv2.waitKey(5) & 0xFF == 27:
      break
cap.release()

谢谢

【问题讨论】:

我不确定下面是否值得作为答案,所以把它放在这里。 1. 检查什么是“检测”:github.com/google/mediapipe/blob/master/mediapipe/framework/… 2. 我相信你应该使用 location_data。它应该有“格式”,应该是“边界框”,然后应该填充“边界框”字段。 刚刚检查了我的假设,用 sn-p 作为答案发布。 【参考方案1】:

为了弄清楚格式,你可以遵循两种方法:

检查medipipe中的protobuf文件

    查看什么是“检测”:https://github.com/google/mediapipe/blob/master/mediapipe/framework/formats/detection.proto

    我们需要location_data。它应该有format字段,应该是BOUNDING_BOX,或者RELATIVE_BOUNDING_BOX(但实际上只有RELATIVE_BOUNDING_BOX)。

结帐drawing_utils 内容:

只需检查draw_detection 方法。您需要与cv2.rectangle call 保持一致

这是一个sn-p

    results = face_detection.process(image)

        # Draw the face detection annotations on the image.
        image.flags.writeable = True
        image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
        if results.detections:
            for detection in results.detections:
                draw_detection(image, detection)

                ##
                '''
        
                #### here i want to grab the bounding box for the detected faces in order to crop the face image
        
                '''
                ##
                location_data = detection.location_data
                if location_data.format == LocationData.RELATIVE_BOUNDING_BOX:
                    bb = location_data.relative_bounding_box
                    bb_box = [
                        bb.xmin, bb.ymin,
                        bb.width, bb.height,
                    ]

                    print(f"RBBox: bb_box")

【讨论】:

以上是关于mediapipe 解决方案::FaceDetection的主要内容,如果未能解决你的问题,请参考以下文章

Mediapipe的Unity实现

SignAll SDK:基于 MediaPipe 的手语接口现已开放

Mediapipe 跟踪 AAR 构建失败:按架构过滤 AAR 本机库失败

MediaPipe基础人脸网格

机器视觉Python+OpenCV+MediaPipe手势识别系统

机器视觉Python+OpenCV+MediaPipe实时人流检测