【计算机视觉】Opencv中的Face Detection using Haar Cascades

标签(空格分隔): 【图像处理】


声明:引用请注明出处http://blog.csdn.net/lg1259156776/


五种典型的haar-like特征,为何能用来检测人脸,人眼呢?

它给出的一个经验之谈是

1. the region of the eyes is often darker than the region of the nose and cheeks

2. the eyes are darker than the bridge of the nose

但是这样的window在别的地方特征就不明显了,那么如何从160000+的features中选择最好的特征呢:它说采用Adaboost。



We select the features with minimum error rate, which means they are the features that best classifies the face and non-face images.

其实就是adaboost的过程,选择最小错误率的特征,实际上是提高错分图像的权重,然后再进行classification,然后计算新的错误率和新的权重,一直到达到精度或者需要的特征数量足够为止。

所以,最终的分类器实际上是这些弱分类器的加权和,之所以被称之为weak,说的就是它们单独工作可能不能分类,但是一起可以组成较强的分类器。论文中说,甚至200个特征就可以达到95%的精度。

它们最后建立了6000个特征,但是考虑到图像的大部分区域都不是人脸,所以最好还是用一个简单的方法判断是不是人来你,如果不是就直接扔掉,不再对该window进行后续的处理。这样就可以进一步的降低时间消耗。

这种思想真是值得借鉴,因为有点类似TLD中的方差分类器,方差分类器的作用就是通过快速的第一步淘汰掉一半的样本,然后使得进入后续分类器的样本数量减少,有助于提高速率。

利用haar-cascade detection,opencv中可以直接从xml文件中导入训练好的参数,并先进行人脸检测,然后在人脸位置开窗,检测人眼。就这样easy:

import numpy as np
2 import cv2
3
4 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
5 eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
6
7 img = cv2.imread('sachin.jpg')
8 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 1 faces = face_cascade.detectMultiScale(gray, 1.3, 5)
2 for (x,y,w,h) in faces:
3 cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
4 roi_gray = gray[y:y+h, x:x+w]
5 roi_color = img[y:y+h, x:x+w]
6 eyes = eye_cascade.detectMultiScale(roi_gray)
7 for (ex,ey,ew,eh) in eyes:
8 cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
9
10 cv2.imshow('img',img)
11 cv2.waitKey(0)
12 cv2.destroyAllWindows()


2015-11-05 调试记录 张朋艺

【计算机视觉】Opencv中的Face Detection using Haar Cascades的更多相关文章

  1. Object Detection: Face Detection using Haar Cascades

    目录   利用基于Haar特征的级联分类器实现人脸检测:官方教程 目标 学习基于Haar特征的级联分类器(Cascade Callifiers)实现人脸检测: 扩展到人眼检测: 基础知识 Paul V ...

  2. 对OpenCV中Haar特征CvHaarClassifierCascade等结构理解

    首先说一下这个级联分类器,OpenCV中级联分类器是根据VJ 04年的那篇论文(Robust Real-Time Face Detection)编写的,查看那篇论文,知道构建分类器的步骤如下: 1.根 ...

  3. 【计算机视觉】关于OpenCV中GPU配置编译的相关事项

    [计算机视觉]关于OpenCV中GPU配置编译的相关事项 标签(空格分隔): [计算机视觉] 前一段发现了OpenCV中关于GPU以及opencl的相关知识,打算升级一下对OpenCV的使用,但是发现 ...

  4. 【计算机视觉】【并行计算与CUDA开发】OpenCV中GPU模块使用

    CUDA基本使用方法 在介绍OpenCV中GPU模块使用之前,先回顾下CUDA的一般使用方法,其基本步骤如下: 1.主机代码执行:2.传输数据到GPU:3.确定grid,block大小: 4.调用内核 ...

  5. Opencv中integral计算积分图

    Paul Viola和Michael Jones在2001年首次将积分图应用在图像特征提取上,在他们的论文"Rapid Object Detection using a Boosted Ca ...

  6. opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较

    opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较 参考: http://wenku.baidu.com/link?url=1aDYAJBCrrK-uk2w3sSNai7h52x_ ...

  7. openCV中IplImage的使用

    http://blog.csdn.net/welcome_xu/article/details/7650680 IplImage结构详细分析   IplImage 结构解读: typedef stru ...

  8. 图像金字塔及其在 OpenCV 中的应用范例(下)

    前言 本文将主要讲解如何使用 OpenCV 实现图像分割,这也是图像金字塔在 OpenCV 中的一个重要应用. 关于图像分割 在计算机视觉领域,图像分割(Segmentation)指的是将数字图像细分 ...

  9. 立体视觉-opencv中立体匹配相关代码

    三种匹配算法比较 BM算法: 该算法代码: view plaincopy to clipboardprint? CvStereoBMState *BMState = cvCreateStereoBMS ...

随机推荐

  1. Spring Boot常用的注解

    @SpringBootApplication:包含@Configuration.@EnableAutoConfiguration.@ComponentScan通常用在主类上.由于大量项目都会在主要的配 ...

  2. C#中'??'符的使用

    ??  用于判断当前对象是否为null. 语法: 对象 ?? "当前对象为null时赋的默认值". string nullString = null; string Kong = ...

  3. FFmpeg处理音视频流程学习笔记

    原文作者:一叶知秋0830 链接:https://www.jianshu.com/p/1b715966af50 FFmpeg处理音视频完整流程包括5个阶段(输入文件—>编码数据包—>解码后 ...

  4. 洛谷 P2251 质量检测(st表)

    P2251 质量检测 题目提供者ws_ly 标签 难度 普及/提高- 题目描述 为了检测生产流水线上总共N件产品的质量,我们首先给每一件产品打一个分数A表示其品质,然后统计前M件产品中质量最差的产品的 ...

  5. python 多线程_thread

    import _thread import time def print_time(threadName, delay, iterations): start = int(time.time()) , ...

  6. Flask-CBV模式

    Flask中的CBV模式 ''' flask中的CBV模式: (1)导入views模块: from flask import views (2)定义类,继承views.MethodView类: cla ...

  7. 在AspNetCore3.0中使用Autofac

    1. 引入Nuget包 Autofac Autofac.Extensions.DependencyInjection 2. 修改Program.cs 将默认ServiceProviderFactory ...

  8. Node解析之----模块机制篇

    开篇前,我们先来看张图, 看node与W3C组织.CommonJS组织.ECMAScript之间的关系. Node借鉴来CommonJS的Modules规范实现了一套非常易用的模块系统,NPM对Pac ...

  9. csp-s模拟109

    这场考试状态是极差,也因而无畏地打下了三个乱搞.然而这场确实挺乱搞.T1状压但我没优化而选择循环展开,T2打$bitset$随机化(考场上打的有问题不是随机但也能A),T3贪心骗分.但是因为状态实在太 ...

  10. Qemu搭建ARM vexpress开发环境(一)

    Qemu搭建ARM vexpress开发环境(一) 标签(空格分隔): Qemu ARM Linux 嵌入式开发离不开硬件设备比如:开发板.外设等,但是如果只是想学习研究Linux内核,想学习Linu ...