在计算机视觉领域,人脸关键点检测是一项重要的技术,它涉及到识别和定位面部的重要区域,如嘴巴、眼睛、眉毛、鼻子和下颌线等。本文将探讨如何利用OpenCV和MediaPipe这两个强大的工具来实现这一功能,并分析其在多个领域的应用价值。
OpenCV是一个跨平台的开源库,专注于计算机视觉、机器学习和图像处理。它被广泛用于图像或视频处理以及分析,包括目标检测、面部检测等。通过OpenCV,可以开发实时的计算机视觉应用程序。
人脸关键点技术在多个领域有着广泛的应用,以下是一些主要的应用场景:
MediaPipe Face Mesh能够实时估计468个3D人脸关键点,甚至在移动设备上也能实现。它只需要一个单一的相机输入,通过应用机器学习(ML)来推断3D表面几何形状,无需专用的深度传感器。MediaPipe Face Mesh提供了更好的实时性能。
3D人脸关键点模型采用了迁移学习技术,在网络上训练,目标是预测合成渲染数据上的3D关键点坐标。该网络在真实世界数据上表现良好。模型输入为裁剪过的视频帧,无需额外的深度输入,模型输出为3D点的位置,合理地对齐在输入中。
几何管道是一个关键组件,它在3D度量空间内估计面部几何对象。在每一帧上,依次执行以下步骤:
首先,需要检查网络摄像头是否工作正常,并在输出屏幕上打印每秒帧数(fps)。
import cv2
import time
cap = cv2.VideoCapture(0)
pTime = 0
while True:
success, img = cap.read()
imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
cTime = time.time()
fps = 1/(cTime-pTime)
pTime = cTime
cv2.putText(img, f'FPS:{int(fps)}', (20, 70), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
cv2.imshow("Test", img)
cv2.waitKey(1)
如果一切正常,将打开一个窗口。如果没有网络摄像头,可以在‘VideoCapture’函数中指定视频路径。在窗口的左上角,可以看到fps(变化)。
现在,让创建一个新的Python文件,并开始创建面部关键点检测模块。
# 安装所需模块
- pip install opencv-python
- pip install mediapipe
import cv2
import mediapipe as mp
import time
cap = cv2.VideoCapture(0)
pTime = 0
NUM_FACE = 2
mpDraw = mp.solutions.drawing_utils
mpFaceMesh = mp.solutions.face_mesh
faceMesh = mpFaceMesh.FaceMesh(max_num_faces=NUM_FACE)
drawSpec = mpDraw.DrawingSpec(thickness=1, circle_radius=1)
while True:
success, img = cap.read()
imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
results = faceMesh.process(imgRGB)
if results.multi_face_landmarks:
for faceLms in results.multi_face_landmarks:
mpDraw.draw_landmarks(img, faceLms, mpFaceMesh.FACE_CONNECTIONS, drawSpec, drawSpec)