加载人像检测模型的代码是

author author     2023-05-05     797

关键词:

很多人都认为人脸识别是一项非常难以实现的工作,看到名字就害怕,然后心怀忐忑到网上一搜,看到网上N页的教程立马就放弃了。这些人里包括曾经的我自己。其实如果如果你不是非要深究其中的原理,只是要实现这一工作的话,人脸识别也没那么难。今天我们就来看看如何在40行代码以内简单地实现人脸识别。
一点区分

对于大部分人来说,区分人脸检测和人脸识别完全不是问题。但是网上有很多教程有无无意地把人脸检测说成是人脸识别,误导群众,造成一些人认为二者是相同的。其实,人脸检测解决的问题是确定一张图上有木有人脸,而人脸识别解决的问题是这个脸是谁的。可以说人脸检测是是人识别的前期工作。今天我们要做的是人脸识别。

所用工具

Anaconda 2——Python 2

Dlib

scikit-image

Dlib

对于今天要用到的主要工具,还是有必要多说几句的。Dlib是基于现代C++的一个跨平台通用的框架,作者非常勤奋,一直在保持更新。Dlib内容涵盖机器学习、图像处理、数值算法、数据压缩等等,涉猎甚广。更重要的是,Dlib的文档非常完善,例子非常丰富。就像很多库一样,Dlib也提供了Python的接口,安装非常简单,用pip只需要一句即可:

pip install dlib

上面需要用到的scikit-image同样只是需要这么一句:

pip install scikit-image

注:如果用pip install dlib安装失败的话,那安装起来就比较麻烦了。错误提示很详细,按照错误提示一步步走就行了。

人脸识别

之所以用Dlib来实现人脸识别,是因为它已经替我们做好了绝大部分的工作,我们只需要去调用就行了。Dlib里面有人脸检测器,有训练好的人脸关键点检测器,也有训练好的人脸识别模型。今天我们主要目的是实现,而不是深究原理。感兴趣的同学可以到官网查看源码以及实现的参考文献。今天的例子既然代码不超过40行,其实是没啥难度的。有难度的东西都在源码和论文里。

首先先通过文件树看一下今天需要用到的东西:

准备了六个候选人的图片放在candidate-faces文件夹中,然后需要识别的人脸图片test.jpg。我们的工作就是要检测到test.jpg中的人脸,然后判断她到底是候选人中的谁。另外的girl-face-rec.py是我们的python脚本。shape_predi
参考技术A 现在的人脸识别技术已经得到了非常广泛的应用,支付领域、身份验证、美颜相机里都有它的应用。用iPhone的同学们应该对下面的功能比较熟悉

iPhone的照片中有一个“人物”的功能,能够将照片里的人脸识别出来并分类,背后的原理也是人脸识别技术。

这篇文章主要介绍怎样用Python实现人脸检测。人脸检测是人脸识别的基础。人脸检测的目的是识别出照片里的人脸并定位面部特征点,人脸识别是在人脸检测的基础上进一步告诉你这个人是谁。

好了,介绍就到这里。接下来,开始准备我们的环境。

准备工作

本文的人脸检测基于dlib,dlib依赖Boost和cmake,所以首先需要安装这些包,以Ubuntu为例:
$ sudo apt-get install build-essential cmake
$ sudo apt-get install libgtk-3-dev
$ sudo apt-get install libboost-all-dev
我们的程序中还用到numpy,opencv,所以也需要安装这些库:
$ pip install numpy
$ pip install scipy
$ pip install opencv-python
$ pip install dlib
人脸检测基于事先训练好的模型数据,从这里可以下到模型数据

http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2

下载到本地路径后解压,记下解压后的文件路径,程序中会用到。

dlib的人脸特征点

上面下载的模型数据是用来估计人脸上68个特征点(x, y)的坐标位置,这68个坐标点的位置如下图所示:

我们的程序将包含两个步骤:

第一步,在照片中检测人脸的区域

第二部,在检测到的人脸区域中,进一步检测器官(眼睛、鼻子、嘴巴、下巴、眉毛)

人脸检测代码

我们先来定义几个工具函数:
def rect_to_bb(rect):
x = rect.left()
y = rect.top()
w = rect.right() - x
h = rect.bottom() - y
return (x, y, w, h)
这个函数里的rect是dlib脸部区域检测的输出。这里将rect转换成一个序列,序列的内容是矩形区域的边界信息。
def shape_to_np(shape, dtype="int"):
coords = np.zeros((68, 2), dtype=dtype)
for i in range(0, 68):
coords[i] = (shape.part(i).x, shape.part(i).y)
return coords
这个函数里的shape是dlib脸部特征检测的输出,一个shape里包含了前面说到的脸部特征的68个点。这个函数将shape转换成Numpy array,为方便后续处理。
def resize(image, width=1200):
r = width * 1.0 / image.shape[1]
dim = (width, int(image.shape[0] * r))
resized = cv2.resize(image, dim, interpolation=cv2.INTER_AREA)
return resized
这个函数里的image就是我们要检测的图片。在人脸检测程序的最后,我们会显示检测的结果图片来验证,这里做resize是为了避免图片过大,超出屏幕范围。

接下来,开始我们的主程序部分
import sys
import numpy as np
import dlib
import cv2

if len(sys.argv) < 2:
print "Usage: %s <image file>" % sys.argv[0]
sys.exit(1)

image_file = sys.argv[1]
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

opencv+openvino实现人脸landmarks实时检测(代码片段)

...征点的拟合模型,另外OpenCV中支持landmark的人脸检测会先加载一个很大的模型文件,然后速度感人,觉得还有很大的改进空间。好处是OpenCV自己提供了一个训练工具,可以自己训练模型。常见的MTCNN同时实现了人脸检测跟landmarks... 查看详情

加载pytorch中的预训练模型及部分结构的导入(代码片段)

torchvision.modelmodel子包中包含了用于处理不同任务的经典模型的定义,包括:图像分类、像素级语义分割、对象检测、实例分割、人员关键点检测和视频分类。图像分类:语义分割: 对象检测、实例分割和人员关键点检测:&n... 查看详情

关于yolov5-v7模型的自定义模型加载测试问题(代码片段)

...型的检测,发现百度没有一篇。大家肯定说,直接用load加载不就是行了吗,别以为用torch.load(“”)直接加载就Ok?torch.load加载是你通过torch训练的,不是yolo训练,那肯定不同可怜的我去GitHub的issue找到了答案。官方模型加载yolov5... 查看详情

识别速度3.6ms/帧!人像抠图工业质检遥感识别,用这一个分割模型就够了...

支撑影视人像抠图、医疗影像分析、自动驾驶感知等万亿级市场背后的核心技术是什么?那就要说到顶顶重要的图像分割技术。相比目标检测、图像分类等技术,图像分割需要将每个像素点进行分类,在精细的图像识... 查看详情

小白学习tensorflow教程四使用tfhub中的模型efficientdet-lite2进行对象检测(代码片段)

...https://tfhub.dev,可以通过镜像https://hub.tensorflow.google.cn加载TensorFlow模型图片输入:大小可变的三通道图像。输入张量是一个tf.uint8具有形状张量[None,height,width,3]。加载图像并将其处理为TensorFlow模型的tensor格式。importtensorflo... 查看详情

关于yolov5-v7模型的自定义模型加载测试问题(代码片段)

...型的检测,发现百度没有一篇。大家肯定说,直接用load加载不就是行了吗,别以为用torch.load(“”)直接加载就Ok?torch.load加载是你通过torch训练的,不是yolo训练,那肯定不同可怜的我去GitHub的issue找到了答案。官方模型加载yolov5... 查看详情

ffmpeg 自动检测人像然后做必要的翻转

】ffmpeg自动检测人像然后做必要的翻转【英文标题】:ffmpegautodectionportraitthendothenecessaryflip【发布时间】:2012-08-0209:00:19【问题描述】:是否可以让ffmpeg检测视频大小,如果不是横向,是否可以顺时针旋转90度?我在这里找到了... 查看详情

Yolov5自定义对象检测模型未加载

】Yolov5自定义对象检测模型未加载【英文标题】:Yolov5customobjectdetectionmodelnotloading【发布时间】:2021-09-2917:14:44【问题描述】:我已经使用yolov5为4个类训练了一个自定义对象检测模型。我已经下载了best.pt文件。我仍然对如何使... 查看详情

证件照制作如此简单——基于人脸检测与自动人像分割轻松制作个人证件照(c++实现)(代码片段)

...本的步骤是先按人脸为基准切出适合的尺寸,然后把人像给抠出来,对人像进行美化处理,然后替换上要使用的背景色,比如蓝色或红色。2.我这里也按着上面的步骤来用代码实现,先是人脸检测,剪切照... 查看详情

详解openvino模型库中的人脸检测模型(代码片段)

人脸检测模型OpenVINO的模型库中有多个人脸检测模型,这些模型分别支持不同场景与不同分辨率的人脸检测,同时检测精度与速度也不同。下面以OpenVINO2020R04版本为例来逐一解释模型库中的人脸检测,列表如下:从列表中可以看... 查看详情

详解openvino模型库中的人脸检测模型(代码片段)

人脸检测模型OpenVINO的模型库中有多个人脸检测模型,这些模型分别支持不同场景与不同分辨率的人脸检测,同时检测精度与速度也不同。下面以OpenVINO2020R04版本为例来逐一解释模型库中的人脸检测,列表如下:从列表中可以看... 查看详情

人脸识别的人像处理流程是怎样的?

...为我们提供了更加便捷的生活方式,那么人脸识别技术的人像处理流程是怎样的呢?下面捷易科技就来介绍下。人脸识别的处理流程主要由四个成分组成,分别是:采集与检测人脸图像、预处理人脸图像、提取人脸特征图像、匹... 查看详情

人脸检测实战:使用opencv加载深度学习模型实现人脸检测(代码片段)

使用OpenCV和深度学习进行人脸检测今天的博文分为三个部分。在第一部分中,我们将讨论更准确的OpenCV人脸检测器的起源以及它们在OpenCV库中的位置。然后我将演示如何使用OpenCV和深度学习在图像中执行人脸检测。最后我将... 查看详情

arcgispro检测对象只能用cpu

...定工具如何运行以获取检测结果。首次运行该工具时,将加载模型并计算检测。其他运行不需要重新加载模型,所需时间更少。如果更改模型选择,将再次需要初始加载时间。对象检测属性下表介绍了对象检测的属性:选项 说... 查看详情

加载pytorch中的预训练模型及部分结构的导入(代码片段)

torchvision.modelmodel子包中包含了用于处理不同任务的经典模型的定义,包括:图像分类、像素级语义分割、对象检测、实例分割、人员关键点检测和视频分类。图像分类:语义分割: 对象检测、实例分割和人员关键点检测:&n... 查看详情

cv案例:应用kerasssd进行物体检测(代码片段)

...示4.完整代码1.案例效果我们使用已经训练过的模型进行加载之后,总共基础训练时有动物、载具等等共20个物体类别的训练集。以下是对没有训练过的图像的检测结果:2.案例需求使用开源的SSD网络结构进行检测的是的代... 查看详情

双亲委派模型(代码片段)

类加载器介绍:从虚拟机的角度说,只存在两种类加载器:一种是启动类加载器,这个类加载器使用C++编写,是虚拟机自身的一部分;另一种是所有其他类的加载器,这些类加载器使用Java编写,独立于虚拟机,并且全部继承自... 查看详情

如何记录/导出模型检测到的情绪?

】如何记录/导出模型检测到的情绪?【英文标题】:Howtorecord/exporttheemotionsdetectedbyamodel?【发布时间】:2021-11-2521:04:09【问题描述】:如何在下面的代码中记录/导出模型分类的情绪?我的意思是,如果这个模型用于在线会议,我... 查看详情