AI模型-mediapipe面部识别
该代码示例演示了使用MediaPipe实现面部关键点检测。通过初始化FaceMesh模型处理输入图像,获取面部468个关键点坐标,并重点标注眼部、嘴巴和鼻子区域的关键点。代码首先将图像转换为RGB格式,然后通过FaceMesh模型提取面部特征点,最后在图像上用不同颜色标记出眼睛、嘴巴和鼻子等关键区域。该基础实现可用于后续动作识别开发,如通过分析关键点间距离变化来判断头部动作等。
·
代码示例
import cv2
import numpy as np
import mediapipe as mp
from scipy.spatial import distance as dist
import config
# 初始化mediapipe
mp_face_mesh = mp.solutions.face_mesh
# 创建mediapipe实例
face_mesh = mp_face_mesh.FaceMesh(
max_num_faces=1,
refine_landmarks=True,
min_detection_confidence=0.5,
min_tracking_confidence=0.5
)
# 读取图片
img = cv2.imread("img.png")
# 转换为RGB
img1 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 处理图片
results = face_mesh.process(img1)
# print(results.multi_face_landmarks[0].landmark)
# 获取图片大小
h, w = img1.shape[:2]
# 获取关键点坐标xy
points = []
for landmark in results.multi_face_landmarks[0].landmark:
x = int(landmark.x * w)
y = int(landmark.y * h)
points.append((x, y))
# print( points)
# 定义面部关键点索引
# 左眼
LEFT_EYE_INDICES = [33, 7, 163, 144, 145, 153, 154, 155, 133, 173, 157, 158, 159, 160, 161, 246]
# 右眼
RIGHT_EYE_INDICES = [362, 382, 381, 380, 374, 373, 390, 249, 263, 466, 388, 387, 386, 385, 384, 398]
# 嘴巴
MOUTH_INDICES = [61, 185, 40, 39, 37, 0, 267, 269, 270, 409, 291, 375, 321, 405, 314, 17, 84, 181, 91, 146]
# 鼻子,点头用的到,根据鼻尖和嘴巴的距离
nose_indices = [1, 168, 197, 195, 5, 4]
# 绘制关键点
for i in LEFT_EYE_INDICES:
cv2.circle(img, points[i], 2, (0, 255, 0), -1)
for i in RIGHT_EYE_INDICES:
cv2.circle(img, points[i], 2, (0, 255, 0), -1)
for i in MOUTH_INDICES:
cv2.circle(img, points[i], 2, (0, 255, 0), -1)
for i in nose_indices:
cv2.circle(img, points[i], 2, (255, 0, 0), -1)
cv2.imshow("img", img)
cv2.waitKey(0)
简单的识别,然后绘画关键点,至于动作就是根据关键点之间的距离判断,记得做一个变量,如果一直是同一个距离就是不重复叠加,当距离不满足再复位,具体代码目前没时间写
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)