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的Django框架中inclusion_tag的使用
Jul 21 Python
Python正则表达式匹配中文用法示例
Jan 17 Python
OpenCV实现人脸识别
Apr 07 Python
Python实现针对含中文字符串的截取功能示例
Sep 22 Python
pycharm 取消默认的右击运行unittest的方法
Nov 29 Python
Pytorch卷积层手动初始化权值的实例
Aug 17 Python
python读取tif图片时保留其16bit的编码格式实例
Jan 13 Python
Pytorch之finetune使用详解
Jan 18 Python
Python利用PyPDF2库获取PDF文件总页码实例
Apr 03 Python
浅谈python多线程和多线程变量共享问题介绍
Apr 17 Python
Django设置Postgresql的操作
May 14 Python
使用Keras预训练好的模型进行目标类别预测详解
Jun 27 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读取PPT文件的方法
2015/12/10 PHP
Netbeans 8.2将支持PHP7 更精彩
2016/06/13 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
2017/08/02 PHP
javascript EXCEL 操作类代码
2009/07/30 Javascript
基于JQuery实现鼠标点击文本框显示隐藏提示文本
2012/02/23 Javascript
animate动画示例(泪奔的小孩)及stop和delay的使用
2013/05/06 Javascript
JS localStorage实现本地缓存的方法
2013/06/22 Javascript
js读取配置文件自写
2014/02/11 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
深入理解JavaScript中为什么string可以拥有方法
2016/05/24 Javascript
JavaScript中的操作符类型转换示例总结
2016/05/30 Javascript
浅谈vue项目优化之页面的按需加载(vue+webpack)
2017/12/11 Javascript
微信小程序实现MUI数字输入框效果
2018/01/31 Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
2018/08/13 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
2018/12/13 Javascript
vue实现购物车抛物线小球动画效果的方法详解
2019/02/13 Javascript
微信小程序用户盒子、宫格列表的实现
2020/07/01 Javascript
Handtrack.js库实现实时监测手部运动(推荐)
2021/02/08 Javascript
让python json encode datetime类型
2010/12/28 Python
Python数字图像处理之霍夫线变换实现详解
2018/01/12 Python
Python实现的井字棋(Tic Tac Toe)游戏示例
2018/01/31 Python
用Python一键搭建Http服务器的方法
2018/06/01 Python
浅谈Python的list中的选取范围
2018/11/12 Python
python支持多继承吗
2020/06/19 Python
解决pytorch 数据类型报错的问题
2021/03/03 Python
HTML5 File接口在web页面上使用文件下载
2017/02/27 HTML / CSS
欧洲有机婴儿食品最大的市场:Organic Baby Food(供美国和加拿大)
2018/03/28 全球购物
英国领先的电动可调床制造商:Laybrook
2019/12/26 全球购物
外贸主管求职简历的自我评价
2013/10/23 职场文书
平面设计师的工作职责
2013/11/21 职场文书
学校端午节活动方案
2014/08/23 职场文书
小学感恩节活动策划方案
2014/10/06 职场文书
工程合作意向书范本
2015/05/09 职场文书
yyds什么意思?90后已经听不懂00后讲话了……
2022/02/03 杂记
画错魏国疆域啦!《派对咖孔明》动画因作画失误于官网致歉
2022/04/07 日漫
CSS中理解层叠性及权重如何分配
2022/12/24 HTML / CSS