問題一:能夠成功運行目標檢測,但是標籤不能正確顯示。
顯示的標籤內容爲:“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);
}