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人人网登录应用实例
Sep 26 Python
Python的迭代器和生成器使用实例
Jan 14 Python
python实现类的静态变量用法实例
May 08 Python
利用Python命令行传递实例化对象的方法
Nov 02 Python
Python正则表达式完全指南
May 25 Python
Python使用pylab库实现绘制直方图功能示例
Jun 01 Python
Python get获取页面cookie代码实例
Sep 12 Python
Python中的heapq模块源码详析
Jan 08 Python
python3实现点餐系统
Jan 24 Python
selenium 安装与chromedriver安装的方法步骤
Jun 12 Python
Flask框架请求钩子与request请求对象用法实例分析
Nov 07 Python
PyQT5 emit 和 connect的用法详解
Dec 13 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
人族 Terran 基本策略
2020/03/14 星际争霸
PHP常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
PHP curl伪造IP地址和header信息代码实例
2015/04/27 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
2017/01/13 PHP
php+Ajax处理xml与json格式数据的方法示例
2019/03/04 PHP
Laravel timestamps 设置为unix时间戳的方法
2019/10/11 PHP
页面版文本框智能提示JS代码
2009/11/20 Javascript
JavaScript聚焦于第一个字段的代码
2010/10/15 Javascript
javascript学习笔记(二十) 获得和设置元素的特性(属性)
2012/06/20 Javascript
模拟电子签章盖章效果的jQuery插件源码
2013/06/24 Javascript
将list转换为json失败的原因
2013/12/17 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
2013/12/24 Javascript
js用Date对象的setDate()函数对日期进行加减操作
2014/09/18 Javascript
JavaScript 正则表达式中global模式的特性
2016/02/25 Javascript
js轮盘抽奖实例分析
2020/04/17 Javascript
关于jquery中动态增加select,事件无效的快速解决方法
2016/08/29 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
Bootstrap modal使用及点击外部不消失的解决方法
2016/12/13 Javascript
Vuejs中使用markdown服务器端渲染的示例
2017/11/22 Javascript
微信小程序模板和模块化用法实例分析
2017/11/28 Javascript
vue-cli中的babel配置文件.babelrc实例详解
2018/02/22 Javascript
vue组件传递对象中实现单向绑定的示例
2018/02/28 Javascript
浅谈Vue render函数在ElementUi中的应用
2018/09/06 Javascript
pycharm Tab键设置成4个空格的操作
2021/02/26 Python
Original Penguin美国官网:布拉德皮特、强尼德普喜爱的服装品牌
2016/10/25 全球购物
AJAX的优缺点都有什么
2015/08/18 面试题
Ruby中的保护方法和私有方法与一般面向对象程序设计语言的一样吗
2013/05/01 面试题
QQ空间主人寄语大全
2014/04/12 职场文书
党组织领导班子整改方案
2014/10/25 职场文书
群众路线教育实践活动心得体会(四风)
2014/11/03 职场文书
2015应届毕业生求职信范文
2015/03/20 职场文书
校友会致辞
2015/07/30 职场文书
工作后的感想
2015/08/07 职场文书
《钓鱼的启示》教学反思
2016/02/18 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技