opencv实战-人脸检测

一 人脸检测

进行获取数据包

1 传入参数

orderDict() 按照循序进行导入字典 拒绝乱序

访问方式

使用命名空间对象

使用字典(args

语法

args.shape_predictor

args["shape_predictor"]

动态访问

不方便

方便:args[key]

与函数集成

需要解包:func(**vars(args))

直接传递:func(**args)

遍历参数

需要vars()辅助

直接遍历

主要优势:字典格式更灵活,特别是当需要将参数传递给其他函数时。

FACIAL_LANDMARKS_68_IDXS = OrderedDict([ ("mouth", (48, 68)), # 嘴巴区域:关键点48-68 ("right_eyebrow", (17, 22)), # 右眉毛:关键点17-22 ("left_eyebrow", (22, 27)), # 左眉毛:关键点22-27 ("right_eye", (36, 42)), # 右眼:关键点36-42 ("left_eye", (42, 48)), # 左眼:关键点42-48 ("nose", (27, 36)), # 鼻子:关键点27-36 ("jaw", (0, 17)) # 下颌线:关键点0-17 ])
FACIAL_LANDMARKS_5_IDXS = OrderedDict([ ('right_eye', (2, 3)), # 右眼:索引2和3 ('left_eye', (0, 1)), # 左眼:索引0和1 ('nose', (4)) # 鼻子:索引4 ])

2 导入人脸检测的工具包并进行预处理

detector = dlib.get_frontal_face_detector() predictor = dlib.shape_predictor(args["shape_predictor"]) • detector:这是您图片中被红框特别标注的核心对象。 它是一个使用方向梯度直方图(HOG)特征和线性SVM分类器的预训练人脸检测器。 它的作用是在图像中找出人脸的位置,返回一个或多个表示人脸位置的矩形框。 • predictor:这是一个预训练的关键点定位器,通常基于回归树集合或深度学习模型训练 。给定一个包含人脸的图像区域,它能精确预测出这个区域内68个 (或5个)​ 预先定义好的面部关键点的坐标。 工作关系:通常先使用 detector找到人脸,然后将每个人脸区域和原图(或灰度图) 传递给 predictor,以获得精细的关键点。

3 进行人脸检测并遍历所有的框

rects = detector(gray, 1) 返回值: rects:包含所有人脸边界框的列表 每个边界框是dlib的rectangle对象,包含人脸的位置 内部原理: detector使用HOG(方向梯度直方图)特征+SVM分类器 在图像上滑动窗口,检测人脸 参数1表示对图像上采样一次,增加检测小脸的能力
shape = predictor(gray, rect) predictor:加载的dlib关键点预测器。 参数:(gray, rect)- 当前帧的灰度图像和当前人脸框。 返回:一个dlib的full_object_detection对象,包含68个(或5个)面部关键点的坐标。 获取坐标值 coords = np.zeros((shape.num_parts, 2), dtype=dtype) shape.num_parts:获取关键点的总数 对于68点模型:68 对于5点模型:5 np.zeros((N, 2), dtype=dtype):创建N行2列的全零数组 示例:68点模型会创建形状为(68, 2)的数组
shape.part(i).x:获取第i个关键点的x坐标 shape.part(i).y:获取第i个关键点的y坐标 coords[i] = (x, y):将坐标赋值给数组的第i行

4 遍历每一个区域

用于提取感兴趣区域(Region of Interest)

(x,y,w,h)=cv2.boundingRect(np.array([shape[i:j]])) shape[i:j]:从关键点数组中提取特定区域的点 shape是关键点数组,形状为(68, 2)或(5, 2) i, j是特定区域的起始和结束索引 np.array([shape[i:j]]):将点列表转换为NumPy数组 cv2.boundingRect():计算能包围这些点的最小外接矩形 返回值: (x, y):矩形左上角坐标 (w, h):矩形的宽度和高度

5 展示所有区域

ull = cv2.convexHull(pts) 什么是凸包? 凸包是包含所有给定点的最小凸多边形。想象在木板上钉钉子, 用橡皮筋套住所有钉子形成的形状就是凸包。 参数详解: pts:关键点数组,形状为(N, 2),其中N是该区域的关键点数量 例如,右眼区域有6个点:pts = shape[36:42] 返回值hull:一个NumPy数组,包含凸包的顶点坐标

二 疲劳检测

1 求距离

dist.euclidean() 计算两点之间的欧几里得距离 EAR公式:(垂直距离1 + 垂直距离2) / (2 × 水平距离) 当眼睛完全睁开时,EAR值最大 当眼睛闭合时,EAR值接近0

2 设置参数

小于0.3的时候开始眨眼 当持续3帧的时候当一次眨眼

当小于0.3的时候counter加1 当counter加到3的时候total加1

3 需要将图像区域调大一些 这样方便检测到人脸 要不然人脸太小的化 人脸检测器检测不到

4 进行绘制

leftEye = shape[lStart:lEnd] lStart和 lEnd:左眼区域的起始和结束索引 对于68点模型,左眼通常是索引42-47 结果:包含6个(x, y)坐标的数组

cv2.putText(frame, "EAR: {:.2f}".format(ear), (300, 30),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
关键区别:
位置:(300, 30),避免与眨眼计数重叠
格式:{:.2f}保留两位小数
内容:显示当前帧的眼睛纵横比
第6行:显示图像窗口

参数

说明

等待时间

10

等待10毫秒,然后继续

位掩码

& 0xFF

获取低8位,确保跨平台兼容

返回值

key

按键的ASCII码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1170982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树莓派插针定义应用场景:4B温度传感器接线指南

树莓派4B接温度传感器?别再被引脚搞晕了!一文讲透DS18B20和DHT实战接线你是不是也曾在面包板前拿着杜邦线犹豫不决:这根该插哪个孔?GPIO4到底是第几号物理针脚?为什么读出来温度总是85C?别急,这…

Llama3-8B定时任务处理?Cron调度实战案例

Llama3-8B定时任务处理?Cron调度实战案例 1. 引言:从本地大模型部署到自动化调度的演进 随着大语言模型(LLM)在企业与个人场景中的广泛应用,如何将模型推理能力集成到日常自动化流程中,成为提升效率的关键…

实测阿里Paraformer模型,识别速度达5倍实时太强了

实测阿里Paraformer模型,识别速度达5倍实时太强了 1. 引言:中文语音识别的新选择 随着人工智能技术的快速发展,自动语音识别(ASR)在会议记录、访谈转写、语音输入等场景中扮演着越来越重要的角色。在众多开源ASR方案…

用bhyve-webadmin来管理FreeBSD系统下的bhyve虚拟机(上)

BVCP((Bhyve Virtual-Machine Control Panel ,bhyve-webadmin )是一个图形化和安全的web控制面板,旨在管理FreeBSD bhyve虚拟机。BVCP专为数据中心级可靠性而设计,专为连续24/7运行而构建,专注于稳定性和性…

NPP 草原:印度 Vindhyan,1986-1989 年,R1

NPP Grassland: Vindhyan, India, 1986-1989, R1 简介 该数据集包含四个文本格式 (.txt) 的数据文件。其中三个文件提供了 1986 年至 1989 年间印度北部文迪亚高原三个衍生稀树草原的地上和地下生产力数据,每个文件对应三种不同的处理方式。每个研究地点&#xff…

通义千问2.5-7B房地产:户型分析与描述生成

通义千问2.5-7B房地产:户型分析与描述生成 1. 引言 1.1 业务场景描述 在房地产行业,楼盘推广、线上平台展示和客户沟通高度依赖对户型图的精准解读与生动描述。传统方式下,房产文案撰写依赖人工经验,耗时长、成本高&#xff0c…

FSMN-VAD模型切换:多语言VAD适配可能性探讨

FSMN-VAD模型切换:多语言VAD适配可能性探讨 1. 引言 1.1 语音端点检测的技术背景 语音端点检测(Voice Activity Detection, VAD)是语音信号处理中的基础模块,其核心任务是从连续音频流中准确识别出有效语音段的起止时间&#x…

Day 68:【99天精通Python】设计模式 (Design Patterns) 下篇 - 观察者与策略

Day 68:【99天精通Python】设计模式 (Design Patterns) 下篇 - 观察者与策略 前言 欢迎来到第68天! 在昨天的课程中,我们学习了如何优雅地创建对象(单例、工厂)。今天,我们来关注对象之间的交互。 观察者模…

Z-Image-ComfyUI工作流分享:导出导入JSON文件的操作步骤

Z-Image-ComfyUI工作流分享:导出导入JSON文件的操作步骤 1. 引言 1.1 业务场景描述 在当前AIGC(人工智能生成内容)快速发展的背景下,图像生成模型的应用日益广泛。Z-Image-ComfyUI作为基于阿里最新开源文生图大模型Z-Image的可…

Sambert性能优化技巧:让语音合成速度提升50%

Sambert性能优化技巧:让语音合成速度提升50% 1. 引言:多情感语音合成的性能挑战 随着AI语音技术在虚拟主播、智能客服、有声读物等场景中的广泛应用,用户对高质量、低延迟的语音合成服务提出了更高要求。Sambert-HifiGAN作为当前主流的中文…

Python3.8图像处理:云端OpenCV预装,免去编译痛苦

Python3.8图像处理:云端OpenCV预装,免去编译痛苦 你是不是也遇到过这种情况?作为一名设计师,想用Python来批量处理图片、自动裁剪构图、提取配色方案,或者给设计稿加水印。兴致勃勃地打开教程,照着代码敲完…

Day 69:【99天精通Python】C/C++ 扩展 (CTypes/Cython) - 给 Python 装上喷气引擎

Day 69:【99天精通Python】C/C 扩展 (CTypes/Cython) - 给 Python 装上喷气引擎 前言 欢迎来到第69天! Python 的优点是开发效率极高,但缺点也很明显:运行速度慢(相比 C/C)。 在绝大多数场景下,…

单目深度估计实战:MiDaS模型部署与优化

单目深度估计实战:MiDaS模型部署与优化 1. 引言 1.1 技术背景 在计算机视觉领域,从单张二维图像中恢复三维空间结构一直是极具挑战性的任务。传统方法依赖多视角几何或激光雷达等硬件设备,成本高且部署复杂。随着深度学习的发展&#xff0…

效果展示:通义千问2.5-7B-Instruct打造的智能写作助手案例

效果展示:通义千问2.5-7B-Instruct打造的智能写作助手案例 1. 引言:为何选择通义千问2.5-7B-Instruct构建智能写作助手 在当前大模型快速发展的背景下,如何选择一个性能强、响应快、部署灵活且支持商用的开源模型,成为构建垂直领…

树莓派换源零基础指南:网络环境要求

树莓派换源实战指南:从卡顿到飞速的秘诀你有没有遇到过这种情况:刚入手树莓派,兴致勃勃地打开终端准备安装Python库或者升级系统,结果一条sudo apt update执行下去,半天不动,进度条像被冻住了一样&#xff…

CC2530零基础入门:串口下载与调试方式详解

CC2530入门实战:串口下载与调试全解析 你是不是也遇到过这种情况——手里的CC2530开发板接上电脑,打开烧录工具,结果提示“无法连接芯片”?反复检查线序、波特率、跳线,就是搞不定。别急,这几乎是每个ZigB…

IndexTTS2效果优化:语调、停顿、重音调节实战技巧

IndexTTS2效果优化:语调、停顿、重音调节实战技巧 1. 引言:提升语音自然度的关键挑战 随着AI语音合成技术的快速发展,用户对TTS(Text-to-Speech)系统的自然度和表现力提出了更高要求。尽管IndexTTS2在V23版本中显著增…

A.每日一题——2975. 移除栅栏得到的正方形田地的最大面积

题目链接:2975. 移除栅栏得到的正方形田地的最大面积(中等) 算法原理: 解法:暴力枚举 622ms击败78.57% 时间复杂度O(N) 此题跟上一题 A.每日一题——2943. 最大化网格图中正方形空洞的面积 的不同点👇 空洞…

从语料到模型应用|StructBERT中文情感分析镜像全链路实践

从语料到模型应用|StructBERT中文情感分析镜像全链路实践 1. 引言:中文情感分析的现实挑战与技术选型 1.1 情感分析在实际业务中的价值 在当前以用户为中心的产品运营体系中,中文情感分析已成为企业洞察用户反馈、优化服务体验的核心能力。…

D.二分查找-进阶——658. 找到 K 个最接近的元素

题目链接:658. 找到 K 个最接近的元素(中等) 算法原理: 解法一:排序 19ms击败13.08% 时间复杂度O(NlogN) 这个解法其实挺暴力的,直接用把arr全扔链表里,然后按照题目要求把链表排序,…