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实现通过代理服务器访问远程url的方法
Apr 29 Python
举例讲解Python中的迭代器、生成器与列表解析用法
Mar 20 Python
从源码解析Python的Flask框架中request对象的用法
Jun 02 Python
Python实现将不规范的英文名字首字母大写
Nov 15 Python
Python数据结构之翻转链表
Feb 25 Python
Python的SimpleHTTPServer模块用处及使用方法简介
Jan 22 Python
python打包压缩、读取指定目录下的指定类型文件
Apr 12 Python
Python文件监听工具pyinotify与watchdog实例
Oct 15 Python
python实现堆排序的实例讲解
Feb 21 Python
python目标检测给图画框,bbox画到图上并保存案例
Mar 10 Python
Pandas之read_csv()读取文件跳过报错行的解决
Apr 21 Python
python 下划线的多种应用场景总结
May 12 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 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
2006/10/09 PHP
PHP的FTP学习(三)
2006/10/09 PHP
实例简介PHP的一些高级面向对象编程的特性
2015/11/27 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
JavaScript的parseInt 进制问题
2009/05/07 Javascript
javascript让setInteval里的函数参数中的this指向特定的对象
2010/01/31 Javascript
javascript实现可改变滚动方向的无缝滚动实例
2013/06/17 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
2013/11/21 Javascript
JavaScript中常见的字符串操作函数及用法汇总
2015/05/04 Javascript
基于jQuery实现的菜单切换效果
2015/10/16 Javascript
深入浅析AngularJS中的module(模块)
2016/01/04 Javascript
微信小程序 底部导航栏目开发资料
2016/12/05 Javascript
JS计算输出100元钱买100只鸡问题的解决方法
2018/01/04 Javascript
小程序文字跑马灯效果
2018/12/28 Javascript
javascript操作元素的常见方法小结
2019/11/13 Javascript
Vue中Table组件行内右键菜单实现方法(基于 vue + AntDesign)
2019/11/21 Javascript
Pyhton中单行和多行注释的使用方法及规范
2016/10/11 Python
Python利用openpyxl库遍历Sheet的实例
2018/05/03 Python
使用 Python 实现文件递归遍历的三种方式
2018/07/18 Python
python3.6数独问题的解决
2019/01/21 Python
基于Python打造账号共享浏览器功能
2019/05/30 Python
Python爬虫之Selenium警告框(弹窗)处理
2020/12/04 Python
html5中JavaScript removeChild 删除所有节点
2014/05/16 HTML / CSS
美国特价机票专家:Airfarewatchdog
2018/01/24 全球购物
正宗的澳大利亚Ugg靴子零售商:UGG Express
2020/04/19 全球购物
杭州龙健科技笔试题.net部分笔试题
2016/01/24 面试题
车间主管岗位职责
2013/11/14 职场文书
房屋出租协议书
2014/04/10 职场文书
航海技术专业毕业生推荐信
2014/07/09 职场文书
销售员岗位职责
2015/02/10 职场文书
幼儿教师师德师风自我评价
2015/03/05 职场文书
研究生给导师的自荐信
2015/03/06 职场文书
集结号观后感
2015/06/08 职场文书
行为习惯主题班会
2015/08/14 职场文书
CSS filter 有什么神奇用途
2021/05/25 HTML / CSS
Python开发五子棋小游戏
2022/04/28 Python