在OpenVINO上运行YOLO v3目标检测问题记录

问题一:能够成功运行目标检测,但是标签不能正确显示。

显示的标签内容为:“label # xx : x.xx”
例如:检测的是人标签显示为 label #0:0.98
正确显示应该将label 替换为正确的标签
问题如图:
问题查找:object_detection_demo_yolov3_async文件夹下的main.cpp中 控制标签显示的代码如下:

 cv::putText(frame,
      (label < static_cast(labels.size()) ?
        labels[label] : std::string("label #") + std::to_string(label)) 
        + conf.str(),
        +  cv::Point2f(static_cast(object.xmin),        
        +  static_cast(object.ymin - 5)),  cv::FONT_HERSHEY_COMPLEX_SMALL, 1,
cv::Scalar(0, 0, 255));
  • 有一个判断语句,判断label 和 static_cast(labels.size())的大小,如是前者小则显示正确的标签,如是后者小则显示上图label # xx : x.xx 的标签。
  • 此时不能准确知道两个变量的具体值为多少,插入代码输出测试
std::cout <<"label="<< label << "labels.size = " << static_cast(labels.size()) << std::endl;

得到结果为前者为显示正确的标签数字,但是后者size一直为0,判断问题出在labels此变量。

  • 找到labels变量定义和导入的代码
 /** Reading labels (if specified) **/
        std::string labelFileName = fileNameNoExt(FLAGS_m) + ".labels";
        std::vector labels;
        std::ifstream inputFile(labelFileName);
        std::copy(std::istream_iterator(inputFile),
                  std::istream_iterator(),
                  std::back_inserter(labels));

其中:fileNameNoExt() 函数作用为取文件名,不带扩展名。
结合上文代码在.xml和.bin文件所在路径添加.label文件(即coco.names)但要注意将名字命名为和.xml文件同名才可以读到。

  • 运行代码,问题成功解决!
./object_detection_demo_yolov3_async  -i ~/下载/playing_ball.mp4 -m ~/intel/openvino/deployment_tools/model_optimizer/frozen_darknet_tinyyolov3_model.xml  

如下图:

问题二:检测视频过大,屏幕无法显示完全且不能进行放大缩小

问题查找:找到控制窗口输出的代码

if (!FLAGS_no_show) {
                cv::imshow("Detection results", frame);
            }

**解决方法:**增加控制窗口大小的函数

 if (!FLAGS_no_show) {
		//更改窗口大小
		cv::namedWindow("Detection results", 0);
        cv::resizeWindow("Detection results", 500, 500); 
        cv::imshow("Detection results", frame);
            }

你可能感兴趣的:(学习记录,深度学习,tensorflow)