cv dnn识别动作规范 open_OpenCV开发笔记(七十二):红胖子8分钟带你使用opencv+dnn+tensorFlow识别物体...

这篇博客介绍了如何利用OpenCV的dnn模块和TensorFlow深度学习模型进行物体识别。通过加载预训练的tensorflow模型,将图像转换为神经网络输入,然后进行预测并获取识别结果。代码示例展示了如何处理预测结果并根据置信度阈值绘制识别框。
摘要由CSDN通过智能技术生成

前言

级联分类器的效果并不是很好,准确度相对深度学习较低,本章使用opencv通过tensorflow深度学习,检测已有模型的分类。

Demo

  

可以猜测,1其实是人,18序号类是狗,因为笔者未找到对应的分类具体信息。

Tensorflow模型下载

OpenCV深度识别基本流程

opencv3.4.x支持了各种模型。

支持的模型

操作步骤:tensorflow步骤一:加载模型和配置文件,建立神经网络。

根据不同的模型,使用cv::dnn::readNetFromXXX系列函数进行读取,opencv3.4.x系列支持的dnn模型(支持模型往上看)。

举例tensorflow模型如下:std::string weights = "E:/qtProject/openCVDemo/dnnData/" \

"ssd_mobilenet_v1_coco_2017_11_17/frozen_inference_graph.pb";

std::string prototxt = "E:/qtProject/openCVDemo/dnnData/" \

"ssd_mobilenet_v1_coco_2017_11_17.pbtxt";

cv::dnn::Net net = cv::dnn::readNetFromTensorflow(weights, prototxt);步骤二:将要预测的图片加入到神经网络中

加入之后,需要识别图片,那么需要把图片输入到神经网络当中去,如下:cv::Mat mat;

cv::Mat blob;

mat = cv::imread("E:/testFile/14.jpg");

cv::dnn::blobFromImage(mat, blob);步骤三:分类预测,获取识别的结果

输入之后,就进行识别,识别是向前预测(分类预测),并且拿到结果。cv::Mat prob = net.forward();

对于预测的结果,存于cv::Mat类型的prob,然后需要统一对prob进行处理,使其成为我们可以使用的数据,代码如下:cv::Mat detectionMat(prob.size[2], prob.size[3], CV_32F, prob.ptr());

对于从结果prob转换为detectionMat后,其结构如下:

cv::Mat为多行七列,每一行代表一个检测到的分类,具体列信息如下表:

  

(注意:具体的使用,请参照“步骤四”)步骤四:对达到置信度的可以通过输出的mat进行分类和框选cv::Mat detectionMat(prob.size[2], prob.size[3], CV_32F, prob.ptr());

// 置信度预制,大于执行度的将其使用rect框出来

float confidenceThreshold = 0.75;

for(int i = 0; i < detectionMat.rows; i++)

{

float confidence = detectionMat.at(i, 2);

if (confidence > confidenceThreshold)

{

// 高于

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值