Python学习笔记之图片人脸检测识别实例教程


Posted in Python onMarch 06, 2019

前言

随着科技的发展,人脸识别技术在许多领域得到的非常广泛的应用,手机支付、银行身份验证、手机人脸解锁等等。

识别

废话少说,这里我们使用 opencv 中自带了 haar人脸特征分类器,利用训练好的 haar 特征的 xml 文件,在图片上检测出人脸的坐标,利用这个坐标,我们可以将人脸区域剪切保存,也可以在原图上将人脸框出。

代码实现:

# -*-coding:utf8-*-#
import os
import cv2
from PIL import Image, ImageDraw
from datetime import datetime

"""
分类器 https://github.com/opencv/opencv/tree/master/data/haarcascades
安装模块:pip install Pillow pip install opencv-python
博客:https://blog.52itstyle.vip/archives/3771/
"""


def detectFaces(image_name):
 img = cv2.imread(image_name)
 face_cascade = cv2.CascadeClassifier(os.getcwd()+"\\haarcascade\\haarcascade_frontalface_alt.xml")
 if img.ndim == 3:
  gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
 else:
  gray = img # if语句:如果img维度为3,说明不是灰度图,先转化为灰度图gray,如果不为3,也就是2,原图就是灰度图

 faces = face_cascade.detectMultiScale(gray, 1.2, 5) # 1.3和5是特征的最小、最大检测窗口,它改变检测结果也会改变
 result = []
 for (x, y, width, height) in faces:
  result.append((x, y, x + width, y + height))
 return result


# 保存人脸图
def saveFaces(image_name):
 faces = detectFaces(image_name)
 if faces:
  # 将人脸保存在save_dir目录下。
  # Image模块:Image.open获取图像句柄,crop剪切图像(剪切的区域就是detectFaces返回的坐标),save保存。
  save_dir = image_name.split('.')[0] + "_faces"
  os.mkdir(save_dir)
  count = 0
  for (x1, y1, x2, y2) in faces:
   file_name = os.path.join(save_dir, str(count) + ".jpg")
   Image.open(image_name).crop((x1, y1, x2, y2)).save(file_name)
   count += 1


if __name__ == '__main__':
 time1 = datetime.now()
 result = detectFaces(os.getcwd()+"\\images\\gaoyuanyuan.jpg")
 time2 = datetime.now()
 print("耗时:" + str(time2 - time1))
 if len(result) > 0:
  print("有人存在!!---》人数为:" + str(len(result)))
 else:
  print('视频图像中无人!!')

 drawFaces(os.getcwd()+"\\images\\", "hanxue.jpg")
 saveFaces(os.getcwd()+\\images\\gaoyuanyuan.jpg)

识别效果图:

Python学习笔记之图片人脸检测识别实例教程

多人识别效果:

Python学习笔记之图片人脸检测识别实例教程

经过测试,最终选用了 haarcascade_frontalface_alt.xml 做人脸识别,识别率最高。

人脸检测分类器对比:

级联分类器的类型 XML文件名
人脸检测器(默认) haarcascade_frontalface_default.xml
人脸检测器(快速的Haar) haarcascade_frontalface_alt2.xml
人脸检测器(Tree) haarcascade_frontalface_alt_tree.xml
人脸检测器(Haar_1) haarcascade_frontalface_alt.xml

小结

开源的人脸检测分类器对于标准的人脸识别足够了,要想精确识别比如,侧脸、模糊、光照、遮挡的人脸,只能通过深度机器学习进一步优化识别精度和速度。

源码

https://gitee.com/52itstyle/Python/tree/master/Day09(本地下载)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python操作列表的常用方法分享
Feb 13 Python
python BeautifulSoup设置页面编码的方法
Apr 03 Python
python使用PyGame绘制图像并保存为图片文件的方法
Apr 24 Python
python获取当前日期和时间的方法
Apr 30 Python
Python使用chardet判断字符编码
May 09 Python
Python 3.x读写csv文件中数字的方法示例
Aug 29 Python
python写一个md5解密器示例
Feb 23 Python
Python面向对象基础入门之设置对象属性
Dec 11 Python
python获取服务器响应cookie的实例
Dec 28 Python
元组列表字典(莫烦python基础)
Apr 03 Python
Python插件机制实现详解
May 04 Python
Django实现简单的分页功能
Feb 22 Python
详解django2中关于时间处理策略
Mar 06 #Python
Django使用AJAX调用自己写的API接口的方法
Mar 06 #Python
Django+Xadmin构建项目的方法步骤
Mar 06 #Python
Python中最大递归深度值的探讨
Mar 05 #Python
Python小进度条显示代码
Mar 05 #Python
Python嵌套式数据结构实例浅析
Mar 05 #Python
Python字典遍历操作实例小结
Mar 05 #Python
You might like
根德Grundig S400/S500/S700电路分析
2021/03/02 无线电
php获取用户IPv4或IPv6地址的代码
2012/11/15 PHP
深入Nginx + PHP 缓存详解
2013/07/11 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
2014/07/01 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
2017/06/12 PHP
PHP中TP5 上传文件的实例详解
2017/07/31 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
js 判断checkbox是否选中的实现代码
2010/11/23 Javascript
jQuery+CSS 实现随滚动条增减的汽水瓶中的液体效果
2011/09/26 Javascript
基于jquery实现状态限定编辑的代码
2012/02/11 Javascript
jquery mobile实现拨打电话功能的几种方法
2013/08/05 Javascript
基于mouseout和mouseover等类似事件的冒泡问题解决方法
2013/11/18 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
2014/03/28 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
2016/01/12 Javascript
JavaScript模版引擎的基本实现方法浅析
2016/02/15 Javascript
jQuery中on绑定事件后引发的事件冒泡问题如何解决
2016/05/25 Javascript
js转换对象为xml
2017/02/17 Javascript
vue router自动判断左右翻页转场动画效果
2017/10/10 Javascript
JS实现的缓冲运动效果示例
2018/04/30 Javascript
angular2 NgModel模块的具体使用方法
2019/04/10 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
2019/06/11 Javascript
Promise扫盲贴
2019/06/24 Javascript
JavaScript仿京东秒杀倒计时
2020/03/17 Javascript
python如何为被装饰的函数保留元数据
2018/03/21 Python
Python封装原理与实现方法详解
2018/08/28 Python
python射线法判断检测点是否位于区域外接矩形内
2019/06/28 Python
Python进程间通信 multiProcessing Queue队列实现详解
2019/09/23 Python
python实现猜数游戏(保存游戏记录)
2020/06/22 Python
Python collections.deque双边队列原理详解
2020/10/05 Python
斯洛伐克电子产品购物网站:DATART
2020/04/05 全球购物
银行员工辞职信范文
2014/01/20 职场文书
中学生操行评语
2014/04/24 职场文书
企业宣传策划方案
2014/05/29 职场文书
收款授权委托书
2014/10/02 职场文书
仙境之桥观后感
2015/06/16 职场文书
Python OpenCV 图像平移的实现示例
2021/06/04 Python