OpenCV自帶dnn的Example研究(3)— object_detection

這個博客系列,簡單來講,今天咱們就是要研究
6個文件,看看在最新的OpenCV中,它們是如何發揮做用的。
在配置使用的過程當中,須要注意使用較高版本的VS避免編譯器兼容問題;因爲DNN程序的運行依賴於訓練成功的模型,所以須要預先下載準備;此外若是出現各類報錯,須要對症下藥。
此外,因爲須要使用common.hpp文件,因此須要引入dnn目錄到include中
用到的數據集都放在:
連接:https://pan.baidu.com/s/1WPoXU3VodErPHZo6Yc21xA 
提取碼:01no 
若是你沒找到,那必定是我忘了。
=====================================================================================友善的分割線============================
注意,這個例子有官方教程: https://docs.opencv.org/master/da/d9d/tutorial_dnn_yolo.html
yolo.jpg
教程給出了調用方法:

Usage examples

Execute in webcam:html

$ example_dnn_object_detection --config =[PATH -TO -DARKNET] /cfg /yolo.cfg --model =[PATH -TO -DARKNET] /yolo.weights --classes =object_detection_classes_pascal_voc.txt --width = 416 --height = 416 --scale = 0. 00392 --rgb

Execute with image or video file:git

$ example_dnn_object_detection --config =[PATH -TO -DARKNET] /cfg /yolo.cfg --model =[PATH -TO -DARKNET] /yolo.weights --classes =object_detection_classes_pascal_voc.txt --width = 416 --height = 416 --scale = 0. 00392 --input =[PATH -TO -IMAGE -OR -VIDEO -FILE] --rgb

參考這個 方法,修改咱們的調用參數

--config=e:/template/yolov3.cfg --model=e:/template/yolov3.weights --classes=e:/template/object_detection_classes_pascal_voc.txt --width=416 --height=416 --scale=0.00392 --input=e:/template/bike.avi --rgb
 
 
因此咱們須要先準備的是yolo.weights 和 yolo.cfg,
wget https : //pjreddie.com/media/files/yolov3.weights
wget https : //github.com/pjreddie/darknet/blob/master/cfg/yolov3.cfg?raw=true -O ./yolov3.cfg
wget https : //github.com/pjreddie/darknet/blob/master/data/coco.names?raw=true -O ./coco.names






對象識別是CV和DL的經典問題,看看OpenCV本身提供了什麼。
原本我使用的是OpenCV4,可是例子代碼使用的是最新從網上下載的,開頭直接給報了個錯
根據我多年程序設計的經驗(實際上是瞎猜),我認爲是否是個人OpenCV版本低了,感受更新到最新版本(這裏注意一下,對於vs2015和2017,opencv提供了prebuild版本,好比叫opencv-4.1.0-vc14_vc15.exe這樣的名字,能夠從官網直接下載)
注意prebuild是64位的,須要注意選擇。而後就能夠了,固然因爲參數問題,仍然是須要進行修改的。(果真猜對了)
由於已經出現了可以正確運行的命令行,因此這裏直接修改便可。
將汽車識別成bird確定是錯誤的,可是object detection和class的區別在於跟蹤,從顯示的結果上來看,就是畫框。

這個地方,就體現出了OpenCV DNN的黑盒特性,就是模型訓練中的東西,多是效果很是好的,也多是效果很差的。
對這塊的調節,不是OpenCV的工做,而是深度學習系統的工做—無論它是用什麼訓練出來的,咱們都但願OpenCV可以提供一個接入現有系統的接口。
在深度學習這裏,這纔是OpenCV的價值。

參考資料:






附件列表

相關文章
相關標籤/搜索