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();
结果图展示:
测试速度有点慢,识别效果一般,可以换其他的模型试一试。
识别视频和单个图片的代码上传至github。
以后的计划
尝试使用opencv-android用在手机上。