opencvmediapipe 人脸检测+摄像头实时

article/2025/11/7 5:45:51

文章目录

    • 单张人脸关键点检测
    • 单张图像人脸检测
    • 摄像头实时关键点检测

单张人脸关键点检测

定义可视化图像函数
导入三维人脸关键点检测模型
导入可视化函数和可视化样式
读取图像
将图像模型输入,获取预测结果
BGR转RGB
将RGB图像输入模型,获取预测结果
预测人人脸个数
可视化人脸关键点检测效果
绘制人来脸和重点区域轮廓线,返回annotated_image
绘制人脸轮廓、眼睫毛、眼眶、嘴唇
在三维坐标中分别可视化人脸网格、轮廓、瞳孔

import cv2 as cv
import  mediapipe as mp
from tqdm import tqdm
import time
import  matplotlib.pyplot as plt# 定义可视化图像函数
def look_img(img):img_RGB=cv.cvtColor(img,cv.COLOR_BGR2RGB)plt.imshow(img_RGB)plt.show()# 导入三维人脸关键点检测模型
mp_face_mesh=mp.solutions.face_mesh
# help(mp_face_mesh.FaceMesh)model=mp_face_mesh.FaceMesh(static_image_mode=True,#TRUE:静态图片/False:摄像头实时读取refine_landmarks=True,#使用Attention Mesh模型min_detection_confidence=0.5, #置信度阈值,越接近1越准min_tracking_confidence=0.5,#追踪阈值
)# 导入可视化函数和可视化样式
mp_drawing=mp.solutions.drawing_utils
mp_drawing_styles=mp.solutions.drawing_styles# 读取图像img=cv.imread('img.png')# look_img(img)# 将图像模型输入,获取预测结果# BGR转RGB
img_RGB=cv.cvtColor(img,cv.COLOR_BGR2RGB)# 将RGB图像输入模型,获取预测结果results=model.process(img_RGB)
# 预测人人脸个数
len(results.multi_face_landmarks)print(len(results.multi_face_landmarks))# 结果:1# 可视化人脸关键点检测效果# 绘制人来脸和重点区域轮廓线,返回annotated_image
annotated_image=img.copy()
if results.multi_face_landmarks: #如果检测出人脸for face_landmarks in results.multi_face_landmarks:#遍历每一张脸#绘制人脸网格mp_drawing.draw_landmarks(image=annotated_image,landmark_list=face_landmarks,connections=mp_face_mesh.FACEMESH_TESSELATION,#landmark_drawing_spec为关键点可视化样式,None为默认样式(不显示关键点)# landmark_drawing_spec=mp_drawing_styles.DrawingSpec(thickness=1,circle_radius=2,color=[66,77,229]),landmark_drawing_spec=None,connection_drawing_spec=mp_drawing_styles.get_default_face_mesh_tesselation_style())#绘制人脸轮廓、眼睫毛、眼眶、嘴唇mp_drawing.draw_landmarks(image=annotated_image,landmark_list=face_landmarks,connections=mp_face_mesh.FACEMESH_CONTOURS,# landmark_drawing_spec为关键点可视化样式,None为默认样式(不显示关键点)# landmark_drawing_spec=mp_drawing_styles.DrawingSpec(thickness=1,circle_radius=2,color=[66,77,229]),landmark_drawing_spec=None,connection_drawing_spec=mp_drawing_styles.get_default_face_mesh_tesselation_style())#绘制瞳孔区域mp_drawing.draw_landmarks(image=annotated_image,landmark_list=face_landmarks,connections=mp_face_mesh.FACEMESH_IRISES,# landmark_drawing_spec为关键点可视化样式,None为默认样式(不显示关键点)landmark_drawing_spec=mp_drawing_styles.DrawingSpec(thickness=1,circle_radius=2,color=[128,256,229]),# landmark_drawing_spec=None,connection_drawing_spec=mp_drawing_styles.get_default_face_mesh_tesselation_style())cv.imwrite('test.jpg',annotated_image)
look_img(annotated_image)
# 在三维坐标中分别可视化人脸网格、轮廓、瞳孔
mp_drawing.plot_landmarks(results.multi_face_landmarks[0],mp_face_mesh.FACEMESH_TESSELATION)
mp_drawing.plot_landmarks(results.multi_face_landmarks[0],mp_face_mesh.FACEMESH_CONTOURS)
mp_drawing.plot_landmarks(results.multi_face_landmarks[0],mp_face_mesh.FACEMESH_IRISES)

请添加图片描述
请添加图片描述
请添加图片描述

单张图像人脸检测

可以通过调用open3d实现3d模型建立,部分代码与上面类似

import cv2 as cv
import  mediapipe as mp
import numpy as np
from tqdm import tqdm
import time
import  matplotlib.pyplot as plt# 定义可视化图像函数
def look_img(img):img_RGB=cv.cvtColor(img,cv.COLOR_BGR2RGB)plt.imshow(img_RGB)plt.show()# 导入三维人脸关键点检测模型
mp_face_mesh=mp.solutions.face_mesh
# help(mp_face_mesh.FaceMesh)model=mp_face_mesh.FaceMesh(static_image_mode=True,#TRUE:静态图片/False:摄像头实时读取refine_landmarks=True,#使用Attention Mesh模型max_num_faces=40,min_detection_confidence=0.2, #置信度阈值,越接近1越准min_tracking_confidence=0.5,#追踪阈值
)# 导入可视化函数和可视化样式
mp_drawing=mp.solutions.drawing_utils
# mp_drawing_styles=mp.solutions.drawing_styles
draw_spec=mp_drawing.DrawingSpec(thickness=2,circle_radius=1,color=[223,155,6])
# 读取图像img=cv.imread('../人脸三维关键点检测/dkx.jpg')
# width=img1.shape[1]
# height=img1.shape[0]
# img=cv.resize(img1,(width*10,height*10))
# look_img(img)# 将图像模型输入,获取预测结果# BGR转RGB
img_RGB=cv.cvtColor(img,cv.COLOR_BGR2RGB)# 将RGB图像输入模型,获取预测结果results=model.process(img_RGB)
# # 预测人人脸个数
# len(results.multi_face_landmarks)
#
# print(len(results.multi_face_landmarks))if results.multi_face_landmarks:for face_landmarks  in results.multi_face_landmarks:mp_drawing.draw_landmarks(image=img,landmark_list=face_landmarks,connections=mp_face_mesh.FACEMESH_CONTOURS,landmark_drawing_spec=draw_spec,connection_drawing_spec=draw_spec)
else:print('未检测出人脸')
look_img(img)
mp_drawing.plot_landmarks(results.multi_face_landmarks[0],mp_face_mesh.FACEMESH_TESSELATION)
mp_drawing.plot_landmarks(results.multi_face_landmarks[1],mp_face_mesh.FACEMESH_CONTOURS)
mp_drawing.plot_landmarks(results.multi_face_landmarks[1],mp_face_mesh.FACEMESH_IRISES)# 交互式三维可视化
coords=np.array(results.multi_face_landmarks[0].landmark)
# print(len(coords))
# print(coords)def get_x(each):return each.x
def get_y(each):return each.y
def get_z(each):return each.z# 分别获取所有关键点的XYZ坐标points_x=np.array(list(map(get_x,coords)))
points_y=np.array(list(map(get_y,coords)))
points_z=np.array(list(map(get_z,coords)))# 将三个方向的坐标合并
points=np.vstack((points_x,points_y,points_z)).T
print(points.shape)import open3d
point_cloud=open3d.geometry.PointCloud()
point_cloud.points=open3d.utility.Vector3dVector(points)
open3d.visualization.draw_geometries([point_cloud])

请添加图片描述
这是建立的3d的可视化模型,可以通过鼠标拖动将其旋转

摄像头实时关键点检测

定义可视化图像函数
导入三维人脸关键点检测模型
导入可视化函数和可视化样式
读取单帧函数
主要代码和上面的图像类似

import cv2 as cv
import  mediapipe as mp
from tqdm import tqdm
import time
import  matplotlib.pyplot as plt# 导入三维人脸关键点检测模型
mp_face_mesh=mp.solutions.face_mesh
# help(mp_face_mesh.FaceMesh)model=mp_face_mesh.FaceMesh(static_image_mode=False,#TRUE:静态图片/False:摄像头实时读取refine_landmarks=True,#使用Attention Mesh模型max_num_faces=5,#最多检测几张人脸min_detection_confidence=0.5, #置信度阈值,越接近1越准min_tracking_confidence=0.5,#追踪阈值
)# 导入可视化函数和可视化样式
mp_drawing=mp.solutions.drawing_utils
mp_drawing_styles=mp.solutions.drawing_styles# 处理单帧的函数def process_frame(img):#记录该帧处理的开始时间start_time=time.time()img_RGB=cv.cvtColor(img,cv.COLOR_BGR2RGB)results=model.process(img_RGB)if results.multi_face_landmarks:for face_landmarks in results.multi_face_landmarks:# mp_drawing.draw_detection(#  image=img,# landmarks_list=face_landmarks,# connections=mp_face_mesh.FACEMESH_TESSELATION,# landmarks_drawing_spec=None,# landmarks_drawing_spec=mp_drawing_styles.get_default_face_mesh_tesselation_style()# )# 绘制人脸网格mp_drawing.draw_landmarks(image=img,landmark_list=face_landmarks,connections=mp_face_mesh.FACEMESH_TESSELATION,# landmark_drawing_spec为关键点可视化样式,None为默认样式(不显示关键点)# landmark_drawing_spec=mp_drawing_styles.DrawingSpec(thickness=1,circle_radius=2,color=[66,77,229]),landmark_drawing_spec=None,connection_drawing_spec=mp_drawing_styles.get_default_face_mesh_tesselation_style())# 绘制人脸轮廓、眼睫毛、眼眶、嘴唇mp_drawing.draw_landmarks(image=img,landmark_list=face_landmarks,connections=mp_face_mesh.FACEMESH_CONTOURS,# landmark_drawing_spec为关键点可视化样式,None为默认样式(不显示关键点)# landmark_drawing_spec=mp_drawing_styles.DrawingSpec(thickness=1,circle_radius=2,color=[66,77,229]),landmark_drawing_spec=None,connection_drawing_spec=mp_drawing_styles.get_default_face_mesh_tesselation_style())# 绘制瞳孔区域mp_drawing.draw_landmarks(image=img,landmark_list=face_landmarks,connections=mp_face_mesh.FACEMESH_IRISES,# landmark_drawing_spec为关键点可视化样式,None为默认样式(不显示关键点)# landmark_drawing_spec=mp_drawing_styles.DrawingSpec(thickness=1, circle_radius=2, color=[0, 1, 128]),landmark_drawing_spec=None,connection_drawing_spec=mp_drawing_styles.get_default_face_mesh_tesselation_style())else:img = cv.putText(img, 'NO FACE DELECTED', (25 , 50 ), cv.FONT_HERSHEY_SIMPLEX, 1.25,(218, 112, 214), 1, 8)#记录该帧处理完毕的时间end_time=time.time()#计算每秒处理图像的帧数FPSFPS=1/(end_time-start_time)scaler=1img=cv.putText(img,'FPS'+str(int(FPS)),(25*scaler,100*scaler),cv.FONT_HERSHEY_SIMPLEX,1.25*scaler,(0,0,255),1,8)return img# 调用摄像头
cap=cv.VideoCapture(0)cap.open(0)
# 无限循环,直到break被触发
while cap.isOpened():success,frame=cap.read()# if not success:#     print('ERROR')#     breakframe=process_frame(frame)#展示处理后的三通道图像cv.imshow('my_window',frame)if cv.waitKey(1) &0xff==ord('q'):breakcap.release()
cv.destroyAllWindows()


http://chatgpt.dhexx.cn/article/i2FOqQb3.shtml

相关文章

摄像机的安全检测

摄像机安全检测 安全监测的方式有很多种 2.当摄像机发射线可以碰到玩家时,且摄像机当前不在初始位置 如果上一个位置能看到家,则后退一步 如果看不到玩家,不动 public class cameraSafe : MonoBehaviour {//在相机下定义一个空节点作为初…

摄像头侦测相关

一、影响摄像头侦测灵敏度 1.1 漏报与误报概念 移动侦测:IPC(网络摄像头)监控过程中检测到画面中存在变动即会报警提示,是一个监控过程是在一些场景十分常见的功能。 移动侦测实际上是一个较复杂的概念,到底怎么样才…

Win11检测不到内置摄像头的解决办法

在进行视频聊天时会需要用到电脑的摄像头,但是有win11用户发现win11电脑竟然检测不到摄像头,这是怎么回事?很多用户还不是很熟悉这个新系统,下面就让小编来给大家讲讲这个问题吧。 1、首先点击开始,弹出界面点击【设置…

摄像头漏洞检测

学校、商场、咖啡厅甚至一些家庭,这些设备维护不够完善的地方,总会存在网络安全隐患。对于网络摄像头设备,安全性显得尤为重要,因为它会泄露我们的隐私。然而总会有些人因为懒得打补丁,或者是使用弱口令导致摄像头被黑…

基于FPGA的OV7670摄像头实时检测

目录 前言:整体系统框图 一、OV7670摄像头简介 二、OV7670 SCCB协议简介 三、OV7670初始化寄存器配置 四、OV7670初始化代码编写 五、什么是DVP? 六、摄像头写数据请求 七、顶层文件编写 八、效果 前言:整体系统框图 如图所示,FPGA中…

摄像头质量检测

文章目录 项目场景:一、色偏:二、清晰度:三、两张图片的特征点对比:四、亮度:总结: 项目场景: 我们项目中使用的摄像头,在部署之后,有可能会遇到被人为遮挡、破坏&#x…

谷歌再失华裔高管,AI 中国中心总裁李佳离职;树莓派新品发布

(给技术最前线加星标,每天看技术热点) 转自:开源中国、solidot、cnBeta、腾讯科技、快科技等 【技术资讯】 0、李飞飞之后谷歌再失华裔高管,谷歌 AI 中国中心总裁李佳离职创业 李飞飞离职50天后,另一位知名的谷歌AI华裔高管&#…

Visio2019 安装教程

Visio2019 32/64位可以帮助小伙伴们通过直观方式来轻松绘制出各种流程图,包括流程图、网络图、工程设计、组织结构图等,还可与他人协作实现无缝操作,友好的操作界面,专业化的设计工具,是您进行流程图设计的首选 Visio …

【安装教程】 【Visio2019】(附带安装包下载)

(注意!!! 安装完成之后,会覆盖原版的office!!!) https://pan.baidu.com/s/1uOcHz-fTEMsQhwU_yP6j71Q 一、Visio2019安装步骤 1.解压【Visio2019.rar】压缩包。&#xff…

Visio 2003软件安装教程

安装步骤: 1.解压安装包 2.打开解压后的文件夹,如图示: 3.密钥输入内容:GWH28-DGCMP-P6RC4-6J4MT-3HFDY ,执行下一步 4.填写用户名和缩写,随便填写,下一步 5.如图:执行下一步 6.选择…

Visio科学图形包下载以及安装详细教程

Visio科学图形包,2013版本及以上可用,其中含有立体几何、解析几何、各种统计图表、三角函数、实验装置等。安装主要包含解压与导入模板两个步骤。以下安装教程不需要cmd中操作,简单方便,直接下载解压后的文件,导入即可…

Microsoft visio2010下载安装步骤图文教程

目录 概要 配置安装 总结 概要 应小伙伴们的要求,特畅谈Visio 2010iTunes地址,及Anantnag的装设教程如下★Microsoft Office Visio★ Office Visio 是office软件全系列中的负责绘制流程图和示意图的软件,是几款适于IT和商务人员就非…

Visio 安装与操作小结

🤵 Author :Horizon Max ✨ 编程技巧篇:各种操作小结 🎇 机器视觉篇:会变魔术 OpenCV 💥 深度学习篇:简单入门 PyTorch 🏆 神经网络篇:经典网络模型 💻 …

Visio2019安装

1.安装前查看系统多少位,根据系统下载相应的软件; 2.右键,管理员身份运行; 3.接下来等待下载完成; 4.完成后打开visio,点击“账户”查看是否激活; 5.激活成功安装结束。 6.若未激活可输入已有…

Visio 2019 专业版安装教程

参考 Visio 2019 Pro 激活方法 - 爱码网 (likecs.com) 在记事本中输入下面内容,保存为“.bat”文件,名字随意 echo off title Activate Microsoft Visio 2019&cls&echo &echo #Visio: Activating Microsoft software products for FREE wi…

visio2007安装教程_电脑安装Visio 2007的详细方法

电脑安装Visio 2007的详细方法 Microsoft Office Visio 2007是Office2007中的一部分,不过很多时候我们在windows系统电脑安装office的时候这一部分是没有默认安装的。很多人喜欢用Visio来画流程图,因为它便利快捷。那么电脑如何安装Visio Viewer 2007&am…

Visio2016 安装教程

Visio是office软件系列中的负责绘制流程图和示意图的软件,是一款便于IT和商务人员就复杂信息、系统和流程进行可视化处理、分析和交流的软件。使用具有专业外观的 Office Visio 图表,可以促进对系统和流程的了解,深入了解复杂信息并利用这些知…

visio2019安装教程

安装前先关闭杀毒软件和360卫士,注意安装路径不能有中文,安装包路径也不要有中文。 1.选中【Visio2019】压缩包,鼠标右击选择【解压到Visio2019】。 2.双击打开【Visio2019】文件夹。 3.双击打开【VisioPro2019Retail】镜像文件…

Visio2003安装教程

目录 一、软件下载 二、软件安装 一、软件下载 我放到我的百度网盘里啦~可以直接去里面下载,提取码为:5200。 请点击me、me、me!!! 二、软件安装 1、根据上面的链接下载好 Visio2003_SP3.exe 文件后,双…

Office+Visio安装教程

OfficeProjectVisio安装教程 1,安装office Tool Plus(这是一个方便的工具箱) Office Tools Plus 官网下载地址: https://otp.landian.vip/zh-cn/ 下载下来以后解压 然后他会等待三秒左右打开以下窗口 2,卸载以…