【计算机视觉·OpenCV】使用Haar+Cascade实现人脸检测

news/2024/10/17 16:29:42/

前言

人脸检测的目标是找出图像中所有的人脸对应的位置,算法的输出是人脸的外接矩形在图像中的坐标。使用 haar 特征和 cascade 检测器进行人脸检测是一种传统的方式,下面将给出利用 OpenCV 中的 haarcascade 进行人脸检测的代码。

请添加图片描述

程序流程

请添加图片描述

代码

import cv2# 原图
img = xxx# 使用预训练模型创建 Cascade 分类器
getCascade = lambda model_name: cv2.CascadeClassifier(cv2.data.haarcascades + model_name)
faceCascade = getCascade("haarcascade_frontalface_default.xml")# 获取原图像灰度图
imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 识别,将结果存储到 faces 变量中
faces = faceCascade.detectMultiScale(imgGray , 1.2 , 8)for (x,y,w,h) in faces:# 将结果绘制到原图中cv2.rectangle(img, (x,y), (x+w,y+h), (0,0,255) ,2)# 显示图像
cv2.imshow("img", img)
cv2.waitKey(0)

可选的人脸检测模型(区别是检测速度和精度不同):

  • haarcascade_frontalface_alt.xml
  • haarcascade_frontalface_alt2.xml
  • haarcascade_frontalface_alt_tree.xml
  • haarcascade_frontalface_default.xml
  • haarcascade_profileface.xml

说明:使用 haar 特征和 cascade 检测器进行目标检测属于传统机器学习的方式,检测精度较低,效果并不是非常理想

从图像中检测人脸

'''
Author: CloudSir
@Github: https://github.com/CloudSir
Date: 2023-04-05 10:03:53
LastEditTime: 2023-04-05 10:08:37
LastEditors: CloudSir
Description: 
'''
import cv2# 原图
img = cv2.imread("./test.jpg")# 使用预训练模型创建 Cascade 分类器
getCascade = lambda model_name: cv2.CascadeClassifier(cv2.data.haarcascades + model_name)
faceCascade = getCascade("haarcascade_frontalface_default.xml")# 获取原图像灰度图
imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 识别,将结果存储到 faces 变量中
faces = faceCascade.detectMultiScale(imgGray , 1.2 , 8)for (x,y,w,h) in faces:# 将结果绘制到原图中cv2.rectangle(img, (x,y), (x+w,y+h), (0,0,255) ,2)cv2.imshow("img", img)
cv2.waitKey(0)

原图:
请添加图片描述
结果:
请添加图片描述

从视频中检测人脸

'''
Author: CloudSir
@Github: https://github.com/CloudSir
Date: 2023-04-03 19:50:34
LastEditTime: 2023-04-05 09:59:51
LastEditors: CloudSir
Description: 
'''
import cv2
import numpy as npcap = cv2.VideoCapture("./test.mp4")while cap.isOpened():img = cap.read()[1]getCascade = lambda model_name: cv2.CascadeClassifier(cv2.data.haarcascades + model_name)faceCascade = getCascade("haarcascade_frontalface_default.xml")imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)faces = faceCascade.detectMultiScale(imgGray, 1.2, 8)for (x,y,w,h) in faces:cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),2)print(x, y, w, h)cv2.imshow("cam", img)if cv2.waitKey(1) == ord('q'): # 按下q退出cv2.destroyAllWindows()cap.release()break

从摄像头中实时检测人脸

'''
Author: CloudSir
@Github: https://github.com/CloudSir
Date: 2023-04-03 19:50:34
LastEditTime: 2023-04-05 09:59:51
LastEditors: CloudSir
Description: 
'''
import cv2
import numpy as npcap = cv2.VideoCapture(0)
while cap.isOpened():img = cap.read()[1]img = cv2.flip(img, 1) # 镜像getCascade = lambda model_name: cv2.CascadeClassifier(cv2.data.haarcascades + model_name)faceCascade = getCascade("haarcascade_frontalface_default.xml")imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)faces = faceCascade.detectMultiScale(imgGray, 1.2, 8)for (x,y,w,h) in faces:cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),2)print(x, y, w, h)cv2.imshow("cam", img)if cv2.waitKey(1) == ord('q'): # 按下q退出cv2.destroyAllWindows()cap.release()break

致正在学习计算机视觉的小伙伴们:

计算机视觉往往离不开 Python 语言,Python 是调用计算机视觉工具的必备语言,如 OpenCV、TensorFlow、PyTorch、PaddlePaddle 等都需要使用 Python。

如果你正打算学习计算机视觉,而恰巧又是一个 Python 新手,需要找一个可以在线学习的网站,我建议你去牛客网 ,他们的python题单是从最基础的输出、字符串格式化输出开始,经过运算符、列表、循环语句、条件语句、元组、字典、函数等知识点,一步一步教你慢慢学会Python那为数不多的基本语法,最后再配合上8道具有实践意义的综合实践题,可以帮你更加有效的巩固前面学会的知识。

  • 牛客网 - Python学习专区

在这里插入图片描述

加油,希望在计算机视觉这条路上的前方遇见你。


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

相关文章

JeecgBoot 3.5.1 版本发布,开源的企业级低代码平台

项目介绍 JeecgBoot是一款企业级的低代码平台!前后端分离架构 SpringBoot2.x,SpringCloud,Ant Design&Vue3,Mybatis-plus,Shiro,JWT 支持微服务。强大的代码生成器让前后端代码一键生成! JeecgBoot引领…

Vector - CAPL - Panel面板_01

前面有过简单的介绍panel面板的功能,不过终究感觉有点简陋,最近也在搞PyQT5,发现如果对于这块了解不多的情况下,想要做一些东西的话,简直无从下手,因此专门翻阅了之前的文章,查看了下确实缺少了…

使用wait监听tomcat服务启动

文章的wait脚本素材会放在末尾 执行docker-compose.yml文件之后就有mysql的主服务器,还有从服务器,还有tomcat服务,在tomcat中部署一个crm项目,tomcat服务中我们添加了启动顺序, # 启动顺序 depends_on: - mysql…

XO08R2 1SBP260109R1001接地系统能够为dcs提供屏蔽层,消除电子噪声干扰

​ XO08R2 1SBP260109R1001接地系统能够为dcs提供屏蔽层,消除电子噪声干扰 dcs合理、可靠的系统接地,是dcs系统非常重要的内容。为了保证dcs系统的监测控制精度和安全、可靠运行,必须对系统接地方式、接地要求、信号屏蔽、接地线截面选择、接…

【C++】STL——vector 深度剖析 及 模拟实现

文章目录 前言1. vector的介绍及使用1.1 vector的介绍1.2 vector的使用1.2.1 构造函数1.2.2 vector对象的遍历1.2.3 vector的迭代器1.2.4 reserve和resize1.2.5 insert和erase1.2.6 vector< char > 能否替代string 2. vector的模拟实现2.1 STL_vector源码浏览2.2 vector的…

从EXCEL BOM 描述中提取部分信息---正则表达式使用

从EXCEL BOM描述中提取关键的信息&#xff0c;用于建库填写内容&#xff0c;或者检查BOM等都会用到&#xff0c;如下大概通过两种方式实现信息的提取 1.手动Excel中提取 2.将如上1的方式用python实现&#xff0c;可以实现批量操作&#xff0c;减少操作带来的错误&#xff0c;…

WPS表格查找替换技巧:让你的工作效率翻倍

WPS表格中查找和替换是最基础的操作&#xff0c;看似简单&#xff0c;但是还有很多人在工作中不会熟练使用&#xff0c;其实掌握一些小技巧可以快速提高工作效率&#xff0c;本节课就来介绍几种比较有效的“查找和替换技巧”。 本节课目录&#xff1a; 1、常规的查找和替换 2…

PHP - 什么是 PHP? 为什么用 PHP? 有谁在用 PHP?

什么是 PHP&#xff1f; PHP 是一种脚本语言&#xff0c; "PHP Hypertext Preprocessor" 的首字母缩略词 PHP 语法吸收了 C 语言、Java 和 Perl 的特点&#xff0c;利于学习&#xff0c;使用广泛&#xff0c;主要适用于 Web 开发领域. PHP 是由 Rasmus Lerdorf 于 1…