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 全文检索引擎详解
Apr 25 Python
python远程连接服务器MySQL数据库
Jul 02 Python
python实现微信小程序自动回复
Sep 10 Python
pycharm重置设置,恢复默认设置的方法
Oct 22 Python
python判断完全平方数的方法
Nov 13 Python
pycharm运行和调试不显示结果的解决方法
Nov 30 Python
浅谈python requests 的put, post 请求参数的问题
Jan 02 Python
python将字典列表导出为Excel文件的方法
Sep 02 Python
Python+PyQt5+MySQL实现天气管理系统
Jun 16 Python
Django给表单添加honeypot验证增加安全性
May 06 Python
判断Python中的Nonetype类型
May 25 Python
Python实现归一化算法详情
Mar 18 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
新版mysql+apache+php Linux安装指南
2006/10/09 PHP
php中ob_get_length缓冲与获取缓冲长度实例
2014/11/20 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
js模拟滚动条(横向竖向)
2013/02/22 Javascript
jQuery ui插件的使用方法代码实例
2013/05/08 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
JavaScript动态添加style节点的方法
2015/06/09 Javascript
一张Web前端的思维导图分享
2015/07/03 Javascript
jQuery+CSS实现简单切换菜单示例
2016/07/27 Javascript
超实用的javascript时间处理总结
2016/08/16 Javascript
数组Array的排序sort方法
2017/02/17 Javascript
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
vue-cli在 history模式下的配置详解
2019/11/26 Javascript
Nodejs + Websocket 指定发送及群聊的实现
2020/01/09 NodeJs
微信小程序实现比较功能的方法汇总(五种方法)
2020/03/07 Javascript
vscode调试node.js的实现方法
2020/03/22 Javascript
python自动zip压缩目录的方法
2015/06/28 Python
python3监控CentOS磁盘空间脚本
2018/06/21 Python
Python爬虫的两套解析方法和四种爬虫实现过程
2018/07/20 Python
Python进阶之自定义对象实现切片功能
2019/01/07 Python
Python3匿名函数lambda介绍与使用示例
2019/05/18 Python
Django REST framework 分页的实现代码
2019/06/19 Python
python多进程(加入进程池)操作常见案例
2019/10/21 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
CSS3样式linear-gradient的使用实例
2017/01/16 HTML / CSS
css背景图片的背景裁切、背景透明度、背景变换等效果运用
2012/12/24 HTML / CSS
HTML5 canvas实现雪花飘落特效
2016/03/08 HTML / CSS
UNOde50美国官网:西班牙珠宝品牌
2020/08/15 全球购物
总会计师岗位职责
2014/02/19 职场文书
经济担保书范文
2014/04/02 职场文书
防灾减灾日活动总结
2014/08/26 职场文书
2014年业务工作总结
2014/11/17 职场文书
生日答谢词
2015/01/05 职场文书
小学母亲节活动总结
2015/02/10 职场文书
关于Spring配置文件加载方式变化引发的异常详解
2022/01/18 Java/Android