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 06 Python
在Python中使用base64模块处理字符编码的教程
Apr 28 Python
Python 基础知识之字符串处理
Jan 06 Python
python实现对csv文件的列的内容读取
Jul 04 Python
如何使用Python脚本实现文件拷贝
Nov 20 Python
django 解决自定义序列化返回处理数据为null的问题
May 20 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
May 23 Python
Python CSS选择器爬取京东网商品信息过程解析
Jun 01 Python
深入理解Python 多线程
Jun 16 Python
Python Selenium模块安装使用教程详解
Jul 09 Python
python 实用工具状态机transitions
Nov 21 Python
Django cookie和session的应用场景及如何使用
Apr 29 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管理依赖(dependency)关系工具 Composer 安装与使用
2014/08/18 PHP
php支付宝手机网页支付类实例
2015/03/04 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
分享50个提高PHP执行效率的技巧
2015/12/26 PHP
简明json介绍
2008/09/28 Javascript
js获取图片长和宽度的代码
2009/11/24 Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
js通过location.search来获取页面传来的参数
2014/09/11 Javascript
JavaScript中string转换成number介绍
2014/12/31 Javascript
Javascript中的getUTCHours()方法使用详解
2015/06/10 Javascript
jquery中键盘事件小结
2016/02/24 Javascript
javascript实现仿百度图片的瀑布流加载效果
2016/04/20 Javascript
Vue.js每天必学之数据双向绑定
2016/09/05 Javascript
前端开发不得不知的10个最佳ES6特性
2017/08/30 Javascript
JS原生带缩略图的图片切换效果
2018/10/10 Javascript
Threejs实现滴滴官网首页地球动画功能
2020/07/13 Javascript
[46:37]LGD vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
编写Python的web框架中的Model的教程
2015/04/29 Python
python爬虫实战之爬取京东商城实例教程
2017/04/24 Python
tensorflow创建变量以及根据名称查找变量
2018/03/10 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
2019/06/03 Python
python覆盖写入,追加写入的实例
2019/06/26 Python
python3.7简单的爬虫实例详解
2019/07/08 Python
Django分页功能的实现代码详解
2019/07/29 Python
python中有关时间日期格式转换问题
2019/12/25 Python
HTML5的postMessage的使用手册
2018/12/19 HTML / CSS
Merchant 1948澳大利亚:新西兰领先的鞋类和靴子供应商
2018/03/24 全球购物
PHP高级工程师面试问题推荐
2013/01/18 面试题
三爱活动实施方案
2014/03/19 职场文书
竞选村长演讲稿
2014/04/28 职场文书
师德师风整改措施
2014/10/24 职场文书
2015年社区环境卫生工作总结
2015/04/21 职场文书
2015年行风建设工作总结
2015/05/15 职场文书
无故旷工检讨书
2015/08/15 职场文书
MySQL 重命名表的操作方法及注意事项
2021/05/21 MySQL
《模拟人生4》推出新补丁 “婚礼奇缘”DLC终于得到修复
2022/04/03 其他游戏