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中urllib2模块的8个使用细节分享
Jan 01 Python
Python中使用logging模块打印log日志详解
Apr 05 Python
用Python编写生成树状结构的文件目录的脚本的教程
May 04 Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
Jun 03 Python
Python通过Django实现用户注册和邮箱验证功能代码
Dec 11 Python
代码分析Python地图坐标转换
Feb 08 Python
对Python实现简单的API接口实例讲解
Dec 10 Python
Python两个字典键同值相加的几种方法
Mar 05 Python
Python+Pyqt实现简单GUI电子时钟
Feb 22 Python
Python 合并多个TXT文件并统计词频的实现
Aug 23 Python
Python FFT合成波形的实例
Dec 04 Python
Python threading.local代码实例及原理解析
Mar 16 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跳转页面的几种实现方法详解
2013/06/08 PHP
Thinkphp中Create方法深入探究
2014/06/16 PHP
php实现的ping端口函数实例
2014/11/12 PHP
php实现的生成排列算法示例
2019/07/25 PHP
laravel5.5添加echarts实现画图功能的方法
2019/10/09 PHP
基于jquery的一个图片hover的插件
2010/04/24 Javascript
jquery.pagination.js 无刷新分页实现步骤分享
2012/05/23 Javascript
HTML+CSS+JS实现完美兼容各大浏览器的TABLE固定列
2015/04/26 Javascript
javascript实现数组中的内容随机输出
2015/08/11 Javascript
jQuery实现仿百度首页滑动伸缩展开的添加服务效果代码
2015/09/09 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
2016/12/26 Javascript
JS 在数组指定位置插入/删除数据的方法
2017/01/12 Javascript
全面解析Node.js 8 重要功能和修复
2017/06/02 Javascript
BootStrap下的弹出框加载select2框架失败的解决方法
2017/08/31 Javascript
浅谈JsonObject中的key-value数据解析排序问题
2017/12/06 Javascript
jQuery 改变P标签文本值方法
2018/02/24 jQuery
微信小程序自定义弹出模态框禁止底部滚动功能
2020/03/09 Javascript
JavaScript find()方法及返回数据实例
2020/04/30 Javascript
javascript实现贪吃蛇小游戏
2020/07/28 Javascript
Windows下安装python2.7及科学计算套装
2015/03/05 Python
python中子类继承父类的__init__方法实例
2016/12/15 Python
在Linux命令行终端中使用python的简单方法(推荐)
2017/01/23 Python
Django的信号机制详解
2017/05/05 Python
python模块之paramiko实例代码
2018/01/31 Python
使用浏览器访问python写的服务器程序
2019/10/10 Python
python利用dlib获取人脸的68个landmark
2019/11/27 Python
信号生成及DFT的python实现方式
2020/02/25 Python
Python异常处理机制结构实例解析
2020/07/23 Python
基于OpenCV的路面质量检测的实现
2020/11/04 Python
Django基于Models定制Admin后台实现过程解析
2020/11/11 Python
HTML5制作表格样式
2016/11/15 HTML / CSS
荷兰音乐会和音乐剧门票订购网站:Topticketshop
2019/08/27 全球购物
加拿大专业美发产品购物网站:Chatters
2021/02/28 全球购物
财务工作检讨书
2014/10/29 职场文书
2015年学校教育教学工作总结
2015/04/22 职场文书
2019年房屋委托租赁合同范本(通用版)!
2019/07/17 职场文书