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判断字符串与大小写转换
Jun 08 Python
磁盘垃圾文件清理器python代码实现
Aug 24 Python
Python爬虫包BeautifulSoup异常处理(二)
Jun 17 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
Jan 30 Python
基于python实现高速视频传输程序
May 05 Python
PyQt5 加载图片和文本文件的实例
Jun 14 Python
python中调试或排错的五种方法示例
Sep 12 Python
python实现连续变量最优分箱详解--CART算法
Nov 22 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
May 22 Python
python设置表格边框的具体方法
Jul 17 Python
Python脚本调试工具安装过程
Jan 11 Python
pytorch 运行一段时间后出现GPU OOM的问题
Jun 02 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
PHP中的类-什么叫类
2006/11/20 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
2016/05/13 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
2018/05/21 PHP
javascript是怎么继承的介绍
2012/01/05 Javascript
Extjs中使用extend(js继承) 的代码
2012/03/15 Javascript
终于解决了IE8不支持数组的indexOf方法
2013/04/03 Javascript
jQuery基于当前元素进行下一步的遍历
2014/05/20 Javascript
JavaScript极简入门教程(二):对象和函数
2014/10/25 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
js实现完美兼容各大浏览器的人民币大小写相互转换
2015/10/29 Javascript
jQuery实现非常实用漂亮的select下拉菜单选择效果
2015/11/06 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
AngularJS自定义服务与fliter的混合使用
2016/11/24 Javascript
jQuery为DOM动态追加事件的方法
2017/02/16 Javascript
angularjs ui-router中路由的二级嵌套
2017/03/10 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
2017/05/25 Javascript
通过fastclick源码分析彻底解决tap“点透”
2017/12/24 Javascript
Vue+Element实现动态生成新表单并添加验证功能
2019/05/23 Javascript
微信小程序仿今日头条导航栏滚动解析
2019/08/20 Javascript
js的Object.assign用法示例分析
2020/03/05 Javascript
[01:14]辉夜杯战队访谈宣传片—NEWBEE.Y
2015/12/26 DOTA
python中base64加密解密方法实例分析
2015/05/16 Python
Python使用pymysql小技巧
2017/06/04 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
python将下载到本地m3u8视频合成MP4的代码详解
2020/11/24 Python
使用CSS3 制作一个material-design 风格登录界面实例
2016/12/12 HTML / CSS
Pedro官网:新加坡时尚品牌
2019/08/27 全球购物
几个数据库方面的面试题
2016/07/01 面试题
端午节活动总结
2014/08/26 职场文书
2014年商场国庆节活动策划方案
2014/09/16 职场文书
蛋糕店创业计划书范文
2014/09/21 职场文书
导游词之上饶龟峰
2019/10/25 职场文书
小程序与后端Java接口交互实现HelloWorld入门
2021/07/09 Java/Android