先在visual studio 2015新建一个工程并配置好环境。

OpenCV调用tensorflow的pb模型,不仅需要一个.pb文件,还需要一个.pbtxt文件。

一些预训练好的pb模型的下载地址,在opencv_extra里有一些生成好的pbtxt文件。注意pb文件和pbtxt文件要对应,否则后面调用会出错。

如果没有pb文件对应的pbtxt文件,则在opencv里提供了tf_text_graph_faster_rcnn.py,tf_text_graph_mask_rcnn.py,tf_text_graph_ssd.py三个脚本来生成对应网络结构的pbtxt文件。用这个脚本生成pbtxt文件不仅要输入pb文件,还需要输入.config文件,这里有一些config文件。

使用方式如下:

python tf_text_graph_ssd.py \

--input /path/to/xxx.pb \

--config /path/to/xxx.config \

--output /path/to/xxx.pbtxt

准备就绪之后,可以开始写OpenCV的代码了。这里有几个关键点。

OpenCV的dnn模块提供了readNetFromTensorflow来读取tensorflow的pb模型,当然还有readNetFromDarknet,readNetFromCaffe,readNetFromTorch等等。这里就只关注tensorflow了。

dnn::Net net = dnn::readNetFromTensorflow(pbFile, pbTxt);

vectorouts;

vectoroutNames = net.getUnconnectedOutLayersNames();

Mat inputBlob = dnn::blobFromImage(cropImg, 1.0, Size(cropWidth, cropHeight), Scalar(), false, false);

net.setInput(inputBlob);

net.forward(outs, outNames);

其中, pbFile就是pb模型的路径,pbTxt就是pbtxt文件的路径。dnn::blobFromImage的1.0 / 255将数据归一化到0~1。

forward输出的outs是一个1 x 1 x N x 7的矩阵,N是预测结果的数量,可能很多,还需要进行后处理。

float* data = (float*)outs[0].data;

for (int i = 0; i < outs[0].total(); i += 7)

{

float confidence = data[i + 2];

if (confidence > confidenceTH)

{

int left = (int)(data[i + 3] * img.cols);

int top = (int)(data[i + 4] * img.rows);

int right = (int)(data[i + 5] * img.cols);

int bottom = (int)(data[i + 6] * img.rows);

int width = right - left + 1;

int height = bottom - top + 1;

classIds.push_back((int)(data[i + 1])-1);

boxes.push_back(Rect(left, top, width, height));

confidences.push_back(confidence);

}

}

因为是要进行目标检测,所以这里将结果转换成了boundingbox的形式,并且将confidence低于阈值的去掉。

接下来进行非极大值抑制,将重合度高的boundingbox去掉。

vectorindices;

dnn::NMSBoxes(boxes, confidences, confidenceTH, nmsTH, indices);

预测已经完成,将结果画出来。

rectangle(img, Point(left, top), Point(right, bottom), Scalar(0, 255, 0));

下载的很多模型效果都不是很好,精度很低。用脚本生成的pbtxt有时候不能使用。

最后成功的是在ssd_mobilenet_v1_coco_11_06_2017下载的,pbtxt文件用的是现成的ssd_mobilenet_v1_coco.pbtxt。有空了再试试其他的模型。

opencv打开pb_【OpenCV】OpenCV4调用tensorflow pb模型进行目标检测相关推荐

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

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

  2. 查看tensorflow pb模型文件的节点信息

    查看tensorflow pb模型文件的节点信息: import tensorflow as tf with tf.Session() as sess:with open('./quantized_m ...

  3. tensorflow精进之路(二十五)——Object Detection API目标检测(下)(VOC数据集训练自己的模型进行目标检测)

    1.概述 上一讲,我们使用了别人根据COCO数据集训练好的模型来做目标检测,这一讲,我们就来训练自己的模型. 2.下载数据集 为了方便学习,我们先使用别人整理好的数据集来训练---VOC 2012数据 ...

  4. Tensorflow pb模型转uff模型方法及遇到KeyError20和expected Const问题解决

    项目所需要将Tensorflow 生成的pb模型转为uff模型,方法很简单,但是遇到的问题着实很多,这里主要记录下问题及解决方法,总之,最后是成功生成uff格式的模型的,有需要的可以参考. pb模型转 ...

  5. pytorch .pth模型转tensorflow .pb模型

    训练好的pytorch模型如何转化为tensorflow的pb模型? 本人初步使用的是onnx框架: pytorch --->  onnx ----> tensorflow 使用onnx转 ...

  6. TensorFlow pb模型修改和优化

    TensorFlow 模型训练完成后,通常会通过frozen过程保存一个最终的pb模型.保存的pb模型是以GraphDef数据结构保存的,可以序列化保存为二进制pb模型或者文本pbtxt模型.Grap ...

  7. 使用tensorflow object_detection API完成目标检测(object_detection API使用)

    硬件环境 操作系统:ubuntu16.04LTS 显卡:GTX1080Ti 10G显存 内存32G 代码托管在码云,因为github实在是太慢了,老是timeout,翻墙也不行,搞了半天搞不定,突然看 ...

  8. python怎么实现打开摄像头_python开启摄像头以及深度学习实现目标检测方法

    最近想做实时目标检测,需要用到python开启摄像头,我手上只有两个uvc免驱的摄像头,性能一般.利用python开启摄像头费了一番功夫,主要原因是我的摄像头都不能用cv2的VideCapture打开 ...

  9. [深度学习]C++调用Python-YOLO模型进行目标检测

    文章目录: 前言 C++调用Python的步骤 修改YOLOv5源码 C++读取Python返回值 ​​​​​ 前言 目前深度学习算法大多数是基于Python实现,但一些项目的框架是用C++搭建,所以 ...

最新文章

  1. MIT自然语言处理第二讲:单词计数(第一、二部分)
  2. Cachefiled
  3. 保驾护航金三银四,使用指南
  4. Hibernate知识问答
  5. SUSE上搭建Hadoop环境(单机模式+伪分布模式)
  6. linux 更新cuda 驱动程序,记:第一次更新服务器CUDA和GPU驱动
  7. java使用水晶报表,java水晶报表实例教程
  8. 解读SPSS多元方差分析中的多因素多变量的相互影响
  9. OpenGL 高质量纹理过滤的实例
  10. python中文分词器(jieba类库)
  11. html树状图怎么搜索节点,echarts2.* tree树形图节点点击事件和节点点击图标更改...
  12. 四.电影/综艺网站(包含搜索经验, 我的经验, 必看) 彻底帮你解决看电影/综艺的问题
  13. 西安长安茶馆/金领女子书院环境怎么样?路线怎么走?
  14. 大学生创新创业万学答案
  15. 化工厂人员定位详细解决方案
  16. GT30L32S4W中文字库芯片+墨水屏显示调好程序分享
  17. 算法时代必读——《算法霸权》数学杀伤性武器的威胁
  18. centos安装特定版本docker 和 docker-compose 以及防火墙的基本操作
  19. 关于单片机替代PLC的思考
  20. 关于Wechat 的充值

热门文章

  1. 可编程DDC控制器的实现 (1)
  2. php sqlite3菜鸟,SQLite 创建数据库 | 菜鸟教程
  3. perl-Git-1.8.3.1-14.el7_5.noarch 是 perl-Git-1.8.3.1-13.el7.noarch 的副本 perl-Git-1.8.3.1-14.el7_5.noar
  4. Android P内联优化导致的一个诡异Bug
  5. 数据到手了,第一件事先干啥?| 说人话的统计学
  6. 大数据的Lambda架构
  7. 微信第三方平台授权(第三方)
  8. 学会扒源码-HashMap
  9. 1905协议详解(四)数据帧分析总览
  10. idea中出现紫色_紫色测试和安全性实验中的混乱工程