在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<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);
            }
發佈了9 篇原創文章 · 獲贊 23 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章