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合并文本文件示例
Feb 07 Python
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
Feb 13 Python
深入理解Python分布式爬虫原理
Nov 23 Python
python3利用Dlib19.7实现人脸68个特征点标定
Feb 26 Python
pandas创建新Dataframe并添加多行的实例
Apr 08 Python
对Python Pexpect 模块的使用说明详解
Feb 14 Python
python多线程并发让两个LED同时亮的方法
Feb 18 Python
Python数据类型之列表和元组的方法实例详解
Jul 08 Python
python文件操作的简单方法总结
Nov 07 Python
简单了解django文件下载方式
Feb 10 Python
pytorch 实现变分自动编码器的操作
May 24 Python
总结三种用 Python 作为小程序后端的方式
May 02 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 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
2010/06/03 PHP
php版淘宝网查询商品接口代码示例
2014/06/17 PHP
PHP向浏览器输出内容的4个函数总结
2014/11/17 PHP
php将文本文件转换csv输出的方法
2014/12/31 PHP
Zend Framework动作助手FlashMessenger用法详解
2016/03/05 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
2018/04/08 PHP
关于 byval 与 byref 的区别分析总结
2007/10/08 Javascript
extjs 学习笔记(二) Ext.Element类
2009/10/13 Javascript
javascript 二维数组的实现与应用
2010/03/16 Javascript
JavaScript实现表格排序方法
2013/06/14 Javascript
js日期、星座的级联显示代码
2014/01/23 Javascript
javascript向后台传送相同属性的参数即数组参数
2014/02/17 Javascript
JavaScript编程中的Promise使用大全
2015/07/28 Javascript
JS基于面向对象实现的拖拽库实例
2015/09/24 Javascript
Node.js 使用流实现读写同步边读边写功能
2017/09/11 Javascript
HTML5开发Kinect体感游戏的实例应用
2017/09/18 Javascript
浅谈mint-ui 填坑之路
2017/11/06 Javascript
Vue组件全局注册实现警告框的实例详解
2018/06/11 Javascript
js实现随机8位验证码
2020/07/24 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
JS创建自定义对象的六种方法总结
2020/12/15 Javascript
Python中的自定义函数学习笔记
2014/09/23 Python
Python的Bottle框架中返回静态文件和JSON对象的方法
2015/04/30 Python
Python导出DBF文件到Excel的方法
2015/07/25 Python
批处理与python代码混合编程的方法
2016/05/19 Python
Python 3.6打包成EXE可执行程序的实现
2019/10/18 Python
python中元组的用法整理
2020/06/15 Python
Python 爬虫的原理
2020/07/30 Python
编写python代码实现简单抽奖器
2020/10/20 Python
idealfit英国:世界领先的女性健身用品和运动衣物品牌
2017/11/25 全球购物
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
什么是抽象
2015/12/13 面试题
公立医院改革实施方案
2014/03/14 职场文书
2014副局长群众路线对照检查材料思想汇报
2014/09/22 职场文书
党组织领导班子整改方案
2014/10/25 职场文书
为自由献出你的心脏!「进击的巨人展 FINAL」2022年6月在台开展
2022/04/13 日漫