用C++ 和OpenCV 實現(xiàn)視頻目標檢測(YOLOv4模型)

據說,現(xiàn)在很多小區(qū)都上線了AI抓拍高空拋物的黑科技,可以自動分析拋物軌跡,用來協(xié)助檢查很多不文明行為。
你想不想知道,這類檢測視頻中目標物的黑科技是怎么實現(xiàn)的呢?
雖然不同場景下的目標檢測模型訓練不同,但底層技術都是一樣的。
這里就一步步來教一下大家如何用C++ 和OpenCV 實現(xiàn)視頻目標檢測(YOLOv4模型)。
1. 實現(xiàn)思路
讀取視頻流,載入模型,執(zhí)行推理,找出所有目標及其位置,最后繪制檢測結果。
2. 實現(xiàn)步驟
讀取攝像頭視頻流或本地視頻文件:
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);
執(zhí)行推理:
net.forward(outs, outNames); //前向傳播找出所有目標及其位置:
for (size_t i = 0; i < outs.size(); ++i) {data = (float*)outs[i].data;for (int j = 0; j < outs[i].rows; ++j, data += outs[i].cols){scores = outs[i].row(j).colRange(5, outs[i].cols);cv::minMaxLoc(scores, 0, &confidence, 0, &classIdPoint);
繪制檢測結果:
void drawPred(cv::Mat &frame,vector<cv::Rect> &boxes,vector<int> &classIds,vector<int> &indices,vector<string> &classNamesVec)

(a)測試圖1YOLOv4

(b)測試圖1YOLOv4-tiny

(c)測試圖2YOLOv4

(d)測試圖2YOLOv4-tiny
圖 YOLOv4與YOLOv4-tiny模型的檢測結果
3. 總結
YOLOv4的檢測精度優(yōu)于YOLOv4-tiny。經GPU 加速后,模型推理速度明顯提升,YOLOv4 的推理速度提高了約10倍,YOLOv4-tiny的推理速度提高了約4.8倍。
若想了解更多關于視頻檢測或文本檢測的內容,可以閱讀《OpenCV 4機器學習算法原理與編程實戰(zhàn)》一書。


▊《OpenCV 4機器學習算法原理與編程實戰(zhàn)》
朱斌 著
注重理論結合實戰(zhàn)
兼顧經典與前沿算法
應用案例翔實
學習路線清晰
本書主要面向OpenCV領域的研究與開發(fā)人員,采用原理結合實戰(zhàn)的方式,介紹OpenCV 4的機器學習算法模塊與深度神經網絡模塊中的核心算法原理與C++編程實戰(zhàn)。全書共10章, 第1~3章, 介紹OpenCV 4的基礎知識、基本圖像操作和機器學習基礎知識;第4~8章,介紹K-means、KNN、決策樹、隨機森林、Boosting算法和支持向量機等機器學習算法與編程實戰(zhàn);第9~10章,介紹神經網絡與深度神經網絡的基本原理與編程實戰(zhàn),并提供了不同深度學習模型的部署示例代碼。
本書基本聚焦于機器學習在計算機視覺領域的應用,不要求讀者具有相應的知識背景,在必要時書中會介紹相關的基本概念。因此,本書既可以作為相關專業(yè)學生的實驗教材,也可以作為研究人員或工程技術人員的參考資料。
(掃碼了解本書詳情)
如果喜歡本文 歡迎 在看丨留言丨分享至朋友圈 三連 熱文推薦
▼點擊閱讀原文,獲取本書詳情~
