这两天学习了人脸识别,看了学长写的代码,边看边码边理解搞完了一边,再又是自己靠着理解和记忆硬码了一边,感觉还是很生疏,就只能来写个随笔加深一下印象了。

关于人脸识别,首先需要了解的是级联分类器CascadeClassifier,它可以它既可以是Haar特征,也可以是LBP特征的分类器,可以加载OpenCV所提供的库当中的.xml文件,文件存放在anaconda\pkgs\libopencv-3.4.1-h875b8b8_3\Library\etc的haarcascades文件夹中,包含了许多个.xml文件,分别有不同的用途。而在使用级联分类器进行人脸检测时,需要调用 .detectMultiScale 方法,其中的参数为

  img:传入图像
  object:被检测的物体的矩形框向量组
  scaleFactor:表示前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1,即每次搜索窗口扩大10%
  minNegihbors,表示构成检测目标的相邻矩形的最小个数(默认为3个)
  flags:要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果设置为CV_HAAR_DO_CANNY_PRUNING,那么函数会使用Canny边缘检测来排除边缘过多或者过少的区域,这些通常不会是人脸所在区域
  minSize和maxSize:用来限制得到的目标区域的范围

其输出为一个vector矩阵,保存人脸的坐标和大小,需要注意的是,传入的图像必须为灰度图像,因为级联分类器检测需要接收灰度图像。

1.首先是静态图片中的人脸检测

这部分并不算难,看着注释应该也可以看懂,就不多做解释。

def StaticDetect(filename):'''静态图像的人脸检测'''#创建一个级联分类器,加载一个 .xml文件,它既可以是Haar特征,也可以是LBP特征的分类器face_casecade=cv2.CascadeClassifier('./haarcascades/haarcascade_frontalface_default.xml')#加载图像img=cv2.imread(filename,cv2.IMREAD_COLOR)#转换为灰度图像gray_img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)'''detectMultiScale进行人脸检测传入参数为args:img:传入图像object:被检测的物体的矩形框向量组scaleFactor:表示前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1,即每次搜索窗口扩大10%minNegihbors,表示构成检测目标的相邻矩形的最小个数(默认为3个)flags:要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果设置为CV_HAAR_DO_CANNY_PRUNING,那么函数会使用Canny边缘检测来排除边缘过多或者过少的区域,这些通常不会是人脸所在区域minSize和maxSize:用来限制得到的目标区域的范围输出为:vector保存各个人脸的坐标、大小(用矩形表示)'''faces=face_casecade.detectMultiScale(gray_img,1.2,5)for (x,y,w,h) in faces:#在原图上绘制矩形img=cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)cv2.namedWindow('Face_Detected')cv2.imshow('Face_Detected',img)cv2.waitKey(0)cv2.destroyAllWindows()

检测的结果如下图,图片是我从网上随便找的一张图,如果有任何侵犯的地方,请及时联系我,会即刻删除。我们可以发现结果并不是太好,有许多漏检,由于是初学则不做过多改正尝试,可以尝试修改级联分类器中的文件以及搜索窗口比例系数来改变检测准确度。

2.动态人脸检测

这一部分采用了两个级联分类器,一个检测面部,一个检测眼睛,需要注意的是,眼睛的检测是在人脸检测后再进行检测,即先从大的人脸开始画出矩形再到眼睛画出的矩形。检测眼睛时可以把眼镜摘下,会准确很多。

def Video_detected():'''从视频中进行人脸检测'''#创建一个级联分类器,家在一个  .xml文件它既可以是Haar特征,也可以是LBP特征的分类器face_cascade=cv2.CascadeClassifier('./haarcascades/haarcascade_frontalface_default.xml')eye_cascade=cv2.CascadeClassifier('./haarcascades/haarcascade_eye.xml')#打开摄像头camera=cv2.VideoCapture(0)cv2.namedWindow('Dynamic')while(True):#读取一帧图像   retret,frame=camera.read()#判断图片读取是否成功if ret:gray_img=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)#人脸检测faces=face_cascade.detectMultiScale(gray_img,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_img[y:y+h,x:x+w]#眼睛检测eyes=eye_cascade.detectMultiScale(roi_gray,1.1,5,0,(40,40))for (ex,ey,ew,eh) in eyes:cv2.rectangle(frame,(ex+x,ey+y),(ex+x+ew,ey+y+eh),(0,255,0),2)      #绿色
                cv2.imshow('Dynamic',frame)#如果按下q键则退出if cv2.waitKey(10) & 0xff==ord('q'):breakcamera.release()cv2.destroyAllWindows()

检测结果如下图,可以发现对象不多的时候,人脸检测还是挺准确的,尝试过后,动态情况下多个人脸也是可以检测出来的。我们可以发现,在眼睛的检测中多了几个参数,这些参数是由于眼睛比较小,并且有鼻子等造成的阴影可能会产生假阳性,因此通过限制检测的眼睛大小为40*40可以去除假阳性的影响。后续可以尝试不同的参数的检测精度,这里就不多做描述。

这里附上原博客的连接:https://www.cnblogs.com/zyly/p/9410563.html

2018.10.28

转载于:https://www.cnblogs.com/do-hardworking/p/9866258.html

python中使用Opencv进行人脸检测相关推荐

  1. opencv检测图片失焦 python_如何在Python中使用OpenCV执行模糊检测

    如何在Python中使用OpenCV执行模糊检测 目标检测 最后更新 2020-10-12 14:23 阅读 154 最后更新 2020-10-12 14:23 阅读 154 目标检测 ##FlyAI ...

  2. 极简Python:用opencv实现人脸检测,并用本地摄像头实现视频流的人脸识别

    文章目录 1. 图片人脸识别 2. 图片人脸检测+人眼检测 3. 视频流的人脸识别 包括图片级别的人脸检测和调用本地摄像头实现视频流级别的人脸识别. 废话不大多说,直接上代码,喜欢的同学可以收藏! 1 ...

  3. 在Python中使用OpenCV进行直线检测

    1. 引言 在图像处理中,直线检测是一种常见的算法,它通常获取n个边缘点的集合,并找到通过这些边缘点的直线.其中用于直线检测,最为流行的检测器是基于霍夫变换的直线检测技术. 2. 霍夫变换 霍夫变换是 ...

  4. 使用OpenCV实现人脸检测(Python)

    文章目录 Introduction 使用 OpenCV 的 Haar 级联分类器 导入工具包和模型路径 级联分类器 积分图像 使用 Adaboost 学习分类函数 级联分类器 输入 检测图像中的人脸 ...

  5. 基于python的opencv_基于Python和OpenCV的人脸检测

    面部识别一直是一个热门话题,也从来没有像现在这样容易理解.在这篇文章中,我们首先介绍如何使用Python检测人脸. 机器学习.人工智能和人脸识别是当前的重要课题.所以我想,使用Python来检测照片中 ...

  6. 基于opencv的人脸检测与识别(python)(1)

    基于opencv的人脸检测与识别(python语言)(1) 人脸检测和识别技术就目前而言,已经相对成熟,各类算法层出不穷,这都归功于各位奋斗在一线的大佬的努力(站在巨人的肩膀上的感觉就是爽).本文是参 ...

  7. Python图像处理,cv2模块,OpenCV实现人脸检测蔡徐坤

    前言 利用Python实现OpenCV实现人脸检测,废话不多说~ 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: cv2模块: 以及一些Python自带的模块. 环境搭建 ...

  8. 使用OpenCV进行人脸检测和戴墨镜特效实战(附Python源码)

     需要源码和图片请点赞关注收藏后评论区留言私信~~~ 人脸识别是基于人的脸部特征信息进行身份识别的一种生物识别技术,也是计算机视觉重点发展的技术.机器学习算法诞生之后,计算机可以通过摄像头等输入设备自 ...

  9. 在 Python 中使用 OpenCV 高斯模糊我这张的丑脸

    @Author:Runsen 谁都无法否认,长得好看的人就是更具有吸引力,赏心悦目谁都喜欢.好看的人无论在职场或情场,都一定更占优势. 但是,此「颜值」非彼「颜值」.一说到「颜值」,大部分想到的是脸蛋 ...

  10. 【OpenCV实战】OpenCV实现人脸检测详解(含代码)

    OpenCV中有许多可以进行人脸.人眼检测的特征文件,今天我们利用OpenCV中自带的特征文件haarcascade_frontalface_default.xml来进行人脸检测. [OpenCV实战 ...

最新文章

  1. 【html】如何解决标签设置成超链接后字体格式及颜色变化的问题
  2. NYOJ-232 How to eat more Banana
  3. 网络时间协议 --- 网络对时程序
  4. webservice(二)简单实例
  5. 【Python Turtle合集】”外面的花已经开得很像样了, 我看到风拥作一团, 前来庆贺“(春天来啦~)
  6. (74)分析 APC 插入过程 —— KeInsertQueueApc , KiInsertQueueApc
  7. mysql命令查询语句
  8. 《自卑与超越》读书笔记(part5)--如果教育者把性格和智力的发展都归之于遗传,那么教育就没有什么意义了
  9. 修改mysql文件的存储路径
  10. debian mysql目录_debian Squeeze配置apache php mysql环境,debian中apache目录结
  11. python建立数据库连接时出错_python – 尝试连接到localhost上的数据库时出现pyodbc连接错误...
  12. oracle如何获取日期月份差,Oracle获取日期和月份
  13. 并行算法:如何利用并行处理提高算法的执行效率?
  14. java面试| 精选基础题(1)
  15. 计算机组成原理(微课版 谭志虎)试题及答案
  16. 【微信】公众号:免费注册个人公众号 公众号设置手册
  17. 升级Spring Boot 2.x后RelaxedPropertyResolver不可用的解决方案
  18. 在下拉列表框上添加--请选择--
  19. android系统方法裁剪图片 华为手机显示为圆
  20. Libgdx介绍及环境安装

热门文章

  1. CNET:乔布斯留给我们的12条宝贵经验
  2. ExtJS 4中动态加载的路径设置
  3. WPF Rendering 2(硬件加速、软件加速)
  4. 数据库信息查询(作者不是我)
  5. 数据结构与算法 第三章 树以及相关遍历方法
  6. 2018 推荐系统总结
  7. 当知识图谱遇上预训练语言模型 -- 留言送书
  8. 【NLP笔记】理论与实践详解词向量
  9. 【从0开始机器学习】神经网络识别手写字符!
  10. 【NLP Subword】三大算法原理:BPE、WordPiece、ULM