博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
6-9 Haar+adaboost人脸识别
阅读量:5339 次
发布时间:2019-06-15

本文共 2692 字,大约阅读时间需要 8 分钟。

我们重点分析了Haar特征的概念以及如何计算Haar特征,并介绍了Haar+Adaboost分类器它们的组合以及Adaboost分类器如何使用和训练。这节课我们将通过代码来实现一下Haar+Adaboost分类器实现的人脸识别。

计算jpg图片的haar特征,不过这一步opencv已经帮我们做了,所以我们不需要。我们只需要对这个图片进行一个灰度处理,因为所有的haar特征必须要是基于灰度图片来进行计算的。第四步,我们进行检测。所以我们要检测出来当前的haar特征的人脸以及人脸上的眼睛。总共有两个XML文件,其中一个XML文件描述的是人脸,另外一个XML文件描述的是眼睛。第五步,我们需要对检测出来的结果进行遍历,并且绘制一下我们检测出来的方框。比如说我把眼睛绘制出来,并且把脸同样使用一个方框给大家标注出来。

第一步引入XML文件。D:\opencv-3.4.1\opencv-3.4.1\data\haarcascades\haarcascade_eye.xml.眼睛识别的训练好的Adaboost分类器。D:\opencv-3.4.1\opencv-3.4.1\data\haarcascades\haarcascade_frontalface_default.xml.已经训练好的人脸识别的分类器。同时加载进来我们眼睛识别的XML文件。

第二步load当前的jpg.

第三步计算haar特征。因为这个计算的过程我们已经交给了opencv,所以这一步我们就可以跳过。我们只需要把它转化成一个灰度图像。灰度转化我们已经接触过了。我们需要把BGR图片转化成灰度图片。

第四步detect检测。cv2中有一个方法可以完成人脸识别的检测。这个方法的作用它主要是为了检测出图片中的人脸。我们在讲解haar特征的时候知道,图片的haar特征除了模板从上到下,从左到右地滑动之外,每一个模板还要进行一个比例缩放。所以这里有一个比例缩放的概念。第三个参数是我们的目标大小。比如说我们的人脸最小不能小于5个像素。所以这里还有一个5这个概念。我们想获取一下当前总共有多少张人脸,len(faces)检测一下当前人脸的个数。

第五步绘制一下当前每一个人脸,给每一个人脸画一个方框。既然是要画方框,那么我们就需要知道这个方框的xy宽高信息。我们使用for循环的形式来进行遍历。

这个demo不光是想实现人脸识别,同样还想实现人眼睛识别。

 

# 1 load xml 2 load jpg 3 haar gray 4 detect 5 drawimport cv2import numpy as np# load xml 1 file nameface_xml = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')eye_xml = cv2.CascadeClassifier('haarcascade_eye.xml')# load jpgimg = cv2.imread('face.jpg')cv2.imshow('src',img)# haar graygray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# detect faces 1 data 2 scale 3 5 faces = face_xml.detectMultiScale(gray,1.3,5)print('face=',len(faces))# drawfor (x,y,w,h) in faces:    cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)    roi_face = gray[y:y+h,x:x+w]    roi_color = img[y:y+h,x:x+w]    # 1 gray    eyes = eye_xml.detectMultiScale(roi_face)    print('eye=',len(eyes))    for (e_x,e_y,e_w,e_h) in eyes:        cv2.rectangle(roi_color,(e_x,e_y),(e_x+e_w,e_y+e_h),(0,255,0),2)cv2.imshow('dst',img)cv2.waitKey(0)

# 1 load xml 2 load jpg 3 haar gray 4 detect 5 drawimport cv2import numpy as np# load xml 1 file nameface_xml = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')eye_xml = cv2.CascadeClassifier('haarcascade_eye.xml')# load jpgimg = cv2.imread('face1.jpg')cv2.imshow('src',img)# haar graygray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# detect faces 1 data 2 scale 3 5 faces = face_xml.detectMultiScale(gray,1.3,5)print('face=',len(faces))# drawfor (x,y,w,h) in faces:    cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)    roi_face = gray[y:y+h,x:x+w]    roi_color = img[y:y+h,x:x+w]    # 1 gray    eyes = eye_xml.detectMultiScale(roi_face)    print('eye=',len(eyes))    for (e_x,e_y,e_w,e_h) in eyes:        cv2.rectangle(roi_color,(e_x,e_y),(e_x+e_w,e_y+e_h),(0,255,0),2)cv2.imshow('dst',img)cv2.waitKey(0)

 

转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/9779357.html

你可能感兴趣的文章
关于python中带下划线的变量和函数 的意义
查看>>
linux清空日志文件内容 (转)
查看>>
安卓第十三天笔记-服务(Service)
查看>>
Servlet接收JSP参数乱码问题解决办法
查看>>
【bzoj5016】[Snoi2017]一个简单的询问 莫队算法
查看>>
Ajax : load()
查看>>
MySQL-EXPLAIN执行计划Extra解释
查看>>
Zookeeper概述
查看>>
Zookeeper一致性级别
查看>>
Linux远程登录
查看>>
Linux自己安装redis扩展
查看>>
HDU 1016 Prime Ring Problem(dfs)
查看>>
C#中结构体与字节流互相转换
查看>>
session和xsrf
查看>>
跟随大神实现简单的Vue框架
查看>>
Linux目录结构
查看>>
LeetCode-Strobogrammatic Number
查看>>
luoguP3414 SAC#1 - 组合数
查看>>
五一 DAY 4
查看>>
(转)接口测试用例设计(详细干货)
查看>>