天天看點

又又又送書啦!用C++ 和OpenCV 實作視訊目标檢測(YOLOv4模型)

又又又送書啦!用C++ 和OpenCV 實作視訊目标檢測(YOLOv4模型)

據說,現在很多小區都上線了AI抓拍高空抛物的黑科技,可以自動分析抛物軌迹,用來協助檢查很多不文明行為。

你想不想知道,這類檢測視訊中目标物的黑科技是怎麼實作的呢?

雖然不同場景下的目标檢測模型訓練不同,但底層技術都是一樣的。

這裡就一步步來教一下大家如何用C++ 和OpenCV 實作視訊目标檢測(YOLOv4模型)。

1.     實作思路

讀取視訊流,載入模型,執行推理,找出所有目标及其位置,最後繪制檢測結果。

2.     實作步驟

讀取攝像頭視訊流或本地視訊檔案:

cv::VideoCapture cap;cap.open(0); //打開攝像頭//cap.open("TH1.mp4"); //讀取視訊檔案      

載入模型:

cv::dnn::Net net = cv::dnn::readNet(config, model, framework);net.setPreferableTarget(cv::dnn::DNN_TARGET_CUDA);      

執行推理:

net.forward(outs, outNames); //前向傳播      

找出所有目标及其位置:

for (size_t i = 0; i < outs.size(); ++i) {float*)outs[i].data;for (int j = 0; j < outs[i].rows; ++j, data += outs[i].cols)     {5, outs[i].cols);0, &confidence, 0, &classIdPoint);      

繪制檢測結果:

void drawPred(    cv::Mat &frame,vector<cv::Rect> &boxes,vector<int> &classIds,vector<int> &indices,vector<string> &classNamesVec)      
又又又送書啦!用C++ 和OpenCV 實作視訊目标檢測(YOLOv4模型)

(a)測試圖1YOLOv4

又又又送書啦!用C++ 和OpenCV 實作視訊目标檢測(YOLOv4模型)

(b)測試圖1YOLOv4-tiny

又又又送書啦!用C++ 和OpenCV 實作視訊目标檢測(YOLOv4模型)

(c)測試圖2YOLOv4

又又又送書啦!用C++ 和OpenCV 實作視訊目标檢測(YOLOv4模型)

(d)測試圖2YOLOv4-tiny

圖 YOLOv4與YOLOv4-tiny模型的檢測結果

3.     總結

YOLOv4的檢測精度優于YOLOv4-tiny。經GPU 加速後,模型推理速度明顯提升,YOLOv4 的推理速度提高了約10倍,YOLOv4-tiny的推理速度提高了約4.8倍。

若想了解更多關于視訊檢測或文本檢測的内容,可以閱讀《OpenCV 4機器學習算法原理與程式設計實戰》一書。

又又又送書啦!用C++ 和OpenCV 實作視訊目标檢測(YOLOv4模型)

▊《OpenCV 4機器學習算法原理與程式設計實戰》

朱斌 著

  • 注重理論結合實戰
  • 兼顧經典與前沿算法
  • 應用案例翔實
  • 學習路線清晰

本書主要面向OpenCV領域的研究與開發人員,采用原理結合實戰的方式,介紹OpenCV 4的機器學習算法子產品與深度神經網絡子產品中的核心算法原理與C++程式設計實戰。全書共10章, 第1~3章, 介紹OpenCV 4的基礎知識、基本圖像操作和機器學習基礎知識;第4~8章,介紹K-means、KNN、決策樹、随機森林、Boosting算法和支援向量機等機器學習算法與程式設計實戰;第9~10章,介紹神經網絡與深度神經網絡的基本原理與程式設計實戰,并提供了不同深度學習模型的部署示例代碼。

繼續閱讀