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编写一个每天都在系统下新建一个文件夹的脚本
May 04 Python
Python获取系统默认字符编码的方法
Jun 04 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
Sep 06 Python
Django项目中model的数据处理以及页面交互方法
May 30 Python
Sanic框架路由用法实例分析
Jul 16 Python
Python基础知识点 初识Python.md
May 14 Python
Python八皇后问题解答过程详解
Jul 29 Python
flask 实现上传图片并缩放作为头像的例子
Jan 09 Python
Python print不能立即打印的解决方式
Feb 19 Python
python 基于opencv 实现一个鼠标绘图小程序
Dec 11 Python
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
Apr 05 Python
Pycharm连接远程服务器并远程调试的全过程
Jun 24 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 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
2012/12/07 PHP
PHP启动windows应用程序、执行bat批处理、执行cmd命令的方法(exec、system函数详解)
2014/10/20 PHP
Mac环境下php操作mysql数据库的方法分享
2015/05/11 PHP
php实现图片缩略图的方法
2016/03/29 PHP
浅析Yii2集成富文本编辑器redactor实例教程
2016/04/25 PHP
Laravel5.4框架使用socialite实现github登录的方法
2019/03/20 PHP
JavaScript 编程引入命名空间的方法与代码
2007/08/13 Javascript
表格 隔行换色升级版
2009/11/07 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
2014/05/14 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之绑定事件
2015/11/19 Javascript
JavaScript引用类型和基本类型详解
2016/01/06 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
javascript正则表达式中分组详解
2016/07/17 Javascript
Highcharts入门之基本属性
2016/08/02 Javascript
写jQuery插件时的注意点
2017/02/20 Javascript
微信小程序多张图片上传功能
2017/06/07 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
2019/05/27 Javascript
Vue.js中使用Vuex实现组件数据共享案例
2020/07/31 Javascript
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
用webAPI实现图片放大镜效果
2020/11/23 Javascript
jquery实现淡入淡出轮播图效果
2020/12/13 jQuery
Python解惑之True和False详解
2017/04/24 Python
python按比例随机切分数据的实现
2019/07/11 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
Django全局启用登陆验证login_required的方法
2020/06/02 Python
pycharm-professional-2020.1下载与激活的教程
2020/09/21 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
婴儿地球:Baby Earth
2018/12/25 全球购物
公司门卫的岗位职责
2014/02/19 职场文书
教育技术职业规划范文
2014/03/04 职场文书
经典导游欢迎词
2015/01/26 职场文书
2015年煤矿工作总结
2015/04/28 职场文书
高中升旗仪式主持词
2015/07/03 职场文书
mysql死锁和分库分表问题详解
2021/04/16 MySQL
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS
Fluentd搭建日志收集服务
2022/09/23 Servers