|
前面我写了很多篇关于OpenCV DNN应用相关的文章,这里再来一篇文章,用OpenCV DNN实现一个很有趣好玩的例子,基于Caffe的预训练模型实现年龄与性别预测,这个在很多展会上都有展示,OpenCV DNN实现这里非常简洁明了,总共不到100行的代码。下面就来说一下怎么实现的,首先下载两个Caffe的预训练模型:
百度网盘下载:
链接:https://pan.baidu.com/s/1VSYkILerRQsoDiIhl-6eTQ?pwd=4ypk
提取码:4ypk
路径:OpnCV VIP>例子素材与模型>性别与年龄识别
模型一个是预测性别的,一个是预测年龄的,性别预测返回的是一个二分类结果
Male,Female
年龄预测返回的是8个年龄的阶段!
'(0-2)',
'(4-6)',
'(8-12)',
'(15-20)',
'(25-32)',
'(38-43)',
'(48-53)',
'(60-100)'
人脸检测是基于OPenCV DNN模块自带的残差网络的人脸检测算法模型!非常的强大与好用!
实现步骤:
窗口程序集名 | 保 留 | 保 留 | 备 注 | 程序集1 | | | | 变量名 | 类 型 | 数组 | 备 注 | inputNet | 网络类 | | nPoints | 整数型 | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 人脸原型 | 文本型 | | | 人脸模型 | 文本型 | | | 年龄原型 | 文本型 | | | 年龄模型 | 文本型 | | | 性别原型 | 文本型 | | | 性别模型 | 文本型 | | | 模型平均值 | 标量类 | | | 年龄列表 | 文本型 | | 8 | 性别列表 | 文本型 | | 2 | 年龄预测网络 | 网络类 | | | 性别预测网络 | 网络类 | | | 人脸预测网络 | 网络类 | | | 源图 | 多维矩阵类 | | | 预测框集 | 预测框 | | 0 | 框架脸 | 多维矩阵类 | | | 置信_阈值 | 双精度小数型 | | | 框架高 | 整数型 | | | 框架宽 | 整数型 | | | 比例因子 | 双精度小数型 | | | 尺寸 | 尺寸2i类 | | | 输出前景目标 | 多维矩阵类 | | | 平均值 | 标量类 | | | 检测 | 多维矩阵类 | | | 检测矩阵 | 多维矩阵类 | | | i | 整数型 | | | 信心 | 小数型 | | | 预测框 | 预测框 | | | 脸部区域 | 矩形2i类 | | | 填充 | 整数型 | | | 脸 | 多维矩阵类 | | | 前景目标 | 多维矩阵类 | | | 性别预测 | 多维矩阵类 | | | 年龄预测 | 多维矩阵类 | | | 置信度 | 双精度小数型 | | | 索引 | 点2i类 | | | 性别 | 文本型 | | | 年龄 | 文本型 | | |
人脸原型 = “D:\\Desktop\\AgeGender\\opencv_face_detector.pbtxt”人脸模型 = “D:\\Desktop\\AgeGender\\opencv_face_detector_uint8.pb”年龄原型 = “D:\\Desktop\\AgeGender\\age_deploy.prototxt”年龄模型 = “D:\\Desktop\\AgeGender\\age_net.caffemodel”性别原型 = “D:\\Desktop\\AgeGender\\gender_deploy.prototxt”性别模型 = “D:\\Desktop\\AgeGender\\gender_net.caffemodel”模型平均值. 初始化 (78.4263377603, 87.7689143744, 114.895847746, 0 )年龄列表 = { “(0-2)”, “(4-6)”, “(8-12)”, “(15-20)”, “(25-32)”, “(38-43)”, “(48-53)”, “(60-100)” }性别列表 = { “Male”, “Female” }年龄预测网络 = 视觉_读取网络 (年龄模型, 年龄原型, “”)性别预测网络 = 视觉_读取网络 (性别模型, 性别原型, “”)人脸预测网络 = 视觉_读取网络 (人脸模型, 人脸原型, “”)源图 = 视觉_图像读取 (“D:\Desktop\AgeGender\12.jpg”, 1 )填充 = 20 判断循环首 (视觉_等待按键 (1 ) < 0 )如果真 (源图. 空 ()) 跳出循环 ()框架脸 = 源图.克隆 ()置信_阈值 = 0.7 框架高 = 框架脸. 行数 ()框架宽 = 框架脸. 列数 ()比例因子 = 1 尺寸. 初始化 (300, 300 )平均值. 初始化 (104, 117, 123, )输出前景目标 = 视觉_图像前景目标 (框架脸, 比例因子, 尺寸, 平均值, 真, 假, 5 )人脸预测网络. 设置输入 (输出前景目标, “data”, 1, )人脸预测网络. 向前 (检测, “detection_out”)检测矩阵 = 矩阵 (检测. 维度元素数 (2 ), 检测. 维度元素数 (3 ), #Cv小数型, 检测. 取元素指针 (0, 0 )) 计次循环首 (检测矩阵. 行数 (), i )信心 = 检测矩阵. 取元素 (i - 1, 2 )如果真 (信心 > 置信_阈值 )预测框.x1 = 检测矩阵. 取元素 (i - 1, 3 ) × 框架宽 预测框.y1 = 检测矩阵. 取元素 (i - 1, 4 ) × 框架高 预测框.x2 = 检测矩阵. 取元素 (i - 1, 5 ) × 框架宽 预测框.y2 = 检测矩阵. 取元素 (i - 1, 6 ) × 框架高 视觉_矩形1 (框架脸, 点2i (预测框.x1, 预测框.y1 ), 点2i (预测框.x2, 预测框.y2 ), 标量 (0, 255, 0 ), 2, 4, 0 )加入成员 (预测框集, 预测框 )计次循环尾 ()如果真 (取数组成员数 (预测框集 ) = 0 )视觉_控制台输出 (“未检测到人脸,正在检查下一帧.”, )到循环尾 ()计次循环首 (取数组成员数 (预测框集 ), i )脸部区域. 初始化 (预测框集 [i ].x1 - 填充, 预测框集 [i ].y1 - 填充, 预测框集 [i ].x2 - 预测框集 [i ].x1 + 2 × 填充, 预测框集 [i ].y2 - 预测框集 [i ].y1 + 2 × 填充 )源图. 感兴区域S (脸, 脸部区域 )前景目标 = 视觉_图像前景目标 (脸, 1, 尺寸2i (227, 227 ), 模型平均值, 假, 假, 5 )性别预测网络. 设置输入 (前景目标, “”, 1, )性别预测网络. 向前 (性别预测, “”)视觉_最小最大位置 (性别预测, , 置信度, , 索引, )性别 = 性别列表 [索引.左边 + 1 ]年龄预测网络. 设置输入 (前景目标, “”, 1, )年龄预测网络. 向前 (年龄预测, “”)视觉_最小最大位置 (年龄预测, , 置信度, , 索引, )年龄 = 年龄列表 [索引.左边 + 1 ]视觉_放置文本 (框架脸, 性别 + “, ” + 年龄, 点2i (预测框集 [i ].x1, 预测框集 [i ].y1 - 15 ), #字体_衬线_简单, 0.9, 标量 (0, 255, 255 ), 2, #线类型_线_AA, 假)视觉_显示图像 (“Frame”, 框架脸 )计次循环尾 ()清除数组 (预测框集 )判断循环尾 ()返回 (0 )
最后来个效果图:
|
评分
-
参与人数 1 | 好评 +1 |
精币 +2 |
收起
理由
|
汉族
| + 1 |
+ 2 |
这个照片quo时 惊艳,模型quo时到位 |
查看全部评分
|