想要快速做图像检测,但不想自己训练库,了解到现在可以直接掉tensorflow的模型。于是做了这个,原始是qt4,vs2010,但想要调用tensorflow模型,opencv必须在3.3版本以上,而这个版本以上必须VS2015以上来支持,同时vs2015必须qt5.7以上来配合显示。经过一系列的查找资料,知道了各个版本的限制。tensorflow模型又必须在VS中的64位下调试。最终确定下来开发环境如标题所示。经过一个多星期的环境配置,终于配置成功了(中间各种问题阻挠着我)。
https://www.jianshu.com/p/d3607ccb72a8
按照上述链接做了一遍。各种调试解决bug后最终始终报错如下
OpenCV(3.4.1) Error: Unspecified error (Const input blob for weights not found) in cv::dnn::experimental_dnn_v4::`anonymous-namespace'::TFImporter::getConstBlob, file C:\build\master_winpack-build-win64-vc14\opencv\modules\dnn\src\tensorflow\tf_importer.cpp, line 579
出现这个问题,可能是你的.pb模型文件与.pbtxt文件不对应 这个是在下面链接下找到的答案
https://blog.csdn.net/guyuealian/article/details/80570120
这里提了一下常见的错误和坑。。然后我从这个思路出发,找了上面这边文章的.pb文件和pbtxt文件来尝试。尝试了几个以后确实其他都可以实现,只有第一个文字那对文件不匹配。但试了这几个提到的效果都很差,图像不出框。原始图像和最终图像一个样子。ssd_inception_v2_coco_2017_11_17/frozen_inference_graph.pb和ssd_inception_v2_coco_2017_11_17.pbtxt这对就是没有效果,我把confidenceThreshold参数由原来的0.2改成了0.05以后面前出现了框框,但效果仍然很差,但这就说明程序是没问题的,是训练模型不合适。最终,我换成了下面这对文件效果还凑合。
ssd_mobilenet_v1_coco_11_06_2017/frozen_inference_graph.pb和ssd_mobilenet_v1_coco.pbtxt
这对检测出大概,虽然也有误差,但相比之前的那几个模型要好很多。
https://blog.csdn.net/xingchenbingbuyu/article/details/78416887
上面的链接我也参考了一下。
最后为了满足leader的要求我又在qt上实现了简单的显示。至少这几个开发环境算是搭建成功了。
PS:这里没有用到python的东西。我之前还下了Python的安装环境,越搞越麻烦,后来只是调用了python训练好的tensorflow模型生成的pb文件,直接在VS环境下编写代码就可以了。
还有遗留问题没有解决,网上好多资料得到的训练好的模型是四个文件,ckpt文件等,而这里我们用的是pb文件,那么怎么将那四个文件转换成我们要的pb文件和pbtxt文件,我还是没找到好的解决方法,网上查到的资料很乱。理论上有资料说ckpt文件是暂时的缓存文件,而pb才是真正的固化文件。而我是python门外汉,也不想自己搞的面太错综复杂了。留给大神给我答案吧,或者给我个链接也行。
最终结果以后有机会再展示。。https://blog.csdn.net/GAN_player/article/details/77586489 我是参考这个博文成功将ckpt文件转成pb,并测试成功。