当前位置: 首页 > news >正文

【Python-MediaPipe 0.10.31】新版使用技巧-人脸坐标

MediaPipe-python库封装使用函数

MediaPipe更新后,旧版本的语句无法使用,于是笔者网罗资源(实际上是榨干AI),拼凑了人脸坐标的使用方法。

旧版本代码代码如下:
引用其他博主代码(已在代码块中注明

importcv2importmediapipeasmp mp_face_mesh=mp.solutions.face_mesh mp_draw=mp.solutions.drawing_utils face_mesh=mp_face_mesh.FaceMesh()cap=cv2.VideoCapture(0)whilecap.isOpened():success,frame=cap.read()ifnotsuccess:continueframe_rgb=cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)results=face_mesh.process(frame_rgb)ifresults.multi_face_landmarks:forface_landmarksinresults.multi_face_landmarks:mp_draw.draw_landmarks(frame,face_landmarks)cv2.imshow('MediaPipe Face Mesh',frame)ifcv2.waitKey(1)&0xFF==ord('q'):breakcap.release()cv2.destroyAllWindows()———————————————— 版权声明:本文为CSDN博主「萧鼎」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/liaoqingjian/article/details/145708736

新版本(0.10.31)代码如下:

需要配合一个face_landmarker.task文件使用,可以在文章顶部的face.zip里解压

importnumpyasnpimportcv2importmediapipeasmp MEDIAPIPE_MODEL_PATH="./models/face_landmarker.task"# 坐标模型加载自动化defload_mediapipe_model():try:mp_vision=mp.tasks.vision base_options=mp.tasks.BaseOptions(model_asset_path=MEDIAPIPE_MODEL_PATH)options=mp_vision.FaceLandmarkerOptions(base_options=base_options,running_mode=mp_vision.RunningMode.IMAGE,num_faces=1,output_face_blendshapes=False)returnmp_vision.FaceLandmarker.create_from_options(options)exceptExceptionase:raiseRuntimeError(f"加载MediaPipe模型失败:{e}")# 获取人脸坐标点468个点defget_mediapipe_468_points(img,mp_detector):img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)mp_img=mp.Image(image_format=mp.ImageFormat.SRGB,data=img_rgb)results=mp_detector.detect(mp_img)ifnotresults.face_landmarks:returnNoneimg_h,img_w=img.shape[:2]returnnp.array([[int(lm.x*img_w),int(lm.y*img_h)]forlminresults.face_landmarks[0]])# 绘图defdraw_landmarks(img,points):""" 绘制所有关键点+数字编号(避免重叠) :param img: 原始OpenCV图像 :param points: (len(points),2)的关键点坐标数组 :return: 绘制后的图像 """img_copy=img.copy()# 遍历所有81个点foridxinrange(len(points)):p=points[idx].astype(int)# 绘制关键点圆圈(绿色,半径2)cv2.circle(img_copy,(p[0],p[1]),2,(0,255,0),-1)# 调整数字标注位置,避免重叠(根据点的位置微调偏移)offset_x=3ifidx%2==0else-15# 奇偶点左右偏移offset_y=5ifidx<40else-8# 上下部分上下偏移# 绘制数字编号(白色字体,黑色描边增加可读性)# 黑色描边# cv2.putText(img_copy, str(idx), (p[0]+offset_x, p[1]+offset_y),# cv2.FONT_HERSHEY_SIMPLEX, 0.35, (0, 0, 0), 2)# # 白色字体# cv2.putText(img_copy, str(idx), (p[0]+offset_x, p[1]+offset_y),# cv2.FONT_HERSHEY_SIMPLEX, 0.35, (255, 255, 255), 1)returnimg_copy# main模式if__name__=='__main__':# 读取图像img_path='your_img.jpg'img=cv2.imread(img_path)ifimgisNone:raiseValueError(f"图片读取失败:{img_path}")# 加载模型mp_detector=load_mediapipe_model()# 获取人脸坐标mp_468=get_mediapipe_468_points(img,mp_detector)# 绘制人脸坐标fromvisiual_utilsimportdraw_landmarksifmp_468isnotNone:img_point=draw_landmarks(img,mp_468)cv2.imwrite('output.jpg',img_point)# 释放资源mp_detector.close()

原图:

得到结果图如下:

最后附上一张坐标点分布图

http://www.jsqmd.com/news/243879/

相关文章:

  • .NET MVC中如何支持工程建筑行业的大文件夹上传与目录结构?
  • 导师推荐!专科生必备!8款AI论文平台测评TOP8
  • 强烈安利9个一键生成论文工具,本科生搞定毕业论文不求人!
  • 中小企业福音,快速部署的PHP进销存系统,一步迈入高效管理
  • C#代码示例:如何在网页上实现机械制造行业的大文件秒传?
  • AI编辑器trae的solo模式是什么?
  • C++构造函数中慎用虚函数
  • 如何在.NET WebForm中实现能源化工行业的大文件分片断点续传?
  • 融媒体中心三审三校的必要性,为什么?
  • JDK17 前后写法对比:差点没认出是 Java
  • ROS2开发
  • 信创环境下XHEDITOR怎样处理Word公式粘贴兼容性问题?
  • 解读GB/T4857.23-2021 医疗器械运输包装振动测试意义
  • 教室照明如何影响学生视力健康与学习效率?
  • 金融风控平台怎样将Excel公式转存为XHEDITOR可编辑格式?
  • XHEDITOR前端如何兼容Word公式跨浏览器粘贴?
  • 军工系统如何通过XHEDITOR实现Word公式安全导入?
  • 【VTK手册041】切片抽取工具:vtkCutter原理解析
  • 【VTK 手册040】vtkPlane 详解:原理、用法与源码剖析
  • 手把手拆解旅行搭子Pro:基于Astron的Agent工作流实战
  • 亲测好用!10款AI论文平台测评:研究生开题报告神器
  • 导师严选9个AI论文软件,助你轻松搞定本科生毕业论文!
  • 国联股份董事、高级副总裁王挺一行赴宣城国控集团参观考察并签署战略合作协议
  • c++泛型编程之Typelists
  • 深圳金鑫磁材|深圳纳米晶磁芯:氢能退火、再生金属,碳中和实践
  • 飞书多维表格工作流指南(AI日报小助手)
  • MBA必备10个降AIGC工具,高效避坑指南!
  • 吴忠羽球新势力!金牌教练韩宁波:用专业点燃你的赛场梦想
  • .NET Core中如何实现航空航天领域的大文件分段上传与续传?
  • 2026大模型智能体(Agent)面试全攻略