热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于Opencv的人脸检测

本篇内容介绍如何使用opencv,scipy,tensorflow来实现计算机人脸检测。(用一点也是用.)先声明一下,本篇内容是在图片中的人脸检测,下次会更新调动计算机摄像头的人脸

本篇内容介绍如何使用opencv,scipy,tensorflow来实现计算机人脸检测。(用一点也是用 =.=)

先声明一下,本篇内容是在图片中的人脸检测,下次会更新调动计算机摄像头的人脸识别。

效果图:

(图片在百度图片搜索而来,如有侵权请联系我。)



先介绍一下要使用的模块:

SciPy模块。 安装方法 pip install scipy


SciPy是一款方便、易于使用、专为科学和工程设计的Python工具包.它包括统计,优化,整合,线性代数模块,傅里叶变换,信号和图像处理,常微分方程求解器等等.它用于有效计算Numpy矩阵,使Numpy和Scipy协同工作,高效解决问题。




















































模块名功能
scipy.constants数学常量
scipy.integrate插值
scipy.misc数据输入输出
scipy.linalg线性代数
scipy.ndimageN维图像
scipy.optimize优化算法
scipy.signal信号处理
scipy.sparse稀疏矩阵
scipy.spatial空间数据结构和算法
scipy.stats统计函数

还有一些我没有往上写,比如scipy.io,看起来有点多了,我们这里只使用scipy中的misc,跟scipy.io一样都是一种用于输入和输出的实用模块,以图像形式保存数组。因为我们需要对图像进行操作,并且需要使用数组对象来做运算,所以将数组直接保存为图像文件非常有用。

tensorflow。 安装方法 pip install tensorflow

这个先不介绍太多,简单说下。


tensorFlow 是目前世界上最受欢迎的开源机器学习框架。

是一种计算图模型,即用图的形式来表示运算过程的一种模型。Tensorflow程序一般分为图的构建和图的执行两个阶段。图的构建阶段也称为图的定义阶段,该过程会在图模型中定义所需的运算,每次运算的的结果以及原始的输入数据都可称为一个节点。


opencv。 安装方法 pip install opencv-python

装起来可能会有点麻烦,有一些版本兼容问题。安装详情可以看这,python3.6安装open-cv

opencv全称是 open source computer vision library (开源计算机视觉库)


OpenCV 使用 C/C++ 开发,同时也提供了 Python、Java、MATLAB 等其他语言的接口 OpenCV 是跨平台的,可以在

Windows、Linux、Mac OS、Android、iOS 等操作系统上运行。 OpenCV

的应用领域非常广泛,包括图像拼接、图像降噪、产品质检、人机交互、人脸识别、动作识别、动作跟踪、无人驾驶等。 OpenCV

还提供了机器学习模块,你可以使用正态贝叶斯、K最近邻、支持向量机、决策树、随机森林、人工神经网络等机器学习算法。


matplotlib。 安装方法 pip install matplotlib

这个应该很熟悉的,最python的绘图库,没啥多说的。下面开始分析代码。



代码解析:

我按照顺序从头到尾来分析这段代码

首先导入库:

from scipy import misc # pip install scipy
import tensorflow as tf # pip install tensorflow
from face_check import detect_face
import cv2 # pip install opencv-python
import matplotlib.pyplot as plt # pip install matplotlib

设置默认值:

minsize = 20 # minimum size of face 最小尺寸
threshold = [ 0.6, 0.7, 0.7 ] # three steps's threshold 阈值
factor = 0.709 # scale factor 网格参数

print('Creating and loading')

tf.Graph().as_default() 表示将这个类实例

tensorflow 里面已经存好了一张默认图,可以使用tf.get_default_graph() 来调用(显示这张默认纸),当你有多个线程就可以创造多个tf.Graph(),就是你可以有一个画图本,有很多张图纸,这时候就会有一个默认图的概念了。

with tf.Graph().as_default(): #将这个类实例,也就是新生成的图作为整个 tensorflow 运行环境的默认图
sess = tf.Session(cOnfig=tf.ConfigProto(log_device_placement=False))
with sess.as_default():
pnet, rnet, Onet= detect_face.create_mtcnn(sess, None)

detect_face函数之图像金字塔

人脸检测的函数是就是detect_face,这个就是人脸检测的核心的难点了。

这个文件是本地导入的,他和全部代码我在最后会补上githup的链接。

检测人脸,返回人脸框和五个关键点的坐标

detect_face在图像中它们返回包围框和点。创建一个扩展的因素金字塔检测图像

image_path = '1.jpg'
img = misc.imread(image_path) #读取图片
bounding_boxes, _ = detect_face.detect_face(img, minsize, pnet, rnet, onet, threshold, factor)
nrof_faces = bounding_boxes.shape[0] #人脸数目
print('找到人脸数目为:{}'.format(nrof_faces)) #返回检测结果
print(bounding_boxes) ##返回关键点的坐标

通过上面获取的坐标来在我们的要绘制的图中进行数据标注。

astype(int) 变量类型转换

cv2.rectangle通过对角线来画矩形

cv2.resize图片缩放,参数输入是 宽×高×通道

crop_faces=[]
for face_position in bounding_boxes: #遍历一下
face_position=face_position.astype(int) #变量类型转换
print(face_position[0:4])
#通过对角线来画矩形
cv2.rectangle(img, (face_position[0], face_position[1]), (face_position[2], face_position[3]), (0, 255, 0), 2)
crop=img[face_position[1]:face_position[3],
face_position[0]:face_position[2],]
#cv2.resize图片缩放,参数输入是 宽×高×通道
crop = cv2.resize(crop, (96, 96), interpolation=cv2.INTER_CUBIC )
print(crop.shape) #查看矩阵结构
crop_faces.append(crop)
# plt.imshow(crop)
plt.show() #展示

plt.imshow(img) #显示图片
plt.show()

代码从头到尾结束了。其中的from_check import detect_face贴不了

detect_face文件我已经上传到githup

链接:https://github.com/lixi5338619/face_check



推荐阅读
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本人学习笔记,知识点均摘自于网络,用于学习和交流(如未注明出处,请提醒,将及时更正,谢谢)OS:我学习是为了上 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • windows便签快捷键_用了windows十几年,没想到竟然这么好用!隐藏的功能你知道吗?
    本文介绍了使用windows操作系统时的一些隐藏功能,包括便签快捷键、截图功能等。同时探讨了windows和macOS操作系统之间的优劣比较,以及人们对于这两个系统的不同看法。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 本文介绍了iOS开发中检测和解决内存泄漏的方法,包括静态分析、使用instruments检查内存泄漏以及代码测试等。同时还介绍了最能挣钱的行业,包括互联网行业、娱乐行业、教育行业、智能行业和老年服务行业,并提供了选行业的技巧。 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  • cs231n Lecture 3 线性分类笔记(一)
    内容列表线性分类器简介线性评分函数阐明线性分类器损失函数多类SVMSoftmax分类器SVM和Softmax的比较基于Web的可交互线性分类器原型小结注:中文翻译 ... [详细]
author-avatar
翡翠雕刻师李贵
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有