使用mediapipe和OpenCV实现摄像头实时人脸检测
# 摄像头实时人脸检测
# opencv
import time
import cv2
# mediapipe ai工具包
import mediapipe as mp
# 进度条库
from tqdm import tqdm
# 导入模型
mp_face_detection = mp.solutions.face_detection
model = mp_face_detection.FaceDetection(
min_detection_confidence=0.5, # 置信度阈值,过滤掉小于置信度的预测框
model_selection=1, # 选择模型,0 适用于人脸离摄像头比较近(2米内),1 适用于比较远(5米以内)
)
# 导入可视化函数以及可视化样式
mp_drawing = mp.solutions.drawing_utils
# 关键点样式
keypoint_style = mp_drawing.DrawingSpec(thickness=5, circle_radius=3, color=(0, 255, 0))
# 人脸预测框样式
bbox_style = mp_drawing.DrawingSpec(thickness=5, circle_radius=3, color=(255, 0, 0))
# 处理单帧的函数
def process_frame(img):
# 记录该帧开始处理的时间
start_time = time.time()
# BGR转RGB
img_RGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 将RGB输入模型预测结果
results = model.process(img_RGB)
if results.detections: # 只有检测出人脸的时候才可视化
# 可视化人脸框和人脸关键点
for detection in results.detections:
mp_drawing.draw_detection(img,
detection,
keypoint_drawing_spec=keypoint_style,
bbox_drawing_spec=bbox_style)
# 记录该帧完毕处理的时间
end_time = time.time()
# 计算每秒处理图像帧数FPS
FPS = 1 / (end_time - start_time)
scaler = 1
# 在图像上写FPS数值,参数依次为图片、添加的文字、左上角坐标、字体、字体大小、颜色、字体粗细
img = cv2.putText(img, 'FPS ' + str(int(FPS)), (25 * scaler, 50 * scaler), cv2.FONT_HERSHEY_SIMPLEX, 1.25 * scaler,
(0, 0, 255), 1)
return img
# 调用摄像头获取每帧
# 获取摄像头
cap = cv2.VideoCapture(0)
# 打开cap
cap.open(0)
# 无限循环,直到break被触发
while cap.isOpened():
# 获取画面
success, frame = cap.read()
if not success:
print('出错啦!')
break
# 处理帧函数
frame = process_frame(frame)
# 展示处理后的三通道图像
cv2.imshow('my_window', frame)
# 按q或Esc退出
if cv2.waitKey(1) in [ord('q'), 27]:
break
# 关闭摄像头
cap.release
# 关闭窗口图像
cv2.destoryAllWindows()
作者:木子欢儿
出处:https://www.cnblogs.com/HGNET/p/16506246.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
部分文章来源于网络,如疏漏未标注原文地址或侵权,请联系进行删除。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2020-07-22 【Java】计算1!+2!+.....+20!的值
2020-07-22 【Java】设计一个简单的计算器,实现加减乘除运算并输出结果
2020-07-22 【Java】输出10-1000中间既能被3整除又能被7整除的数
2020-07-22 【Java】输出50-100范围内所有的素数
2020-07-22 【Java】利用for循环打印心型
2020-07-22 【Java】二重循环示例:打印* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2020-07-22 【Java】求100以内的斐波那契数列