一、人脸检测脚本
mediapipe人脸检测相关python脚本 ”face_boxes.py“ 如下:
import cv2
import mediapipe as mp
if __name__ == '__main__':
# 初始化 MediaPipe 的人脸网格模块
mp_face_mesh = mp.solutions.face_mesh
mp_drawing = mp.solutions.drawing_utils
# 设置绘图样式
drawing_spec = mp_drawing.DrawingSpec(thickness=1, circle_radius=1)
# 打开摄像头
cap = cv2.VideoCapture("test.mp4")
# face_mesh = mp_face_mesh.FaceMesh(static_image_mode=True, max_num_faces=1, min_detection_confidence=0.5, min_tracking_confidence=0.5)
# 创建人脸网格检测器
with mp_face_mesh.FaceMesh(
static_image_mode=True,
max_num_faces=3, # 检测人脸数设置
refine_landmarks=True, # 精细地标检测
min_detection_confidence=0.35, # 最小检测置信度
min_tracking_confidence=0.25 # 最小跟踪置信度
) as face_mesh:
while cap.isOpened():
success, image = cap.read()
if not success:
print("Ignoring empty camera frame.")
continue
# 将图像从 BGR 转换为 RGB
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
image.flags.writeable = False
# 使用人脸网格模型处理图像
results = face_mesh.process(image)
# 将图像标记为可写
image.flags.writeable = True
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,
connections=mp_face_mesh.FACEMESH_TESSELATION,
landmark_drawing_spec=drawing_spec,
connection_drawing_spec=mp_drawing.DrawingSpec(color=(255, 0, 0), thickness=1)
)
# 显示图像
cv2.namedWindow("Face_Landmarks",0)
cv2.imshow('Face_Landmarks', image)
# 按下 ESC 键退出
if cv2.waitKey(1) & 0xFF == 27:
break
# 释放摄像头并关闭窗口
cap.release()
cv2.destroyAllWindows()
二、pyinstaller打包编译python脚本
pyinstaller ./face_boxes.py
三、mediapipe\modules 依赖文件操作(否则运行exe程序会闪退)
并将mediapipe\modules 放到 dist\face_boxes\_internal\mediapipe ,如下图。
四、运行exe程序
结果如下: