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

如何进行人脸识别

 首先我们下载的opencv库中就自带了这些方法,可以直接使用了。我们可以这样找到

1 找到我们的外部库

这个外部库site-packages中存着我们的第三方库,我们可以在这个里面找到我们的cv2

2 找到cv2中的data文件

date中就是我们的这些检测方法,其中包含了笑容检测,人脸检测,下半身,或者眼镜检测,等等等等。下面我们来使用一下人脸检测。

3 代码部分

import cv2# 读取图像文件
image = cv2.imread('img_2.png')# 将彩色图像转换为灰度图像,因为人脸检测通常在灰度图像上更高效
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 加载人脸识别分类器
# 使用OpenCV提供的预训练Haar级联分类器
faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')# 分类器检测实现人脸识别
# objects = cv2.CascadeClassifier.detectMultiScale(image[, scaleFactor[, minNeighbors[, flags[, minSize[, maxSize]]]]])
# 其中,各个参数及返回值的含义如下:
# image: 待检测图像,通常为灰度图像
# scaleFactor: 表示在前后两次相继扫描中搜索窗口的缩放比例。识别,扫描,按照不同比例来进行扫描
# minNeighbors: 表示构成检测目标的相邻矩形的最小个数。在默认情况下,该参数的值为3,
#     表示有3个以上的检测标记存在时才认为存在人脸。如果希望提高检测的准确率可以将该参数的值设置得更大,
#     但这样做可能会让一些人脸无法被检测到
# flags: 该参数通常被省略。在使用低版本OpenCV(OpenCV 1.X版本)时,该参数可能会被设置为
#     CV_HAAR_DO_CANNY_PRUNING,表示使用Canny边缘检测器拒绝一些区域
# minSize: 目标的最小尺寸,小于这个尺寸的目标将被忽略
# maxSize: 目标的最大尺寸,大于这个尺寸的目标将被忽略。通常情况下,将该可选参数省略即可
#     若maxSize和minSize大小一致,则表示仅在一个尺度上查找目标
# objects: 返回值,目标对象的矩形框向量组。该值是一组矩形信息,
#     包含每个检测到的人脸对应的矩形框的信息(x轴方向位置、y轴方向位置、宽度、高度)
faces = faceCascade.detectMultiScale(gray,scaleFactor=1.05,  # 缩放比例因子minNeighbors=9,    # 最小邻居数,值越大检测越严格minSize=(8, 8)     # 最小人脸尺寸
)# 输出检测结果
print("发现{0}张人脸!".format(len(faces)))
print("其位置分别是:", faces)# 标注人脸及显示结果
# 遍历所有检测到的人脸区域
for (x, y, w, h) in faces:# 在原始图像上绘制矩形框标注人脸# 参数说明:#   image: 要绘制的图像#   pt1: 矩形左上角坐标 (x, y)#   pt2: 矩形右下角坐标 (x+w, y+h)#   color: 矩形框颜色,这里使用绿色 (BGR格式)#   thickness: 线条粗细cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)# 显示带有人脸标注的结果图像
cv2.imshow("result", image)# 等待按键输入,0表示无限等待
cv2.waitKey(0)# 关闭所有OpenCV创建的窗口
cv2.destroyAllWindows()

结果展示

4 参数解释

参数名数据类型作用说明常见取值/建议
imageMat输入图像。通常应为灰度图像以加快检测速度。gray_image
objectsvector输出参数。用于存储检测到的目标矩形框(x, y, width, height)。通常传入一个 vector<Rect> 变量来接收结果,Python 中是一个列表。
scaleFactordouble图像缩放因子。决定在图像金字塔中每次缩小的比例。1.05~1.4​。值越小(如 1.05),检测越细致慢速;值越大(如 1.3),检测越快但可能漏检。
minNeighborsint最小邻居数。控制误检率,值越高检测越严格,但可能漏检真实目标。3~6​(默认),​**≥8**​(高可靠性要求)。值越高,误检越少,但漏检可能增加。
flagsint检测模式标志。用于指定检测过程的一些选项(新版 OpenCV 中很多已弃用或无效)。0 (默认) 或 CASCADE_SCALE_IMAGECASCADE_FIND_BIGGEST_OBJECT (只找最大目标)。
minSizeSize目标最小尺寸。小于此尺寸的检测目标将被忽略。如 (30, 30)。根据图像中目标预期的最小大小调整,可有效过滤小噪声。
maxSizeSize目标最大尺寸。大于此尺寸的检测目标将被忽略。

5 扩展

在此基础上,我们可以对视频的每一帧进行读取,如何对视频的每一帧进行人脸检测看是否有人脸,如何画出来,如何就可以实现视频中的人脸检测了。

6 原理简述

首先我们引入了几个特征,就卷积核一样,如何计算出特征值

特征值 = ∑特征区域中白色区域的像素值-黑色区域像素值

Haar特征反映的是图像的灰度变化

关于 Harr 特征中的矩形框,有如下 3 个变量:

• 矩形框位置: 矩形框要逐像素点地划过(遍历) 整个图像获取每个位置的特征值。

• 矩形框大小: 矩形的大小可以根据需要进行任意调整。

• 矩形框类型: 包含垂直、水平、对角等不同类型。

根据这样我们可以检测出一个人脸,这么多特征在检测人脸的时候是不是满足的特征数越多越好。所以minNeighbors这里就是我们要满足的最小特征数。这里还涉及了一个级联分类器

都满足这些,才被归类于人脸,如果不是就不归于人脸。

http://www.dtcms.com/a/395409.html

相关文章:

  • 计算机视觉笔试选择题:题组1
  • 第八篇:常量表达式:从const到constexpr的革命
  • RV1126 NO.30:RV1126多线程获取音频AI的PCM数据
  • 基于蚁群算法解决车辆路径问题(VRP)的MATLAB实现
  • C语言自学--C语⾔内存函数
  • 磁带记录仪:从磁带到数字的数据存储之旅
  • 【运维】Ubuntu上WebDAV挂载与自动同步完整指南
  • Ubuntu之旅-04 Docker
  • python(73) 引用.dll文件并调用函数
  • Chrome 学习小记5——demo:(动态壁纸基础)
  • 手写 Android Dex VMP 壳:自定义虚拟机 + 指令解释执行全流程
  • 【Netty】创建一个 SSL 处理器,实现客户端与服务器之间的安全通信
  • 13 Python数据结构与算法
  • 爱:宇宙的心跳
  • Python字节数据写入文本文件完全指南:从基础到高级实战
  • 零基础Windows10安装LLVM
  • selenium三种等待方式详解
  • Leetcode总结速记
  • 手写 Android Dex VMP 壳:指令流 AES 加密 + 动态加载全流程
  • 视频融合平台EasyCVR国标GB28181视频诊断功能详解与实践
  • ORACLE adg 备库也能单独提取AWR报告
  • Angular由一个bug说起之十九:Angular 实现可拓展 Dropdown 组件
  • Kafka核心架构与高效消息处理指南
  • flink1.18配置多个上游source和下游sink
  • 快速查看自己电脑的ip地址:一个命令见本机私网ip,一步查询本地网络公网ip,附内网ip让外网访问的通用方法
  • 插件化(Plugin)设计模式——Python 的动态导入和参数解析库 argparse 的高级用法
  • 【JavaSE】【网络原理】UDP和TCP原理
  • 高防IP真的能抵御DDoS攻击吗?
  • 93. 复原 IP 地址
  • 智能排班系统,促进人岗匹配提升人效