c++ - 如何用OpenCV C++加载Yolo目标检测网络

标签 c++ opencv object detection yolo

我按照本教程实现了 Yolo 对象检测器:https://github.com/thtrieu/darkflow/ 我成功地完成了它。

创建的 .pb 文件可用于将图形迁移到移动设备(JAVA/C++/Objective-C++)。输入张量和输出张量的名称分别为'input'和'output'。

我想用 OpenCV (c++) 加载网络。 readNetFromTensorflow() 方法需要两个文件:.pb 和 .pbtxt。后者不是由上述实现生成的。 同样,要使用 readNetFromDarknet() 方法,必须有两个文件:.cfg 和 .weights。后者不是由上述实现生成的。

那么,如何使用 opencv 将 yolo 网络从 python 迁移到 c++?

我也试过直接从.pb文件生成.pbtxt文件,但是readNetFromTensorflow()方法不成功(生成一个没有有用信息的通用异常)

抛出引用异常:

[Exception thrown at 0x00007FFFB80C9129 in Object_detection_inference_cpp.exe: Microsoft C++ exception: cv::Exception at memory location 0x000000CBC18FDC90.]

提前致谢。

最佳答案

这是我用来将 .pb 文件转换为 .pbtxt 文件的代码:

import tensorflow as tf
from google.protobuf import text_format
from tensorflow.python.platform import gfile

def graphdef_to_pbtxt(filename): 
    with gfile.FastGFile(filename,'rb') as f:
    graph_def = tf.GraphDef()
    graph_def.ParseFromString(f.read())
    tf.import_graph_def(graph_def, name='')
    tf.train.write_graph(graph_def, 'pbtxt/', 'tiny-yolov2-trial3-test.pbtxt', as_text=True)
  return

graphdef_to_pbtxt('tiny-yolov2-trial3-test.pb')

要使用 tf_text_xxx.py 必须有 .config 文件。我只有上面教程中的 .cfg 文件。因此,我无法使用您报告的那三个功能。我做错了什么吗?

关于c++ - 如何用OpenCV C++加载Yolo目标检测网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56842174/

相关文章:

python - 为什么对象类定义会产生影响

javascript - 操作 Javascript 对象数组

python - 在 Python 的 OpenCV 中使用鱼眼相机捕获的点不失真的正确方法是什么?

python - 我该如何处理基本矩阵?

javascript - 合并和转换对象中的键和数组的最佳方法

c++ - 从资源 ID 创建 CBitmap

c++ - 不抛出或异常?

c++ - 我的多线程程序在双核机器上运行缓慢或出现死锁,请帮忙

c++ - 如何将 C++ 目标文件与 ld 链接

python - 如何使用 requirements.txt 在 Heroku python 网络应用程序中安装 Dlib?