MediaPipe - 02.人脸识别

本系列文章介绍各类图像识别的使用方法,运用这些技巧采集更多的原始数据,训练我们的AI模型。本系列文章要有Python和OpenCV基础。

人脸识别

MediaPipe的人脸识别功能是很强大的,除了一般人脸识别,还可以人脸三维重建。这节我们只介绍一般人脸识别。

MediaPipe的人脸识别会找出图片中人脸的6个关键点,2个眼睛,2个耳朵,鼻子和嘴巴。这些关键点将有助于我们对人脸进行下一步的操作。比如,加个眼镜等。


人脸识别程序

这个程序将从一张照片中识别出人脸,并把每个人脸在图片中的范围和6个关键点标注出来。mp.solutions.drawing_utils是MediaPipe内置的,强大的绘制工具。

import cv2
import mediapipe as mp
  
  
if __name__ == '__main__':
  
    mp_face_detection = mp.solutions.face_detection
    mp_drawing = mp.solutions.drawing_utils
              
    with mp_face_detection.FaceDetection(min_detection_confidence=0.5) as face_detection:
        img=cv2.imread("faces.png")
          
        img = cv2.flip(img,1)
        imgrgb = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
  
        results = face_detection.process(imgrgb)
  
        img1 = img.copy()
          
        if results.detections:         
            for fid,detection in enumerate(results.detections):
                box = detection.location_data.relative_bounding_box
                ih,iw,ic = img.shape
                bbox = [int(box.xmin*iw),int(box.ymin*ih),int(box.width*iw),int(box.height*ih)]
                print(fid,bbox)
                  
                print("RIGHT_EYE:",mp_face_detection.get_key_point(detection,mp_face_detection.FaceKeyPoint.RIGHT_EYE))
                print("LEFT_EYE:",mp_face_detection.get_key_point(detection,mp_face_detection.FaceKeyPoint.LEFT_EYE))
                print("NOSE_TIP:",mp_face_detection.get_key_point(detection,mp_face_detection.FaceKeyPoint.NOSE_TIP))
                print("MOUTH_CENTER:",mp_face_detection.get_key_point(detection,mp_face_detection.FaceKeyPoint.MOUTH_CENTER))
                print("RIGHT_EAR_TRAGION:",mp_face_detection.get_key_point(detection,mp_face_detection.FaceKeyPoint.RIGHT_EAR_TRAGION))
                print("LEFT_EAR_TRAGION:",mp_face_detection.get_key_point(detection,mp_face_detection.FaceKeyPoint.LEFT_EAR_TRAGION))
                mp_drawing.draw_detection(img1,detection)  
              
        cv2.imshow('img',img1)

运行结果