无法在 OpenCV 中应用 tensorflow 模型
Posted
技术标签:
【中文标题】无法在 OpenCV 中应用 tensorflow 模型【英文标题】:Cannot apply tensorflow model in OpenCV 【发布时间】:2020-09-23 06:31:40 【问题描述】:您好,我在 OpenCV 中应用 tensorflow 模型时遇到问题。下面的代码可以正确加载模型,但是在调用 forward 方法时会抛出 Assertion 错误。你有什么想法问题出在哪里吗?或者如何调试/找到它?
cv::dnn::Net net;
string path;
path = "graph.pb";
net = cv::dnn::readNetFromTensorflow(path);
if (net.empty())
std::cerr << "Can't load network by using the given files." << std::endl;
return ;
Mat image = imread(imagePath)
Mat inputBlob = cv::dnn::blobFromImage(image, 1.0, Size(512, 512), Scalar(0,0,0), true, false);
int N = inputBlob.size[0], C = inputBlob.size[1], H = inputBlob.size[2], W = inputBlob.size[3]; // [1, 3, 512, 512]
net.setInput(inputBlob); //set the network input
Mat output = net.forward(); // <- throws error
错误:
调试断言失败!
程序:C:\Workspace\ImageAnalysisPlus\x64\Debug\opencv_world3410d.dll 文件:C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\include\矢量线:1789
表达式:在空向量上调用 back()
有关您的程序如何导致断言失败的信息,请参阅有关断言的 Visual C++ 文档。
OpenCV 版本:4.4.0
Tensorflow 模型:https://drive.google.com/file/d/1aE0smAw-CyPLch6UY8blK3RreT5RrZfN/view?usp=sharing
平台:Windows 10、Visual Studio 2017
我尝试在 python 和 OpenCV 中加载模型,它可以工作。
提前感谢您的任何建议。
【问题讨论】:
我刚刚在 Ubuntu 18.04 和 OpenCV 4.2.0 上尝试了您的代码和模型,加载和转发模型没有问题。这可能是由于 OpenCV 版本造成的,尽管在我看来 4.4.0 对外部图比前一个更健壮。通过更改模型已解决了相同的问题,但这可能不是您想要做的.. 【参考方案1】:我不得不承认我没有尝试发布的最小代码。这是一个更大的代码的一部分。最少的代码也适用于我的机器。知道我发现我在在未初始化的网络上调用 forward 方法导致了错误。我在类的 init 方法中初始化了局部网络变量,而不是类属性。
【讨论】:
以上是关于无法在 OpenCV 中应用 tensorflow 模型的主要内容,如果未能解决你的问题,请参考以下文章
玩转谷歌物体识别API,用TensorFlow和OpenCV打造实时识别应用
Azure (Google Cloud) + Flask + Tensorflow + OpenCV + pytesseract + Gunicorn + Apache2 应用部署
anaconda+opencv+tensorflow环境配置