环境:VS2017+OpenCV3.3+C++

当我们接触一个全新的caffe.model文件,如何快速应用的,今天我将通过一个预测性别和年龄的实例来说明这个问题,首先来下载模型文件,保存到我们指定的自定义的目录,首先我们应该查看模型的描述文件(.prototxt),确定模型需要的输入和输出部分。

name: "CaffeNet"
input: "data" //输入层
input_dim: 10 //数据增广
input_dim: 3 //通道数
input_dim: 227//长宽
input_dim: 227

输出:

layers {name: "prob" //名称type: SOFTMAX //特征层bottom: "fc8"top: "prob"
}

本图为CVPR论文中对年龄的label讲解,用于后续输出。

我们可以知道,输入数据的格式,接下来我们可以通过之前讲过的级联分类器作为图像输入,然后就可以进行性别和年龄的预测了。

1、模型定义

//替换成你的对应位置
String model_age_file = "D:/new_cv/opencv/sources/samples/data/age_net.caffemodel";
String model_age_txt = "D:/new_cv/opencv/sources/samples/data/age_deploy.prototxt";String model_gender_bin ="D:/new_cv/opencv/sources/samples/data/gender_net.caffemodel";
String model_gender_txt ="D:/new_cv/opencv/sources/samples/data/gender_deploy.prototxt";

2、年龄预测

在进行年龄预测之前,我们先对label进行保存

vector<String> get_age_label()
{vector<String> age_labels;age_labels.push_back("0-2");age_labels.push_back("4-6");age_labels.push_back("8-13");age_labels.push_back("15-20");age_labels.push_back("25-32");age_labels.push_back("38-43");age_labels.push_back("48-53");age_labels.push_back("60-");return age_labels;
}

年龄预测代码:

void predict_age(Mat &src)
{Net net = readNetFromCaffe(model_age1_txt, model_age1_file);if (net.empty()){cout << "load net error" << endl;exit(-1);}Mat blobImg = blobFromImage(src, 1.0, Size(227, 227));net.setInput(blobImg, "data");Mat probMat = net.forward("prob");probMat.reshape(1, 1);//1行1通道Point index;//坐标信息double objvalue;//最大检测值minMaxLoc(probMat, NULL, &objvalue, NULL, &index);//忽略最小值,取最大值size_t objindex = index.x;//label 下标vector<String>labels = get_age_label();putText(src, format("age:%s", labels[objindex].c_str()), Point(2, 20), FONT_HERSHEY_PLAIN, 0.7, Scalar(1, 12, 3), 1, 8);
}

3、性别预测

void predict_gender(Mat &src)
{Net net = readNetFromCaffe(model_age1_txt, model_age1_file);if (net.empty()){cout << "load net error" << endl;exit(-1);}Mat blobImg = blobFromImage(src, 1.0, Size(227, 227));net.setInput(blobImg, "data");Mat probMat = net.forward("prob");probMat.reshape(1, 1);//1行1通道putText(src, format("gender:%s", (probMat.size[0] > probMat.size[1] ? "M" : "F")), Point(2, 10), FONT_HERSHEY_PLAIN, 0.7, Scalar(2, 2, 3), 1, 8);
}

4、结果展示

源代码:https://github.com/haiqiang2017/open-dnn/blob/master/DNN/net_cas.cpp

OpenCV--性别年龄预测(附源码)相关推荐

  1. 超简单的pyTorch训练-onnx模型-C++ OpenCV DNN推理(附源码地址)

    学更好的别人, 做更好的自己. --<微卡智享> 本文长度为1974字,预计阅读5分钟 前言 很早就想学习深度学习了,因为平时都是自学,业余时间也有限,看过几个pyTorch的入门,都是一 ...

  2. 【竞赛项目详解】二手车交易价格预测(附源码)

    文章目录 1 项目简介 2 项目分析 2.1 数据分析(EDA) 2.2 难点分析 2.3 可行性方案分析 3 方案设计 3.1 特征工程 3.2 模型构建与训练 4 结果分析 5 源码链接 1 项目 ...

  3. 实战 | 计算器/数码管数字识别 基于OpenCV和EasyOCR/PaddleOCR(附源码)

    点击下方卡片,关注"OpenCV与AI深度学习"公众号! 视觉/图像重磅干货,第一时间送达! 导读 本文主要介绍一个计算器显示数字识别的OCR实例,基于OpenCV和EasyOCR ...

  4. (增删查改+排序+文件存储)通讯录实现(附源码)

    本通讯录具体实现以下功能: 实现结果如下 其中排序分为姓名排序和年龄排序 附源码: 测试部分-- void menu() {printf("************************* ...

  5. PyQt5 + Python3.7 + OpenCV人脸识别身份认证系统(附源码)

    基于PyQt5 + Python3.7 + OpenCV实现的人脸识别身份认证系统,附源码. 技术选型 PyQt5 + Python3.7 + OpenCV 功能概述 实现人员注册,信息修改,人脸识别 ...

  6. OpenCvSharp (C# OpenCV) DNN模块加载自己训练的TensorFlow模型做目标检测(含手势识别、骰子识别、菜品识别)(附源码)

    本文作者Color Space,文章未经作者允许禁止转载! 本文将介绍OpenCVSharp DNN模块加载自己训练的TensorFlow模型做目标检测(含手势识别.骰子识别.菜品识别)! 前言: 下 ...

  7. opencv判断 线夹角_python opencv实现直线检测并测出倾斜角度(附源码+注释)

    由于学习需要,我想要检测出图片中的直线,并且得到这些直线的角度.于是我在网上搜了好多直线检测的代码,但是没有搜到附有计算直线倾斜角度的代码,所以我花了一点时间,自己写了一份直线检测并测出倾斜角度的代码 ...

  8. Halcon转OpenCV实例--去除纸张中的颜色笔迹/墨迹(附源码)

    导读 本文主要介绍一个去除纸张中颜色笔迹/墨迹的实例,并将Halcon实现转为OpenCV. 实例来源 实例来源于51Halcon论坛的讨论贴: https://www.51halcon.com/fo ...

  9. 使用OpenCV处理图片的亮度、对比度、曝光、高光、阴影、饱和度、色温,色相(附源码)

    屏幕录制2023-05-22 22.09.32 集成opencv的方式请参照上一个帖子 OpenCV在iOS端的集成及Mat和UIImage互相转化(附源码) 废话不多说直接上代码,伸手党福利: 代码 ...

  10. wavenet时间序列预测---TensorFlow版(附源码+数据)

    利用wavenet做单一时间序列预测 转载请注明出处https://blog.csdn.net/qq_22290797/article/details/108506401 训练后的loss函数如下 模 ...

最新文章

  1. 机器人编程语言python-机器人编程语言有哪些?
  2. Revit API取得变量的内参名称
  3. themleft模板库_Thymeleaf 模板的使用
  4. Flask 快速上手
  5. java 基本数据类型和包装类型
  6. 科目三大路考8个驾驶技巧
  7. 台式计算机哪款好,台式一体机电脑哪款好
  8. CSS3 Flexbox轻松实现元素的水平居中和垂直居中
  9. 最快配置本地Yum仓库
  10. 实现元素拖拽放大缩小_G6 3.6:放大每一处细节
  11. 如何将NFC读卡器库移植到Kinetis K64F微控制器
  12. 客服QQ,打开临时会话框(不用加为好友)
  13. cadence软件打开报错“计算机中丢失cdsCommon.dll”的解决办法
  14. python求直角三角形个数的公式_Python3 欧拉计划 问题71-75
  15. 通过西联快汇收取Google Adsense收入的详细步骤
  16. Android---简易的底部导航栏
  17. 基于Docker-compose搭建Redis高可用集群-哨兵模式(Redis-Sentinel)
  18. 服务器trunk协议是什么,TRUNK端口汇聚技术原理和作用介绍
  19. php 百度地图api获取经纬度,调用百度地图API接口获取地铁站的经纬度信息
  20. Linux下spi驱动分析与测试【详细流程】

热门文章

  1. 牛顿(Newton)插值法的Matlab实现
  2. 19.2 NESMA 唯一和非唯一搜索条件的组合案例分析
  3. 为什么不能自定义java.lang.String
  4. 浪潮服务器nf5270m5做raid_一文读懂服务器centos7.0安装指导指南(详细)
  5. android8carlife连接不上,carlife为什么连接不上汽车 连接不上汽车解决方法
  6. 从维基百科、Quora到知乎,下一代知识社交平台如何表现?
  7. ​法国将于2020年测试自己的数字货币
  8. 13 分钟内 3 个进球被判越位,让阿根廷“崩溃”的半自动越位技术是什么
  9. jQuery动态增加/删除select下来框的option中的selected属性
  10. swftools将PDF转成swf (含中文的pdf注意事项)