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重新引入被覆盖的自带function
Jul 16 Python
在Linux上安装Python的Flask框架和创建第一个app实例的教程
Mar 30 Python
解析Python中的变量、引用、拷贝和作用域的问题
Apr 07 Python
Python星号*与**用法分析
Feb 02 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
Dec 28 Python
深入浅析python3中的unicode和bytes问题
Jul 03 Python
通过celery异步处理一个查询任务的完整代码
Nov 19 Python
浅谈python的elementtree模块处理中文注意事项
Mar 06 Python
Python Spyder 调出缩进对齐线的操作
Feb 26 Python
python实现三阶魔方还原的示例代码
Apr 28 Python
解决python绘图使用subplots出现标题重叠的问题
Apr 30 Python
Python正则表达式中flags参数的实例详解
Apr 01 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执行.SQL文件
2013/07/05 PHP
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
WordPress中查询文章的循环Loop结构及用法分析
2015/12/17 PHP
Thinkphp微信公众号支付接口
2016/08/04 PHP
thinkphp修改配置进入默认首页的方法
2017/02/07 PHP
php中请求url的五种方法总结
2017/07/13 PHP
jQuery实现本地预览上传图片功能
2016/01/08 Javascript
js注入 黑客之路必备!
2016/09/14 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
2016/11/25 Javascript
使用Bootstrap + Vue.js实现添加删除数据示例
2017/02/27 Javascript
详解Vue中添加过渡效果
2017/03/20 Javascript
深入理解Vue-cli搭建项目后的目录结构探秘
2017/07/13 Javascript
Vue通过URL传参如何控制全局console.log的开关详解
2017/12/07 Javascript
Javascript中的作用域及块级作用域
2017/12/08 Javascript
JS正则表达式封装与使用操作示例
2019/05/15 Javascript
js实现随机数小游戏
2019/06/28 Javascript
vue实现购物车功能(商品分类)
2020/04/20 Javascript
JS实现多功能计算器
2020/10/28 Javascript
VUE+Element实现增删改查的示例源码
2020/11/23 Vue.js
python进程类subprocess的一些操作方法例子
2014/11/22 Python
通过代码实例展示Python中列表生成式的用法
2015/03/31 Python
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
深入探究Python中变量的拷贝和作用域问题
2015/05/05 Python
Python解决八皇后问题示例
2018/04/22 Python
Python安装pycurl失败的解决方法
2018/10/15 Python
python对绑定事件的鼠标、按键的判断实例
2019/07/17 Python
浅谈python图片处理Image和skimage的区别
2019/08/04 Python
利用canvas实现图片下载功能来实现浏览器兼容问题
2019/05/31 HTML / CSS
美国便宜的横幅和标志印刷在线:Best of Signs
2019/05/29 全球购物
大学生学习自我评价
2014/01/13 职场文书
幼儿园新年寄语
2014/04/03 职场文书
入党函调证明材料
2014/12/24 职场文书
爱的教育读书笔记
2015/06/26 职场文书
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python
SONY AN-LP1 短波有源天线放大器图
2022/04/05 无线电
阿里云 Windows server 2019 配置FTP
2022/04/28 Servers