基于Opencv的图片人脸检测
本篇内容介绍如何使用opencv,scipy,tensorflow来实现计算机人脸检测。(用一点也是用 =.=)
先声明一下,本篇内容是在图片中的人脸检测,
调动计算机摄像头的人脸识别链接:
链接:https://blog.csdn.net/weixin_43582101/article/details/88913164
效果图:
(图片在百度图片搜索而来,如有侵权请联系我。)
先介绍一下要使用的模块:
SciPy模块。 安装方法 pip install scipy
SciPy是一款方便、易于使用、专为科学和工程设计的Python工具包.它包括统计,优化,整合,线性代数模块,傅里叶变换,信号和图像处理,常微分方程求解器等等.它用于有效计算Numpy矩阵,使Numpy和Scipy协同工作,高效解决问题。
模块名 | 功能 |
---|---|
scipy.constants | 数学常量 |
scipy.integrate | 插值 |
scipy.misc | 数据输入输出 |
scipy.linalg | 线性代数 |
scipy.ndimage | N维图像 |
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
基于Opencv的图片人脸检测相关推荐
- 基于OpenCV的摄像头人脸检测
一.选题背景 二.设计目的和意义 三.设计方案 四.特征分类器的选择 4.1 常用人脸检测的特征分类器 4.2 人脸的Haar特征分类器介绍 4.3 人脸的Haar特征分类器使用 五.设计中主要函数介 ...
- 基于OpenCV的视频人脸检测
前言 设备使用带摄像头的笔记本与下载好IP摄像头软件的手机 Python版本为3.8 本人的OpenCV版本为4.5.1.48 本文人脸检测使用的是CV封装好的 haarcascade_frontal ...
- 图片人脸检测——Dlib版(四)
上几篇给大家讲了OpenCV的图片人脸检测,而本文给大家带来的是比OpenCV更加精准的图片人脸检测Dlib库. 往期目录 视频人脸检测--Dlib版(六) OpenCV添加中文(五) 图片人脸检测- ...
- dlib php,图片人脸检测——Dlib版(四)
上几篇给大家讲了OpenCV的图片人脸检测,而本文给大家带来的是比OpenCV更加精准的图片人脸检测Dlib库. 往期目录 dlib与OpenCV对比 识别精准度:Dlib >= OpenCV ...
- JavaCV实现图片人脸检测
之前写的文章 Java + OpenCV 实现图片人脸检测 很多同学反馈说要搭建环境很麻烦, 加上我换了电脑, 本身自己的opencv环境也丢了, 搭建环境的痛实在不想经历第二遍, 所以还是研究了以 ...
- OpenCV + python 实现人脸检测(基于照片和视频进行检测)
OpenCV + python 实现人脸检测(基于照片和视频进行检测) Haar-like 通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征 ...
- 【优秀课设】基于OpenCV的Python人脸识别、检测、框选(遍历目录下所有照片依次识别 视频随时标注)
基于OpenCV的Python人脸识别.检测.框选 (遍历目录下所有照片依次识别 视频随时标注) 移步: https://blog.csdn.net/weixin_53403301/article/d ...
- 图片人脸检测——OpenCV版(二)
图片人脸检测 人脸检测使用到的技术是OpenCV,上一节已经介绍了OpenCV的环境安装,点击查看. 功能展示 识别一种图上的所有人的脸,并且标出人脸的位置,画出人眼以及嘴的位置,展示效果图如下: 多 ...
- 基于深度学习的人脸检测和关键点检测推理实践(OpenCV实现,含代码)
目录 一.任务概述 二.环境准备 三.实现步骤 3.1 Python推理 3.2 C++推理 3.2.1 环境准备 3.2.2 推理 3.3 Java推理 一.任务概述 最近项目中大量场景需要用到人脸 ...
最新文章
- MySQL技术内幕 InnoDB存储引擎 之 InnoDB体系架构
- zillow房价预测
- Python学习之路—2018/6/20
- sql查询时间大于某一时间_查询时间从24分钟到2秒钟:记一次神奇的SQL优化
- linux根据pid查看进程,linux根据pid获取进程名和获取进程pid(c语言获取pid)
- burp-intrude-Attack-type的使用介绍
- JVM专题之分代模型:年轻代、老年代、永久代
- LeetCode OJ:Bitwise AND of Numbers Range
- 精英计算机主板,精英电脑发布顶级P965芯片组主板
- python编程教学视频-【科研资源03】最全Python编程全套系统视频学习教程
- 嵌入Windows User Control到ASP.NET web form
- Android面试题汇总
- 【不三不四的脑洞】大龄程序猿 “奇葩” 相亲记 | 年中总“劫”
- 最新小象学院python量化交易项目实战(完整)
- 计算机组成与体系架构
- [非线性控制理论]6_滑模控制 (sliding mode control)
- 通过室内LED光打造世界的标志
- 解决系统Warning:W: Possible missing firmware /lib/firmware/rtl_nic/
- pyside2出现qt.qpa.plugin: Could not find the Qt platform plugin windows in 错误解决办法
- FSSAI的完整形式是什么?