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

人脸检测的5种方式

文章内容:

1)人脸检测的5种方法

        1. Haar cascade + opencv

        2. HOG + Dlib

        3. CNN + Dlib

        4. SSD

        5. MTCNN

一。人脸检测的5种方法实现

 1. Haar cascade + opencv

        Haar是专门用来检测边缘特征的。基本流程如下:

第1步,读取图片

img = cv2.imread('./images/faces1.jpg')

第2步,将图片转化为灰度图片,因为Haar检测器识别的是灰度图片

img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

第3步,构造Haar检测器

face_detector = cv2.CascadeClassifier('./cascades/haarcascade_frontalface_default.xml')

第4步,检测器开始检测人脸

detections = face_detector.detectMultiScale(img_gray)

第5步,迭代器解析

for(x,y,w,h)in detections:cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),5)

第6步,显示

plt.imshow(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))

第7步,参数调节

-- scaleFactor

        scaleFactor是用来调节检测人脸大小的范围的,举个例子scaleFactor = 1表示人脸检测范围从1开始检测,人脸离相机远,脸小,离相机近脸大,因此scaleFactor的取值能一定程度上影响识别的精度。

        但有时候不论怎么调节scaleFactor都会出现下述情况 ,此时需要minNeighbor调节人脸框的候选数量

 --minNeighbors

        minNeighbors指每个人脸框最小的候选数量,算法为了检测人脸,可能会在一个人物照片的多个地方去检测人脸,最后会识别出多个地方可能都是人脸,这时minNeighbors会对这些识别结果进行排序取出最可能是人脸的地方,试想一下,如果所有的方框都集中在某一个区域,那么是不是代表这个区域内是人脸的可能性更高,当然是这样,这个方框集中在某一个区域的数量就叫做人脸框的候选数量用minNeighbors表示,显然minNeighbors较大比较好,太大了会出现漏检。

 --minSize

        minSize表示最小人脸尺寸,maxSize表示最大人脸尺寸,这两个参数都是用来控制人脸大小的,如

detections = face_detector.detectMultiScale(img_gray,scaleFactor = 1.2,minNeighbors =7,minSize=(1,1))

2. HOG + Dlib

第1步,读取图片

img = cv2.imread('./images/faces2.jpg')
plt.imshow(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))

第2步,构造HOG检测器,需要安装Dlib包(conda install -c conda-forge dlib)

import dlib
hog_face_detector = dlib.get_frontal_face_detector()

第3步,检测人脸

detections= hog_face_detector(img,1)#指的是scaleFactor=1

第4步,解析

for face in detections:x = face.left()y = face.top()r = face.right()b = face.bottom()cv2.rectangle(img,(x,y),(r,b),(0,255,0),5)

第5步,显示

plt.imshow(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))

3. CNN + Dlib

import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['figure.dpi'] = 200
img = cv2.imread('./images/faces2.jpg')
import dlib
cnn_face_detector = dlib.cnn_face_detection_model_v1('./weights/mmod_human_face_detector.dat')
detections = cnn_face_detector(img,1)
for face in detections:x = face.rect.left()y = face.rect.top()r = face.rect.right()b = face.rect.bottom()c = face.confidencecv2.rectangle(img,(x,y),(r,b),(0,255,0),5)
plt.imshow(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))

 4. SSD

import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['figure.dpi']=200
img = cv2.imread('./images/faces2.jpg')
face_detector = cv2.dnn.readNetFromCaffe('./weights/deploy.prototxt.txt','./weights/res10_300x300_ssd_iter_140000.caffemodel')
img_height = img.shape[0]
img_width = img.shape[1]
img_resize = cv2.resize(img,(500,300))
img_blob = cv2.dnn.blobFromImage(img_resize,1.0,(500,300),(104.0, 177.0, 123.0))
face_detector.setInput(img_blob)
detections = face_detector.forward()
num_of_detections = detections.shape[2]
img_copy = img.copy()
for index in range(num_of_detections):detection_confidence = detections[0,0,index,2]if detection_confidence>0.15:locations = detections[0,0,index,3:7] * np.array([img_width,img_height,img_width,img_height])lx,ly,rx,ry  = locations.astype('int')cv2.rectangle(img_copy,(lx,ly),(rx,ry),(0,255,0),5)
plt.imshow(cv2.cvtColor(img_copy,cv2.COLOR_BGR2RGB))   

5. MTCNN

import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['figure.dpi']=200img = cv2.imread('./images/faces2.jpg')
img_cvt = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
from mtcnn.mtcnn import MTCNN
face_detetor = MTCNN()
detections = face_detetor.detect_faces(img_cvt)
for face in detections:(x, y, w, h) = face['box']cv2.rectangle(img_cvt, (x, y), (x + w, y + h), (0,255,0), 5)
plt.imshow(img_cvt)

import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['figure.dpi']=200
img = cv2.imread('./images/test.jpg')
img_cvt = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
from mtcnn.mtcnn import MTCNN
face_detetor = MTCNN()
detections = face_detetor.detect_faces(img_cvt)
for face in detections:(x, y, w, h) = face['box']cv2.rectangle(img_cvt, (x, y), (x + w, y + h), (0,255,0), 5)
plt.imshow(img_cvt)

 5种人脸检测方式对比

视频流人脸检测 :

        1.构造haar人脸检测器

        2.获取视频流

        3.检测每一帧画面

        4.画人脸框并显示

import cv2
import numpy as np
cap = cv2.VideoCapture(0)
haar_face_detector = cv2.CascadeClassifier('./cascades/haarcascade_frontalface_default.xml')
while True:ret,frame = cap.read()fram = cv2.flip(frame,1)frame_gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)detection = haar_face_detector.detectMultiScale(frame_gray,minNeighbors=5)for(x,y,w,h) in detection:cv2.rectangle(fram,(x,y),(x+w,y+h),(0,255,0),5)cv2.imshow('Demo',fram)if cv2.waitKey(10) & 0xff == ord('q'):break
cap.release()
cv2.destoryAllWindows()

相关文章:

人脸检测的5种方式

文章内容: 1)人脸检测的5种方法 1. Haar cascade opencv 2. HOG Dlib 3. CNN Dlib 4. SSD 5. MTCNN 一。人脸检测的5种方法实现 1. Haar cascade opencv Haar是专门用来检测边缘特征的。基本流程如下: 第1步,读取图片 img …...

华为OD机试 - 乘积最大值(Python)

乘积最大值 题目 给定一个元素类型为小写字符串的数组 请计算两个没有相同字符的元素长度乘积的最大值 如果没有符合条件的两个元素返回0 输入 输入为一个半角逗号分割的小写字符串数组 2 <= 数组长度 <= 100 0 < 字符串长度 <= 50 输出 两个没有相同字符的元…...

【CMU15-445数据库】bustub Project #2:B+ Tree(上)

&#xff08;最近两个月学校项目有亿点忙&#xff0c;鸽得有点久&#xff0c;先来把 Project 2 补上&#xff09; 本节实验文档地址&#xff1a;Project #2 - BTree Project 2 要实现的是数据结构课上都会讲的一个经典结构 B 树&#xff0c;但是相信大多数的同学&#xff08;…...

功率放大器在lamb波方向算法的损伤定位中的应用

实验名称&#xff1a;基于PZT结Lamb波方向算法的损伤定位方法研究方向&#xff1a;损伤定位测试目的&#xff1a;Lamb波是在具有自由边界的固体板或层状结构中传输的一种弹性导波&#xff0c;由于其本身的传播特性&#xff0c;如沿传播路径衰减小&#xff0c;能量损失小&#x…...

时的科技迎1亿融资,这辆“空中的士”能否实现真正飞行?

近期&#xff0c;进行载人eVTOL的研发、生产和销售的时的科技宣布完成1亿元Pre-A轮融资&#xff0c;成立不到两年&#xff0c;这已是时的科技的第三轮融资&#xff0c;此前&#xff0c;时的科技已获得蓝驰创投和德迅投资千万美元种子轮投资。在不少人看来&#xff0c;时的科技所…...

idea 折叠代码块技巧 关于<editor-fold>

最近在使用delombok插件的时候&#xff0c;发现了一个有意思的小技巧 以前用VSstudio写代码的时候。经常使用代码块折叠的方法。但是在写java的时候&#xff0c;没怎么使用过 VSStudio中的写法 即 #region xxx ... your great coding #endregion这样在浏览的时候&#xff0c…...

python|第五章考试题及练习题

本篇文章是对北京理工大学嵩天老师的《Python语言程序设计》第五章考试题及练习题的学习记录。 一、考试题 1、随机密码生成 问题描述&#xff1a; 描述 补充编程模板中代码&#xff0c;完成如下功能&#xff1a;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪…...

DIY生日蛋糕笔记

自制6寸生日蛋糕笔记 实验环境&#xff1a; 长帝CRTF32PD搪瓷烤箱32升&#xff0c; 九阳电动打蛋器&#xff0c; 裱花盘一套 蛋糕盒子 称重器 硅胶刀 两个大碗1号和2号。 材料&#xff1a; 参考&#xff1a; https://www.bilibili.com/video/BV1t34y1Z7mL/?spm_id_from333…...

MybatisPlus------常用注解和逻辑删除以及设置统一前缀以及主键生成策略(六)

MybatisPlus------常用注解以及设置统一前缀以及主键生成策略&#xff08;六&#xff09; 在使用MybatisPlus的过程中时&#xff0c;实力类的Mapper继承BaseMapper&#xff0c;此时不要添加TableName注解也能够对表数据实现增删改查。 // mybatispuls 提供了接口实现单表的增…...

JQuery工具框架

JQuery工具框架 直接使用js编程比较麻烦&#xff0c;而且还必须考虑浏览器的差异性。 为了简化javascript的开发&#xff0c;一些javascript库诞生了。当今流行的javascript库有&#xff1a;jQuery诞生于2005 年&#xff0c;Dojo、 EXT_JS、DWR、YUI… jQuery是John Resig在…...

同一个整型常量怎样在不同进制间之间转换?

整型常量可以分别用二进制、八进制、十进制和十六进制表示&#xff0c;不同的进制并不影响数据本身的大小&#xff0c;同一个整型常量可以在不同进制之间转换&#xff0c;具体转换方式如下。1.十进制和二进制之间的转换(1)十进制转二进制。十进制转换成二进制就是一个除以2取余…...

UVa 225 Golygons 黄金图形 暴力搜索 剪枝 状态判断

题目链接&#xff1a;Golygons 题目描述&#xff1a; 给定nnn和kkk个障碍物的坐标&#xff0c;你需要走nnn次&#xff0c;第一次走一个单位距离&#xff0c;第二次走二个单位距离&#xff0c;…&#xff0c;第nnn次走nnn个单位距离。走得过程中不能穿过或者到达障碍物所在的点&…...

PowerShell中的对象是神马?

在PowerShell中,无处不在体现出一个概念,这个概念是什么呢?就是对象,对象是面向对象的语言中非常重要的概念,PowerShell的底层是.net,也是面向对象的语言,因此它也继承了面向对象的语言的语法特性。但是很多人在使用PowerShell 语言的时候会觉得有些疑惑,到底什么是Pow…...

Proxy lab

CSAPP Proxy Lab 本实验需要实现一个web代理服务器&#xff0c;实现逐步从迭代到并发&#xff0c;到最终的具有缓存功能的并发代理服务器。 Web 代理是充当 Web 浏览器和终端服务器之间的中间人的程序。浏览器不是直接联系终端服务器获取网页&#xff0c;而是联系代理&#x…...

【机器学习】Sklearn 集成学习-投票分类器(VoteClassifier)

前言 在【机器学习】集成学习基础概念介绍中有提到过&#xff0c;集成学习的结合策略包括&#xff1a; 平均法、投票法和学习法。sklearn.ensemble库中的包含投票分类器(Voting Classifier) 和投票回归器&#xff08;Voting Regressor)&#xff0c;分别对回归任务和分类任务的…...

Day892.MySql读写分离过期读问题 -MySQL实战

MySql读写分离过期读问题 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于MySql读写分离过期读问题的内容。 一主多从架构的应用场景&#xff1a;读写分离&#xff0c;以及怎么处理主备延迟导致的读写分离问题。 一主多从的结构&#xff0c;其实就是读写分离的基本…...

无线蓝牙耳机哪个品牌音质好?性价比高音质好的蓝牙耳机排行榜

其实蓝牙耳机购买者最担忧的就是音质问题&#xff0c;怕拿到手的蓝牙耳机低频过重又闷又糊&#xff0c;听歌闷耳的问题&#xff0c;但从2021年蓝牙技术开始突飞猛进后&#xff0c;蓝牙耳机的音质、连接甚至是功能都发生了很大的变化&#xff0c;下面我分享几款性价比高音质的蓝…...

店铺微信公众号怎么创建?

有些小伙伴问店铺微信公众号怎么创建&#xff0c;在解答这个问题之前&#xff0c;先简单说说店铺和微信公众号关系&#xff1a; 店铺一般是指小程序店铺&#xff0c;商家通过小程序店铺来卖货&#xff1b;微信公众号则是一个发布信息的平台。但是两者之间可以打通&#xff0c;…...

goLang Mutex用法案例详解

Golang以其并发性Goroutines而闻名。不仅是并发,还有更多。 因此,在这种情况下,我们必须确保多个goroutines不应该同时试图修改资源,从而导致冲突。 为了确保资源一次只能被一个goroutine访问,我们可以使用一个叫做sync.Mutex的东西。 This concept is called mutual ex…...

java常见的异常

异常分类 Throwable 是java异常的顶级类&#xff0c;所有异常都继承于这个类。 Error,Exception是异常类的两个大分类。 Error Error是非程序异常&#xff0c;即程序不能捕获的异常&#xff0c;一般是编译或者系统性的错误&#xff0c;如OutOfMemorry内存溢出异常等。 Exc…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...

高考志愿填报管理系统---开发介绍

高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发&#xff0c;采用现代化的Web技术&#xff0c;为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## &#x1f4cb; 系统概述 ### &#x1f3af; 系统定…...