Advertisement

python 图像识别男女_Python3中使用OpenCV进行性别和年龄检测

阅读量:

什么是计算机视觉?

计算机视觉是使计算机能够像人类一样观看和识别数字图像和视频的研究领域。它所面临的挑战很大程度上是由于对生物视觉的了解有限。计算机视觉涉及获取、处理、分析和理解数字图像,并从现实世界中提取高维数据,以便生成可用于决策的符号或数字信息。该过程通常包括诸如对象识别,视频跟踪,运动估计和图像还原之类的实践。

什么是OpenCV?

OpenCV是“开源计算机视觉”的简称。顾名思义,它是一个开放源代码的计算机视觉和机器学习库。该库能够处理实时图像和视频,同时还具有分析功能。它支持深度学习框架TensorFlow,Caffe和PyTorch。

什么是CNN?

卷积神经网络(Convolutional Neural Network, DNN)是一种广泛用于图像识别、处理和NLP等目的的深度神经网络(deep Neural Network, DNN)。CNN也被称为ConvNet,它有输入层和输出层,以及多个隐藏层,其中许多是卷积的。在某种程度上,cnn是正则化的多层感知器。

性别和年龄检测Python项目-目标

要构建一个性别和年龄检测器,该检测器可以使用Adience数据集上的“ **深度学习”**来大致猜测图片中人(脸)的性别和年龄。

性别和年龄检测–关于项目

在本文中,我们将使用深度学习从一张面孔上准确识别一个人的性别和年龄。我们将使用Tal Hassner和Gil Levi训练的模型。预测的性别可能是“男性”和“女性”之一,预测的年龄可能是以下范围之一-(0 – 2),(4 – 6),(8 – 12),(15 – 20) ,(25 – 32),(38 – 43),(48 – 53),(60 – 100)(最终softmax层中的8个节点)。由于化妆,光线,障碍物和面部表情等因素,很难从一张图像中准确猜测出正确的年龄。因此,我们将其分类而不是回归。

CNN架构

这里的卷积神经网络具有3个卷积层:

卷积层;96个节点,内核大小为7

卷积层;256个节点,内核大小5

卷积层;384个节点,内核大小3

它具有2个完全连接的层,每个层有512个节点,以及最后一个softmax类型的输出层。

检测人脸

分为男性/女性

归类为8个年龄段之一

将结果放在图像上并显示

数据集

对于这个python项目,我们将使用Adience数据集;该数据集可作为面部照片的基准,并包含各种现实世界中的成像条件,例如噪声,光照,姿势和外观。它共有八个年龄段(如上所述)的2,284名受试者共26,580张照片,大小约为1GB。我们将使用的模型已在此数据集上进行了训练。

1、对于人脸检测,我们有一个.pb文件-这是一个protobuf文件(协议缓冲区);它包含图形定义和模型的训练权重。我们可以使用它来运行经过训练的模型。虽然.pb文件以二进制格式保存protobuf,但扩展名为.pbtxt的文件则以文本格式保存。这些是TensorFlow文件。对于年龄和性别,.prototxt文件描述网络配置,.caffemodel文件定义图层参数的内部状态。

2、我们使用argparse库创建一个参数解析器,以便可以从命令提示符处获取image参数。我们使它解析保存图像路径的参数来对性别和年龄进行分类。

3、对于面部,年龄和性别,初始化协议缓冲区和模型。

4、初始化模型的平均值以及要分类的年龄范围和性别列表。

5、现在,使用readNet()方法加载网络。第一个参数保留训练后的权重,第二个参数进行网络配置。

6、我们也可以捕获视频流,可以在网络摄像头的流上进行分类。将padding设置为20。

7、现在,直到按下任意键,我们才读取流并将内容存储到名称hasFrame和frame中。如果不是视频,则必须等待,因此我们从cv2调用waitKey(),然后中断。

8、让我们使用faceNet和frame参数调用highlightFace()函数,然后返回什么结果,我们将它们存储在名称resultImg和faceBoxes中。如果我们得到0个faceBoxes,则意味着没有人可以检测到。在这里,net是faceNet-该模型是DNN人脸检测器,仅在磁盘上保留约2.7MB。

创建框架的浅表副本,并获取其高度和宽度。

从浅表副本创建Blob。

设置输入并向前传递到网络。

faceBoxes现在为空列表。对于0到127中的每个值,定义置信度(0到1之间)。只要我们发现置信度大于置信度阈值(即0.7),我们就会获得x1,y1,x2和y2坐标,并将这些列表附加到faceBoxes中。

然后,我们在图像上为每个此类坐标列表放置一个矩形,并返回两件事:浅表副本和faceBoxes列表。

9、但是,如果确实存在faceBoxes,则我们为每一个定义face,从图像创建一个4维斑点。为此,我们对其进行缩放,调整大小并传递平均值。

10、我们提供输入,并给网络一个前向传递,以得到两个类的置信度。较高者为图片中人物的性别。

11、然后,我们为年龄做同样的事情。

12、我们将性别和年龄文本添加到生成的图像中,并使用imshow()显示它。


全部评论 (0)

还没有任何评论哟~