Object Detection: Face Detection using Haar Cascades
利用基于Haar特征的级联分类器实现人脸检测;官方教程
目标
- 学习基于Haar特征的级联分类器(Cascade Callifiers)实现人脸检测;
- 扩展到人眼检测;
基础知识
Paul Viola、Michael Jones: Rapid Object Detection using a Boosted Cascade of Simple Features
OpenCV中提供了训练和检测两个部分;下面的代码主要是检测部分,也就是说利用OpenCV提供的训练好的模型进行检测;OpenCV提供了不少训练好的分类器模型,如人脸、眼睛、笑容,分类器文件位于GitHub;
有关训练的部分会涉及到上面那篇发表在2001年的CVPR上的文章;Haar特征,积分图,还有级联分类器等概念;
OpenCV实现人脸检测
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# @Time : 19-4-21 下午1:08
# @Author : chen
"""
基于Haar特征的级联分类器用于人脸检测
https://docs.opencv.org/4.0.0/d7/d8b/tutorial_py_face_detection.html
"""
import cv2
# 下面两个文件下载地址
# https://github.com/opencv/opencv/tree/master/data/haarcascades
print("[INFO] 加载.xml文件")
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
# 读取图片,并转换成灰度图像
print("[INFO] 转换成灰度图像")
img = cv2.imread('face_2.jpeg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 在灰度图像下检测人脸
print("[INFO] 人脸检测")
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
count = 0
for (x, y, w, h) in faces:
print("[INFO] 检测到第{}张人脸图像".format(count))
count += 1
# 画矩形圈出人脸
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
# 获取人脸灰度图像和彩色图像
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
# 在人脸灰度图像上检测眼睛位置
eyes = eye_cascade.detectMultiScale(roi_gray)
for (ex, ey, ew, eh) in eyes:
cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
从视频流中检测人脸
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# @Time : 19-4-21 下午1:56
# @Author : chen
"""
从视频流中检测人脸位置,眼睛位置
"""
# import the necessary packages
from imutils.video import VideoStream
from imutils.video import FPS
import time
import cv2
# 加载.xml文件
print("[INFO] 加载.xml文件")
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
# 初始化视频流,唤醒摄像头
print("[INFO] 开启摄像头")
vs = VideoStream(src=0).start()
time.sleep(2.0)
# start the FPS throughput estimator
fps = FPS().start()
# loop over frames from the video file stream
while True:
# 捕获视频帧
frame = vs.read()
# 读取图片,并转换成灰度图像
# img = cv2.imread(img)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 在灰度图像下检测人脸
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
# 画矩形圈出人脸
cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
# 获取人脸灰度图像和彩色图像
roi_gray = gray[y:y + h, x:x + w]
roi_color = frame[y:y + h, x:x + w]
# 在人脸灰度图像上检测眼睛位置
eyes = eye_cascade.detectMultiScale(roi_gray)
for (ex, ey, ew, eh) in eyes:
cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2)
# update the FPS counter
fps.update()
# show the output frame
cv2.imshow("Frame", frame)
key = cv2.waitKey(1) & 0xFF
# if the `q` key was pressed, break from the loop
if key == ord("q"):
break
# stop the timer and display FPS information
fps.stop()
print("[INFO] elasped time: {:.2f}".format(fps.elapsed()))
print("[INFO] approx. FPS: {:.2f}".format(fps.fps()))
# do a bit of cleanup
cv2.destroyAllWindows()
vs.stop()
Object Detection: Face Detection using Haar Cascades的更多相关文章
- 【计算机视觉】Opencv中的Face Detection using Haar Cascades
[计算机视觉]Opencv中的Face Detection using Haar Cascades 标签(空格分隔): [图像处理] 声明:引用请注明出处http://blog.csdn.net/lg ...
- [Object Tracking] Contour Detection through OpenCV
利用OpenCV检测图像中的长方形画布或纸张并提取图像内容 - 阅读笔记 相对来说,如下链接是此文的高阶方案版本,做对比是极好的. [Object Tracking] Contour Detectio ...
- [Object Tracking] Contour Detection through Tensorflow running on smartphone
From: 手机端运行卷积神经网络的一次实践 -- 基于 TensorFlow 和 OpenCV 实现文档检测功能 貌似不错的东西:移动端视觉识别模型:MobileNets Holistically- ...
- 通过haar Cascades检测器来实现面部检测
在OpenCV中已经封装的很好只需要使用cv::CascadeClassifier类就可以很容易的实现面部的检测, 三大步: 1.训练好的特征分类器配置文件haarcascade_frontalfac ...
- Object Detection with 10 lines of code - Image AI
To perform object detection using ImageAI, all you need to do is Install Python on your computer sys ...
- (转)Awesome Object Detection
Awesome Object Detection 2018-08-10 09:30:40 This blog is copied from: https://github.com/amusi/awes ...
- YOLO object detection with OpenCV
Click here to download the source code to this post. In this tutorial, you’ll learn how to use the Y ...
- 行人检测(Pedestrian Detection)资源整合
一.纸 评论文章分类: [1] D. Geronimo, and A. M.Lopez. Vision-based Pedestrian Protection Systems for Intellig ...
- Clash Detection
Clash Detection eryar@163.com Abstract. Clash detection is used for the model collision check. The p ...
随机推荐
- unix下网络编程之I/O复用(二)
select函数 该函数允许进程指示内核等待多个事件中的任何一个发生,并仅在有一个或是多个事件发生或经历一段指定的时间后才唤醒它.我们调用select告知内核对哪些描述字(就读.写或异常条件)感兴趣以 ...
- POJ2236(并查集入门)
Wireless Network Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 22977 Accepted: 961 ...
- maven打包指定main函数的入口,生成依赖的包
为了使Jar包中指定Main方法位置和生成依赖包,需要在pom文件中加入如下配置: <build> <plugins> <plugin> <groupId&g ...
- Django基础(二)—— models
六:Models示例 Django本身提供了非常强大易使用的ORM组件,并且支持多种数据库. 配置连接数据文件 在自己创建的project 目录下编辑settings.py DATABASES = { ...
- Jenkins构建触发器定时Poll SCM、Build periodically
一.时间设置语法 时间设置由5位组成:* * * * * 第一位:表示分钟,取值0-59. 第二位:表示小时,取值0-23. 第三位:表示日期,取值1-31. 第四位:表示月份,取值1-12. 第五位 ...
- 调试json
console.log("======================") // 转对象 //var obj = eval('(' + data + ')'); // 转对象 // ...
- spring @Resource与@Autowired注解详解
具有依赖关系的Bean对象,利用下面任意一种注解都可以实现关系注入: 1)@Resource (默认首先按名称匹配注入,然后类型匹配注入) 2)@Autowired/@Qualifier (默认按类型 ...
- leetcode443
使用两个数组分别记录字符和对应的数字,然后清除原来的vector,重新向里面添加元素.注意判断1个字符时,不将'1'加入vector. int compress(vector<char>& ...
- linux命令-passwd
修改密码 #passwd 新密码 重新输入密码 #passwd dennywang ////命令+用户名 ////////////////////////////////////////////// ...
- C语言学习笔记--C语言中的宏定义
1. C 语言中的宏定义 (1)#define 是预处理器处理的单元实体之一(因此,预处理器只是简单的进行替换,并不(2)#define 定义的宏可以出现在程序的任意位置(包括函数体的内部)(3)#d ...