概述
前面我写了很多篇关于OpenCV DNN应用相关的文章,这里再来一篇文章,用OpenCV DNN实现一个很有趣好玩的例子,基于Caffe的预训练模型实现年龄与性别预测,这个在很多展会上都有展示,OpenCV DNN实现这里非常简洁明了,总共不到100行的代码。下面就来说一下怎么实现的,首先下载两个Caffe的预训练模型:
Gender Net and Age Net
https://www.dropbox.com/s/iyv483wz7ztr9gh/gender_net.caffemodel?dl=0"
https://www.dropbox.com/s/xfb20y596869vbb/age_net.caffemodel?dl=0"
上述两个模型一个是预测性别的,一个是预测年龄的,性别预测返回的是一个二分类结果
Male
Female
年龄预测返回的是8个年龄的阶段!
'(0-2)',
'(4-6)',
'(8-12)',
'(15-20)',
'(25-32)',
'(38-43)',
'(48-53)',
'(60-100)'
人脸检测是基于OPenCV DNN模块自带的残差网络的人脸检测算法模型!非常的强大与好用!
实现步骤
完整的实现步骤需要如下几步:
-
预先加载三个网络模型
-
打开摄像头视频流/加载图像
-
对每一帧进行人脸检测
- 对检测到的人脸进行性别与年龄预测
- 解析预测结果
- 显示结果
代码实现详解
加载模型
MODEL_MEAN_VALUES = (78.4263377603, 87.7689143744, 114.895847746)
ageList = ['(0-2)', '(4-6)', '(8-12)', '(15-20)', '(25-32)', '(38-43)', '(48-53)', '(60-100)']
genderList = ['Male', 'Female']
# Load network
ageNet = cv.dnn.readNet(ageModel, ageProto)
genderNet = cv.dnn.readNet(genderModel, genderProto)
faceNet = cv.dnn.readNet(faceModel, faceProto)
人脸