天天看点

Qt+opencv dnn模块调用tensorflow模型

opencv默认是msvc的,如果Qt装的mingw的,需要编译一份opencv,我在网盘存了一份3.4.1版本的,忘记从哪里下载的了。

链接:https://pan.baidu.com/s/1whgWXpd8BAgahG0HZxHiVg 
提取码:pqpq 
           

之前做一个app部署深度学习模型,网上看到的都是java+android studio做的,用Qt做的见不到,最近才知道opencv有dnn模块,在网上找了一些资料,据说可以使用各种主流框架的模型文件,因此试用了一下,感觉用来部署很方便,opencv很强大。

我没有配置opencv-android-mingw,所以用的这个opencv应该不能用在android上,但是我觉得编译一个opencv-android-mingw应该可以用,以后会尝试。

主要代码

.pro文件中加入

INCLUDEPATH += D:\OpenCVMinGW3.4.1\include
LIBS += D:\OpenCVMinGW3.4.1\bin\libopencv_*.dll
           

点击构建,完成之后,把ssd_mobilenet_v1_coco_11_06_2017(主要用到pbtxt和pb文件)放在构建目录下(build-XXX_Qt_5_8_0_MinGW_32bit-Debug)。

调用tensorflow保存的模型文件

String weights = "./ssd_mobilenet_v1_coco_11_06_2017/frozen_inference_graph.pb";
String prototxt = "./ssd_mobilenet_v1_coco_11_06_2017/ssd_mobilenet_v1_coco.pbtxt";
dnn::Net net = cv::dnn::readNetFromTensorflow(weights, prototxt);
           

输入图片

cv::Mat blob = cv::dnn::blobFromImage(frame, 1. / 255, Size(300, 300));
net.setInput(blob);
Mat output = net.forward();
           

结果图展示:

Qt+opencv dnn模块调用tensorflow模型

测试速度有点慢,识别效果一般,可以换其他的模型试一试。

识别视频和单个图片的代码上传至github。

以后的计划

尝试使用opencv-android用在手机上。

参考文献

OpenCV调用TensorFlow预训练模型

基于OpenCV和YOLOv3深度学习的目标检测

继续阅读