问题一:能够成功运行目标检测,但是标签不能正确显示。
显示的标签内容为:“label # xx : x.xx”
例如:检测的是人标签显示为 label #0:0.98
正确显示应该将label 替换为正确的标签
问题如图:
问题查找:object_detection_demo_yolov3_async文件夹下的main.cpp中 控制标签显示的代码如下:
cv::putText(frame,
(label < static_cast<int>(labels.size()) ?
labels[label] : std::string("label #") + std::to_string(label))
+ conf.str(),
+ cv::Point2f(static_cast<float>(object.xmin),
+ static_cast<float>(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<int>(labels.size()) << std::endl;
得到结果为前者为显示正确的标签数字,但是后者size一直为0,判断问题出在labels此变量。
- 找到labels变量定义和导入的代码
/** Reading labels (if specified) **/
std::string labelFileName = fileNameNoExt(FLAGS_m) + ".labels";
std::vector<std::string> labels;
std::ifstream inputFile(labelFileName);
std::copy(std::istream_iterator<std::string>(inputFile),
std::istream_iterator<std::string>(),
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);
}