前提条件
已经安装好 OpenVINO、Visual Studio 2017。
配置项目
-
新建项目 -> C++ Windows 桌面项目 -> Windows 桌面向导 -> 项目命名为 cats_dogs_infer -> 空项目 -> 确定:
-
选中“空项目” -> 确定:
-
右键源文件 -> 新建 cats_dogs_infer.cpp:
-
右键项目 -> 属性 -> 配置选择“所有配置” -> 平台选择“所有平台”:
- 输出目录:
$(SolutionDir)bin\$(Platform)\$(Configuration)\
- 中间目录:
$(SolutionDir)Intermediate\$(Platform)\$(Configuration)\
修改完毕后点击应用。
-
C/C++ -> 常规 -> 平台选中“x64”:
附加包含目录:$(IE_DIR)\include; $(IE_DIR)\src\extension; $(IE_DIR)\samples\common; $(OPENCV_DIR)\include
修改完毕后点击应用。
-
C/C++ -> 预处理器:
预处理器定义中输入:_CRT_SECURE_NO_WARNINGS
-
链接器 -> 常规:
附加库目录:$(IE_DIR)\lib\intel64\$(Configuration); $(OPENCV_DIR)\lib
-
链接器 -> 输入 -> 配置选中“Debug” -> 平台选中“x64”:
附加依赖项中添加:
inference_engined.lib; cpu_extension.lib; opencv_calib3d412d.lib; opencv_core412d.lib; opencv_dnn412d.lib; opencv_features2d412d.lib; opencv_flann412d.lib; opencv_gapi412d.lib; opencv_highgui412d.lib; opencv_imgcodecs412d.lib; opencv_imgproc412d.lib; opencv_ml412d.lib; opencv_objdetect412d.lib; opencv_photo412d.lib; opencv_stitching412d.lib; opencv_video412d.lib; opencv_videoio412d.lib
修改完毕后点击应用。
-
链接器 -> 输入 -> 配置选中“Release”-> 平台选中“x64”:
附加依赖项中添加:inference_engine.lib; cpu_extension.lib; opencv_calib3d412.lib; opencv_core412.lib; opencv_dnn412.lib; opencv_features2d412.lib; opencv_flann412.lib; opencv_gapi412.lib; opencv_highgui412.lib; opencv_imgcodecs412.lib; opencv_imgproc412.lib; opencv_ml412.lib; opencv_objdetect412.lib; opencv_photo412.lib; opencv_stitching412.lib; opencv_video412.lib; opencv_videoio412.lib
其中 cpu_extension.lib 是 CPU 插件扩展库。
- inference_engine.lib 是用于 Release 模式的 OpenVINO 推理引擎库函数,在 C:\Program Files (x86)\IntelSWTools\openvino_2019.3.334\deployment_tools\inference_engine\lib\intel64\Release 目录下。
- inference_engined.lib 是用于 Debug 模式的 OpenVINO 推理引擎库函数,在 C:\Program Files (x86)\IntelSWTools\openvino_2019.3.334\deployment_tools\inference_engine\lib\intel64\Debug 目录下。
- OpenCV 库函数在 C:\Program Files (x86)\IntelSWTools\openvino_2019.3.334\opencv\lib 文件夹中。有带后缀 ‘d’ 的,表示用于 Debug 模式,没有后缀 ‘d’ 的,表示用于 Release 模式。
编写程序
需要修改的地方:
- IR_FileNameNoExt:设置成你电脑上优化后的模型的路径,不要带后缀,如:E:/1-tf_train/workspaces/cats_dogs/optimized_model/ssd_inception_v2_coco(ssd_inception_v2_coco 是模型的名字)
- imageFile:用来测试的图片的路径
//包含必要的头文件
#include<string> //C++ string标准库
#include<inference_engine.hpp> //Inference Engine库
#include<samples/ocv_common.hpp>//OpenCV库及matU8ToBlob函数定义
#include<ext_list.hpp>//IE CPU扩展库
#include<time.h>//C time标准库
using namespace InferenceEngine;
//将OpenCV Mat对象中的图像数据传给为InferenceEngine Blob对象
void frameToBlob(const cv::Mat& frame, InferRequest::Ptr& inferRequest, const std::string& inputName) {
/* 从OpenCV Mat对象中拷贝图像数据到InferenceEngine 输入Blob对象 */
Blob::Ptr frameBlob = inferRequest->GetBlob(inputName);
matU8ToBlob<uint8_t>(frame, frameBlob);
}
//配置推理计算设备,IR文件路径,图片路径,阈值和标签
std::string DEVICE = "CPU";
std::string IR_FileNameNoExt = "E:/1-tf_train/workspaces/cats_dogs/optimized_model/ssd_inception_v2_coco";
std::string imageFile = "E:/1-tf_train/workspaces/cats_dogs/images/train/cat.11.jpg";
float confidence_threshold = 0.7; //取值0~1
std::vector<std::string> labels = {
"fake","cat","dog" }; //标签输入
int main(void