当前位置:   article > 正文

基于Openvino(c++)猫狗识别应用_svm 车辆识别 opencv c++

svm 车辆识别 opencv c++

一、代码

链接:https://pan.baidu.com/s/1nvgtKIRVPOEa0pJazW8GHQ提取码:qhkp

或者:https://github.com/caip1299920300/Openvino_dog_cat

二、环境配置

1、opencv环境配置

opencv版本:opencv340

可以使用下面的教程(也可以参考:VS+OpenCV+OpenVINO2022详细配置 - 知乎 (zhihu.com)

(1)我的电脑右键->属性->高级系统设置->环境变量->系统变量->Path->添加D:\OpenCV\build\x64\vc15\bin(注意是按照你自己的OpenCV的路径,这里给出的是我的路径,不可直接复制使用, 添加进的是opencv安装目录的build中的bin文件夹路径)

(2)将路径:D:\OpenCV\build\x64\vc15\bin\中的opencv_world420.dll、opencv_world420d.dll 复制到C:\Windows\SysWOW64目录下

(3)将路径:D:\OpenCV\build\bin\中的opencv_videoio_ffmpeg420_64.dll 复制到C:\Windows\System32目录下

如果找不到Windows可以点查看把隐藏项目勾上

2、VS新建项目,配置项目

配置VC++ 目录的”包含目录“和”库目录“
”包含目录“:
C:\Program Files(x86)\Intel\openvino_2022.1.0.643\runtime\include
C:\Program Files(x86)\Intel\openvino_2022.1.0.643\runtime\include\openvino
C:\Program Files(x86)\Intel\openvino_2022.1.0.643\runtime\include\ngraph
C:\Program Files(x86)\Intel\openvino_2022.1.0.643\runtime\include\ie
E:\opencv\build\include
E:\opencv\build\include\opencv2
”库目录“:
E:\opencv\build\x64\vc15\lib
C:\ProgramFiles (x86)\Intel\openvino_2022.1.0.643\runtime\lib\intel64\Release
配置”链接器“的输入:
openvino.lib
openvino_onnx_frontend.lib
openvino_ir_frontend.lib
opencv_world340.lib

三、运行代码

  1. #include <openvino/openvino.hpp>
  2. #include <iostream>
  3. #include <vector>
  4. #include <opencv2/opencv.hpp>
  5. int main() {
  6. std::string img_path = "E:/project/VS2017/dog_cat/img/dog.jpg"; // 预测图片
  7. std::string onnx_path = "E:/project/VS2017/dog_cat/model/Cat_dog.onnx"; // 预测模型
  8. size_t input_batch_size = 1; // 输入图片的batch_size
  9. size_t num_channels = 3; // 输入通道
  10. size_t h = 224; // 输入图片的高
  11. size_t w = 224; // 输入图片的宽
  12. clock_t startTime, endTime; // 推理时间记录变量
  13. // 0、创建IE插件,查询支持硬件设备
  14. ov::Core core;
  15. //获取当前支持的所有的AI硬件推理设备
  16. std::vector<std::string> devices = core.get_available_devices();
  17. for (int i = 0; i < devices.size(); i++) {
  18. std::cout << devices[i] << std::endl;
  19. }
  20. // 1、加载检测模型
  21. // 模型加载并编译
  22. ov::CompiledModel compiled_model = core.compile_model(onnx_path, "AUTO");
  23. // 创建用于推断已编译模型的推理请求对象 创建的请求分配了输入和输出张量
  24. ov::InferRequest infer_request = compiled_model.create_infer_request();
  25. // 2、请求网络输入
  26. auto input_tensor = infer_request.get_input_tensor(0);
  27. // 3、指定shape的大小
  28. input_tensor.set_shape({ input_batch_size, num_channels, w, h });
  29. // 4、获取输入的地址,并传递给指针input_data_host
  30. float* input_data_host = input_tensor.data<float>();
  31. // 对应于pytorch的代码部分
  32. // 推理开始时间
  33. startTime = clock();
  34. // opencv读取图片
  35. cv::Mat src = cv::imread(img_path);
  36. int image_height = src.rows;
  37. int image_width = src.cols;
  38. // 修改图片大小
  39. cv::Mat image;
  40. cv::resize(src, image, cv::Size(w, h));
  41. int image_area = image.cols * image.rows;
  42. unsigned char* pimage = image.data;
  43. float* phost_b = input_data_host + image_area * 0; // input_data_host和phost_*进行地址关联
  44. float* phost_g = input_data_host + image_area * 1;
  45. float* phost_r = input_data_host + image_area * 2;
  46. // BGR->RGB
  47. float mean[] = { 0.406, 0.456, 0.485 };
  48. float std[] = { 0.225, 0.224, 0.229 };
  49. for (int i = 0; i < image_area; ++i, pimage += 3) {
  50. // 注意这里的顺序rgb调换了
  51. *phost_r++ = pimage[0] / 255.; // 将图片中的像素点进行减去均值除方差,并赋值给input
  52. *phost_g++ = pimage[1] / 255.;
  53. *phost_b++ = pimage[2] / 255.;
  54. }
  55. // 5、执行预测
  56. infer_request.infer();
  57. // 6、推理结果
  58. auto output = infer_request.get_output_tensor(0);
  59. // 对输出结果处理
  60. float* prob = output.data<float>();
  61. const int num_classes = 2; // 种类
  62. int predict_label = std::max_element(prob, prob + num_classes) - prob; // 确定预测类别的下标
  63. std::string label;
  64. if (predict_label == 0)
  65. label = "cat";
  66. else
  67. label = "dog";
  68. float confidence = prob[predict_label]; // 获得预测值的置信度
  69. printf("confidence = %f, label = %s\n", confidence, label);
  70. endTime = clock();//计时结束
  71. std::cout << "total推理时间: " << (double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << std::endl;
  72. return 0;
  73. }

四、运行结果

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/385333
推荐阅读
相关标签
  

闽ICP备14008679号