Python人脸识别

2023-10-30


OpenCV 简介

OpenCV 的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。 OpenCV 是由英特尔公司发起并参与开发,以 BSD 许可证授权发行,可以在商业和研究领域中免费使用。OpenCV 可用于开发实时的图像处理、计算机视觉以及模式识别程序。该程序库也可以使用英特尔公司的 IPP 进行加速处理。

OpenCV 用 C++语言编写,它的主要接口也是 C++语言,但是依然保留了大量的 C 语言接口。该库也有大量的 Python、Java and MATLAB/OCTAVE(版本 2.5)的接口。这些语言的 API 接口函数可以通过在线文档获得。如今也提供对于 C#、Ch、Ruby、GO 的支持。


安装 OpenCV 模块

OpenCV 已经支持 python 的模块了,直接使用 pip 就可以进行安装,命令如下:

 
OpenCV 基本使用


读取图片

显示图像是 OpenCV 最基本的操作之一,imshow()函数可以实现该操作。如果使用过其他 GUI 框架背景,就会很自然第调用 imshow()来显示一幅图像。imshow()函数有两个参数: 显示图像的帧名称以及要显示的图像本身。直接调用 imshow()函数图像确实会显示,但随即会消失。要保证图片一直在窗口上显示,要通过 waitKey()函数。waitKey()函数的参数为等待键盘触发的时间,单位为毫秒,其返回值是-1(表示没有键被按下)

【示例】读取图片


图片灰度转换

OpenCV 中有数百种关于在不同色彩空间之间转换的方法。当前,在计算机视觉中有三种常用的色彩空间:灰度、BGR、以及 HSV(Hue,Saturation,Value)。

  1. 灰度色彩空间是通过去除彩色信息来将其转换成灰阶,灰度色彩空间对中间处理特别有效,比如人脸识别。
  2. BGR 及蓝、绿、红色彩空间,每一个像素点都由一个三元数组来表示,分别代表蓝、绿、红三种颜色。网页开发者可能熟悉另一个与之相似的颜色空间:RGB 它们只是颜色顺序上不同。
  3. HSV,H(Hue)是色调,S(Saturation)是饱和度,V(Value)表示黑暗的程度

(或光谱另一端的明亮程度)。

灰度转换的作用就是:转换成灰度的图片的计算强度得以降低。示例如下:

【示例】将图片灰度


修改图片尺寸

【示例】修改图片尺寸

 


画图

OpenCV 的强大之处的一个体现就是其可以对图片进行任意编辑,处理。 下面的这个函数最后一个参数指定的就是画笔的大小。

【示例】画图


人脸检测


Haar 级联的概念

摄影作品可能包含很多令人愉悦的细节。但是,由于灯光、视角、视距、摄像头抖动以   及数字噪声的变化,图像细节变得不稳定。人们在分类时不会受这些物理细节方面差异的影   响。以前学过,在显微镜下没有两片看起来很像的雪花。幸运的是,作者生长在加拿大,已   经学会如何不用显微镜来识别雪花。

因此,提取出图像的细节对产生稳定分类结果和跟踪结果很有用。这些提取的结果被称   为特征,专业的表述为:从图像数据中提取特征。虽然任意像素都可以能影响多个特征,但   特征应该比像素少得多。两个图像的相似程度可以通过它们对应特征的欧氏距离来度量。

Haar 特征是一种用于实现实时人脸跟踪的特征。每一个 Haar 特征都描述了相邻图像区域的对比模式。例如,边、顶点和细线都能生成具有判别性的特征。


获取Haar 级联数据

首先我们要进入 OpenCV 官网:https://opencv.org 下载你需要的版本。点击 RELEASES

(发布)。如下图所示:

由于 OpenCV 支持好多平台,比如 Windows, Android, Maemo, FreeBSD, OpenBSD, iOS,

Linux 和 Mac OS,一般初学者都是用 windows,点击 Windows。

点击 Windows 后跳出下面界面,等待 5s 自动下载。

然后双击下载的文件,进行安装,实质就是解压一下,解压完出来一个文件夹,其他什么也没发生。安装完后的目录结构如下。其中 build 是 OpenCV 使用时要用到的一些库文件, 而 sources 中则是 OpenCV 官方为我们提供的一些 demo 示例源码。

在 sources 的一个文件夹 data/haarcascades。该文件夹包含了所有 OpenCV 的人脸检测的

XML 文件,这些可用于检测静止图像、视频和摄像头所得到图像中的人脸。

人脸检测器(默认):haarcascade_frontalface_default.xml

人脸检测器(快速 Harr):haarcascade_frontalface_alt2.xml

人脸检测器(侧视):haarcascade_profileface.xml

眼部检测器(左眼):haarcascade_lefteye_2splits.xml

眼部检测器(右眼):haarcascade_righteye_2splits.xml

嘴部检测器:haarcascade_mcs_mouth.xml

鼻子检测器:haarcascade_mcs_nose.xml

身体检测器:haarcascade_fullbody.xml

人脸检测器(快速 LBP):lbpcascade_frontalface.xml


使用 OpenCV 进行人脸检测


静态图像中人脸检测

人脸检测首先是加载图像并检测人脸,这也是最基本的一步。为了使所得到的结果有意  义,可在原始图像的人脸周围绘制矩形框。

【示例】识别图片中的人脸

【示例】识别图片中多张人脸


视频中的人脸检测

视频是一张一张图片组成的,在视频的帧上重复这个过程就能完成视频中的人脸检测。

【示例】识别视频中人脸


人脸识别

人脸检测是 OpenCV 的一个很不错的功能,它是人脸识别的基础。什么是人脸识别呢?

其实就是一个程序能识别给定图像或视频中的人脸。实现这一目标的方法之一是用一系列分   好类的图像来“训练”程序,并基于这些图像来进行识别。

这就是 OpenCV 及其人脸识别模块进行人脸识别的过程。

人脸识别模块的另外一个重要特征是:每个识别都具有转置信(confidence)评分,因此可在实际应用中通过对其设置阈值来进行筛选。

人脸识别所需要的人脸可以通过两种方式来得到:自己获得图像或从人脸数据库免费获  得可用的人脸图像。互联网上有许多人脸数据库:

https://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html

为了对这些样本进行人脸识别,必须要在包含人脸的样本图像上进行人脸识别。这是一  个学习的过程,但并不像自己提供的图像那样令人满意。


训练数据

有了数据,需要将这些样本图像加载到人脸识别算法中。所有的人脸识别算法在它们的train()函数中都有两个参数:图像数组和标签数组。这些标签表示进行识别时候某人人脸的ID,因此根据 ID 可以知道被识别的人是谁。要做到这一点,将在「trainer/」目录中保存为.yml 文件。

在使用 Python 3 &OpenCV 3.0.0 进行人脸识别训练时发现异常:

AttributeError: ‘module’ object has no attribute ‘LBPHFaceRecognizer_create’OpenCV 需要安装 opencv-contrib-python 模块,直接使用 pip 就可以进行安装,命令如下:

【示例】训练数据


基于LBPH 的人脸识别

LBPH(Local Binary Pattern Histogram)将检测到的人脸分为小单元,并将其与模型中的对应单元进行比较,对每个区域的匹配值产生一个直方图。由于这种方法的灵活性,LBPH 是唯一允许模型样本人脸和检测到的人脸在形状、大小上可以不同的人脸识别算法。

调整后的区域中调用 predict()函数,该函数返回两个元素的数组:第一个元素是所识别个体的标签,第二个是置信度评分。所有的算法都有一个置信度评分阈值,置信度评分用来   衡量所识别人脸与原模型的差距,0 表示完全匹配。可能有时不想保留所有的识别结果,则需要进一步处理,因此可用自己的算法来估算识别的置信度评分。LBPH 一个好的识别参考值要低于 50 ,任何高于 80 的参考值都会被认为是低的置信度评分。

【示例】基于 LBPH 的人脸识别

 

最后,关注下方公众号可获取更多编程资料

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python人脸识别 的相关文章

  • 配置 PIP 以在代理后面工作

    我已经安装了 python 3 4 3 附带pip 我想从代理后面使用 pip 所以我执行了以下操作 Created C Users foo pip pip ini并添加了代理配置部分 proxy export http proxy my
  • c++11 正则表达式比 python 慢

    嗨我想了解为什么以下代码使用正则表达式进行分割字符串分割 include
  • 让 Django 提供可下载文件

    我希望网站上的用户能够下载路径被遮挡的文件 因此无法直接下载它们 例如 我希望 URL 是这样的 http example com download f somefile txt 在服务器上 我知道所有可下载的文件都位于该文件夹中 home
  • 绘制对数轴

    我想使用 matplotlib 绘制一张带有一个对数轴的图 我一直在阅读文档 但无法弄清楚语法 我知道这可能很简单 scale linear 在情节争论中 但我似乎无法正确理解 示例程序 import pylab import matplo
  • 以编程方式结束/退出粘合作业

    我正在使用 Glue 书签来处理数据 我的工作是每天安排的 但也可以 手动 启动 由于我使用书签 有时胶水作业可以在没有新数据要处理的情况下启动 然后读取的数据帧为空 在这种情况下 我想好好地结束我的工作 因为它没有什么关系 我试过 if
  • NLTK:包错误?朋克和泡菜?

    基本上 我不知道为什么会收到此错误 只是为了获得更多图像 这里有一个代码格式的类似消息 由于是最新的 该帖子的答案已经在消息中提到 Preprocessing raw texts LookupError Traceback most rec
  • 在 Python 中倾斜数组

    我有一个 2D 数组 我将使用它保存为灰度图像scipy misc toimage 在此之前 我想将图像倾斜给定角度 像这样进行插值scipy ndimage interpolation rotate 上图只是为了说明倾斜过程 我知道我必须
  • ipython/jupyter 中的 tk 问题

    我正在尝试编写一个用于从 ipython jupyter 笔记本启动的 gui 但在笔记本中使用 tkinter 时遇到了麻烦 特别是在让 tk gui 窗口正常关闭方面 如何从 jupyter 制作 启动 tkinter gui 然后在不
  • 使用 python boto3 管理 Route53 中具有多个 IP 的 A 记录

    我的route53中有一条A记录 后面有多个IP 例子 A record dummy xyz com 点IPs 1 1 1 1 2 2 2 2 和 3 3 3 3路由策略 Simple 我使用下面的代码来更新单个 IP 的记录 Change
  • Python3 - 如何将字符串转换为十六进制

    我正在尝试将字符串逐个字符转换为十六进制 但我无法在Python3中弄清楚它 在较旧的 python 版本中 我的以下内容有效 test This is a test for c in range 0 len test print 0x s
  • 错误:tensorflow:无法匹配检查点的文件

    我正在训练一个张量流模型 在每个时期之后我都会保存模型状态并腌制一些数组 到目前为止 我的模型执行了 2 个纪元 并且保存状态的文件夹包含以下文件 checkpoint model e knihy preprocessed txt e0 c
  • Python 中的 Firebase 身份验证时出现 KeyError:“databaseURL”

    相信你做得很好 我是 firebase 的新手 正在尝试进行用户身份验证 我已经安装了pyrebase4并在firebase控制台上创建了一个项目 我还启用了使用 电子邮件和密码 登录并尝试连接我的应用程序 下面是我正在尝试的代码 impo
  • __author__ 的起源是什么?

    使用私有元数据变量的约定在哪里 author 一个模块内部从何而来 This http mail python org pipermail python dev 2001 March 013328 htmlPython 邮件列表线程似乎暗示
  • 在解析器/子解析器的开头使用 argparse.REMAINDER

    我想实现一个 arg 解析器 它允许我将单元测试作为子命令之一运行 盲目地将参数传递给 unittest main 例如 foo py unittest args to pass to unittest main 以及其他子命令 foo p
  • Tensorflow `tf.layers.batch_normalization` 不会向 `tf.GraphKeys.UPDATE_OPS` 添加更新操作

    以下代码 复制 粘贴可运行 说明了如何使用tf layers batch normalization import tensorflow as tf bn tf layers batch normalization tf constant
  • 如何在 Windows 7 中使用 Python 廉价地创建非常大的文件? [复制]

    这个问题在这里已经有答案了 可能的重复 在Windows系统上快速创建大文件 https stackoverflow com questions 982659 quickly create large file on a windows s
  • 检查图像中是否有太薄的区域

    我正在尝试验证雕刻机的黑白图像 更多的是剪贴画图像 不是照片 我需要考虑的主要事情之一是区域的大小 或线条的宽度 因为机器无法处理太细的线条 所以我需要找到比给定阈值更细的区域 以此图为例 竖琴的琴弦可能太细而无法雕刻 我正在阅读有关 Ma
  • 如何从 PyObject 获取指向字符串的 char*

    我怎样才能得到一个char from a PyObject它指向一个字符串 例如 这是 python 脚本 Test Connect 272 22 20 65 1234 这是 C 代码 static PyObject Connect PyO
  • 如何将动态数据传递给装饰器

    我正在尝试编写一个基本的 CRUD 控制器类来执行以下操作 下列的 class BaseCrudController model field validation template dir expose self template dir
  • 我可以以某种方式“编译”一个Python脚本以在没有安装Python的PC上运行吗?

    所以我有一个Python脚本 myscript py 我是这样执行的 python D myscript py 但是 我必须安装 Python 并将其包含在PATH使其工作的环境变量 是否有可能以某种方式将 Python 可执行文件与 Py

随机推荐

  • ubuntu18.04 配置nfs服务

    1 安装nfs服务器软件 sudo apt install nfs kernel server 2 修改配置文件 添加nfs server上用于共享的目录 并设置允许访问该目录的客户机IP 及其读写权限 sudo vim etc expor
  • YOLOV5 和 Yolov5s各个版本的 发展史、论文、各个版本代码资源分享合集 !!!

    点击上方 码农的后花园 选择 星标 公众号 精选文章 第一时间送达 2020年2月份YOLO之父Joseph Redmon宣布退出计算机视觉的研究的时候 很多人都以为目标检测神器YOLO系列就此终结 没想到的是 2020年4月份曾经参与YO
  • 后台获取数据库时间出现的格式问题记录

    问题描述 要从数据库获取时间类型然后传给前台页面 数据库中的时间格式是yyyy MM dd HH mm ss 如图所示 但是获取出来时格式就变成了Mon Dec 13 10 04 16 CST 2021这种 解决 可以在前端或者后端解决 后
  • MYSQL数据库和表

    一 安装MYSQL数据库时生成系统使用的数据库 1 显示数据库 2 创建数据库 3 选择数据库 mysql gt use stusys Database changed 4 修改数据库 mysql gt alter database stu
  • win32应用程序_不是有效的win32应用程序怎么解决

    在日常办公中经常用到电脑 有许多使用技巧 本次给大家介绍不是有效的win32应用程序怎么办 快来看看吧 方法一 不是有效的win32应用程序表示这个应用程序和系统不兼容 用户可以在计算机属性页面查看系统是32位还是64位 之后下载相对应的应
  • 【源码】贝叶斯变化点检测与时间序列分解

    BEAST 突变 季节性和趋势的贝叶斯估计器 是一种快速 通用的贝叶斯模型平均算法 用于将时间序列或1D序列数据分解为单个组件 例如突变 趋势和周期 季节性变化 如Zhao等人 2019 所述 BEAST可用于变化点检测 即断点或结构中断
  • mysql进阶1——proxysql中间件

    文章目录 一 基本了解 二 安装部署 三 proxysql管理配置 3 1 内置库 3 1 1 main库表 3 1 2 stats库表 3 1 3 monitor库 3 2 常用管理变量 3 2 1 添加管理用户 3 2 2 添加普通用户
  • WSL无法访问网络的解决办法

    今天在用WSL的时候突然网络抽风 域名解析出了问题 apt update都用不了 网上查了很多方法 什么vEthernet的IP啊 ifconfigip啊 ip route add default啥的 都不管用 最后还是看了一下 etc r
  • 多益网络提前批前端面试(凉)

    题外话 面试时间是晚上7点多 多益还是加班严重啊 这点哈哈哈哈 下面正文 自我介绍 问项目 问看过的书籍 这里就是挖坑了 尽量找自己会的说 XHR HTTP1和HTTP2的区别 隐藏一个HTML标签 v for 为什么不能用index做ke
  • QT基础部件学习笔记

    目录 一 QT程序开发流程 二 QT基础部件分类 1 按钮类 普通 工具 单选 复选 命令连接 编辑 编辑 2 布局类 水平 垂直 网格 两列 该类的实例具体与其他类同时使用 编辑 3 输出类 标签 文本浏览器 日历 七段数码管 进度条 4
  • 反编译解析数组为什么可以使用foreach

    反编译解析数组为什么可以使用foreach 一 说明 二 集合使用foreach 三 数组使用foreach 四 数组使用for 五 javap反编译程序 5 1 TestCollection结果 5 2 TestArray结果 5 3 T
  • 阿里云mysql gtid_阿里云RDS mysql报错:Statement violates GTID consistency

    近日有用户反馈使用RDS mysql8 0时 在执行语句 create table select时报错了 主要错误是 Statement violates GTID consistency 字面理解是语句违反GTID一致性 报错截图 Sta
  • 图像增强 cnn

    目录 实时图像增强 基于 间距自适应查找表 的方法 CVPR 2022 Image Adaptive 3DLUT 水下图像增强UWCNN wtf 直方图均衡化 CycleGan增强 2个项目 实时图像增强 基于 间距自适应查找表 的方法 C
  • Qt基础:四、多窗口切换

    这是一个测试多窗口切换的程序 点击主界面上得按键 然后弹出一个新的对话框窗口 1 在主界面添加一个按键 2 实现按键的槽函数 void MyWidget on showChildButton clicked QDialog dialog n
  • 优化Java应用程序性能:解决高GC耗时问题

    优化Java应用程序性能 解决高GC耗时问题 在开发和维护Java应用程序时 我们经常遇到性能问题 其中之一是高GC 垃圾收集 耗时 垃圾收集是Java虚拟机 JVM 的一项重要任务 用于自动管理内存和释放不再使用的对象 然而 当GC耗时过
  • 【模型量化】

    文章认为量化会使网络激活值的均值发生偏移 通过对偏移进行修正 可以有效提高量化模型的性能 首先考虑 激活值的均值偏移 网络BN会统计出数据经过某层后的均值和方差信息 而网络在经过量化后 同样的数据经过该层后 其均值已经不符合原BN统计出的均
  • 测试基础 - 软件测试的分类

    1 测试性质 类型 定义和考虑点 确认测试 表明软件是可正常工作的 并且符合 软件需求说明书 中规定的全部功能和性能要求 鉴定测试 针对软件质量情况进行的一项专项测试 测试出具的权威鉴定测试报告 可作为软件质量判定的重要依据 验收测试 1
  • 操作系统调度策略

    操作系统调度是为了再有限的资源下 通过对多个程序执行过程的国立 尽可能满足系统和应用的 指标 如等待响应时间 完成时间 系统得资源利用率 吞吐量 功耗等 设计一个令用户满意的调度器绝非易事 主要有以下挑战 调度指标多样性 不同场景下的调度指
  • 2014年1月8日--1月15日(杂事太多,算10小时,剩4733小时)

    1月8日 上午开会 下午被授课 算1小时吧 1月9日 决定完成光线追踪算法 DEMO7 1和 DX11的TRIANGLE 并把挖掘机的改造定帧 以及SHADER接口
  • Python人脸识别

    OpenCV 简介 OpenCV 的全称是Open Source Computer Vision Library 是一个跨平台的计算机视觉库 OpenCV 是由英特尔公司发起并参与开发 以 BSD 许可证授权发行 可以在商业和研究领域中免费