全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 触控感测 >

如何试用MediaPipe实现人脸3D点云数据提取

时间:2023-02-23 17:47

人气:

作者:admin

导读:如何试用MediaPipe实现人脸3D点云数据提取-本文介绍如何试用MediaPipe实现人脸3D点云数据提取,提取的数据为人脸468点位。...

模型与流程

上一篇文章介绍了MediaPipe中手势关键点检测与简单的手势识别,本文介绍如何试用MediaPipe实现人脸3D点云数据提取,提取的数据为人脸468点位。

整个流程如下:

1661d8f8-ae19-11ed-bfe3-dac502259ad0.png

167856dc-ae19-11ed-bfe3-dac502259ad0.png

16d3d890-ae19-11ed-bfe3-dac502259ad0.png

输的468点是3D坐标,值在0~1之间,其中z表示深度,Python函数支持下面的参数配置:

max_num_faces 默认为1,表示支持最大人脸检测数目
min_detection_confidence 最小检测置信度,默认0.5
min_tracking_confidence 最小跟踪置信度,默认0.5

人脸3D点云提取

基于MediaPipe的python版本函数,在官方教程的基础上,我稍微修改了一下,代码如下:

import cv2
import mediapipe as mp
mp_drawing = mp.solutions.drawing_utils
mp_face_mesh = mp.solutions.face_mesh


# For webcam input:
drawing_spec = mp_drawing.DrawingSpec(thickness=1, circle_radius=1)
cap = cv2.VideoCapture("D:/images/video/face_mesh.mp4")
with mp_face_mesh.FaceMesh(
    max_num_faces=4,
    min_detection_confidence=0.5,
    min_tracking_confidence=0.5) as face_mesh:
  while cap.isOpened():
    success, frame = cap.read()
    if not success:
      print("Ignoring empty camera frame.")
      # If loading a video, use 'break' instead of 'continue'.
      break

    h, w, c = frame.shape
    image = cv2.resize(frame, (w //2, h//2))
    # To improve performance, optionally mark the image as not writeable to
    # pass by reference.
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    results = face_mesh.process(image)

    # Draw the face mesh annotations on the image.
    image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
    if results.multi_face_landmarks:
      for face_landmarks in results.multi_face_landmarks:
        mp_drawing.draw_landmarks(
            image=image,
            landmark_list=face_landmarks)
        mp_drawing.draw_landmarks(
            image=image,
            landmark_list=face_landmarks)
        mp_drawing.draw_landmarks(
            image=image,
            landmark_list=face_landmarks
        )
    # Flip the image horizontally for a selfie-view display.
    cv2.imshow('MediaPipe Face Mesh', image)
    if cv2.waitKey(5) & 0xFF == 27:
      break
cap.release()

运行结果如下:

170c6ca0-ae19-11ed-bfe3-dac502259ad0.png

编辑:黄飞

 

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信