OpenCV+python:人脸检测

news/2024/12/22 11:01:40/

1,人脸检测简介
人脸检测的模型主要有两类,一类是知识模型,根据眼睛、嘴、鼻子的相对位置或面部不同部位的颜色深度差异来检测人脸,另一类是统计模型,把海量的人脸数据转换成二维像素矩阵,从统计的观点出发构建人脸模式空间判断人脸是否存在。

2,特征数据
最常用到的三种特征分别为Haar特征、LBP特征及HOG特征,三种特征描述了三种不同的局部信息:
(1) Haar描述的是图像在局部范围内像素值明暗变换信息;
(2)LBP描述的是图像在局部范围内对应的纹理信息;
(3)HOG描述的则是图像在局部范围内对应的形状边缘梯度信息。
其中,OpenCV使用的Haar特征分类器属于第二种模型,训练人脸检测的特征分类器是个非常耗时费力的工作,需要收集大量的正负样本,不过值得庆幸的是OpenCV已经为我们完成了这项工作。关于Haar的具体原理和算法请大家自行百度,简单点说Haar特征分类器是xml文件,记录了面部正面、侧面、左右眼、鼻子、笑脸、上半身等多个Haar特征数据,通过对输入图片进行级联筛选查找人脸
3.人脸检测的实现
在搜索“github opencv”,在“opencv/data/haarcascades”目录下可以看到各种各样的特征分类器(xml文件),从文件名上可以轻易区分出分类器的用途,如“haarcascadesfrontalface_default.xml”是脸部正面特征分类器。https://github.com/opencv/opencv/tree/master/dat
源代码示例:

import cv2 as cv
import numpy as npdef face_detect_demo(image):gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)#转化为灰度图face_detector = cv.CascadeClassifier("F:/images/haarcascade_frontalface_alt_tree.xml")#利用级联检测器加载特征数据faces = face_detector.detectMultiScale(gray, 1.02, 5)for x, y, w, h in faces:cv.rectangle(image, (x, y), (x+w, y+h), (0, 0, 255), 2)cv.imshow("result", image)#cv.cv.waitKey(10)src = cv.imread("F:/images/lena.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
"""
cv.namedWindow("result", cv.WINDOW_AUTOSIZE)
capture = cv.VideoCapture(0)
cv.namedWindow("result", cv.WINDOW_AUTOSIZE)
while(True):ret, frame = capture.read()frame = cv.flip(frame, 1)face_detect_demo(frame)c = cv.waitKey(10)if c == 27: # ESCbreak
#在视频中定位人脸
"""
cv.imshow("input image", src)
face_detect_demo(src)cv.waitKey(0)cv.destroyAllWindows()

运行结果:
在这里插入图片描述在这里插入图片描述


http://www.ppmy.cn/news/611874.html

相关文章

英特尔内存革新助平安云 Redis 云服务降本增效

英特尔内存革新助平安云 Redis 云服务降本增效 英特尔 傲腾™ 数据中心级持久内存的引入,为平安云的降本增效开启了一条新的道路。通过对平安云 Redis 数据库产品的支持,用户能享受到性能优异且价格实惠的云服务,接下来我们还将通过更多类似…

JAVA 包装类

JAVA 包装类 1 包装类 把基本类型进行包装,提供更加完善的功能。 基本类型是没有任何功能的,只是一个变量,记录值,而包装类可以有更加丰富的功能 1.1 与基本类型的对应关系 1.2 Number 数字包装类的抽象父类。 提供了各种获取值的方式。 1.3 Integer 创建对象…

Asp.Net Core在线生成二维码

前言: 原先用zxing Code写过基于Winfrom的批量生成二维码工具,以及单个生成二维码工具;批量生成二维码Gihub源代码 今天尝试用QRCoder 加 Asp.Net Core 写了一个在线生成二维码的例子,并且保存图片到Ubuntu系统; 代码&…

TensorFlow平台搭建

1,Anaconda 的安装 Anaconda指的是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项,Conda是一个开源的包、环境管理器,可以用于在同一个机器上安装不同版本的软件包及其依赖,并能够在不同的…

java 时间戳 与时间的转换

时间戳的定义: 时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。 它的提出主要是为用户提供一份电子证据&#x…

如何从数据角度为人工智能部署做好数据准备

如何从数据角度为人工智能部署做好数据准备 本文指出面对变革加速和数字化领导力的重要性日益凸显这两大趋势,人工智能作为当今世界最具变革意义的创新之一,为企业提供了一条实现业务转型的变革之路,但运用人工智能之前必须从五个方面入手做…

[BZOJ3337] ORZJRY I --块状链表大毒瘤

link 题目大意:维护一个序列 支持: 1.单点插入 2.单点删除 3.区间翻转 4.区间旋转 5.区间加 6.区间赋值 7.询问区间和 8.询问区间极差 9.询问区间与给定某个数差值绝对值的最小值 10.询问区间第k小 11.询问区间某个数排名 艹 11个操作 太毒瘤了 写了一下…

Vue之事件处理(v-on)

文章目录 前言一、v-on基本使用二、使用举例1.传参和不传参使用2.$event占位代表事件对象3.函数用箭头函数时this作用域4.正常未用箭头函数的this指向(与未用箭头函数作比较) 总结 前言 v-on:事件绑定 一、v-on基本使用 格式:&l…