YOLO---YOLOv3 with OpenCV 再使用
YOLOv3 with OpenCV官網 @ https://github.com/JackKoLing/opencv_deeplearning_practice/tree/master/pracice3_opencv_yolov3
下載並備齊:yolov3.weights權重文件、yolov3.cfg網絡構建文件、coco.names、xxx.jpg、xxx.mp4文件、object_detection_yolo.cpp、object_detection_yolo.py等文件;
依賴環境:C++的編譯環境(如G++/VScode)、OpenCV3.4.2+(記住安裝目錄)
編譯情況:下載源文件,無需復雜的編譯,直接修改進行應用
支持:windows + linux + CPU + GPU(可適用於英特爾)
特點:
(1)在OpenCV中使用YOLOv3, 可以在windows下+ ubuntu下使用。
(2)windows下,之前做,object_detection_yolo.cpp是在Visual Studio(VS)下編譯的。
(3)ubuntu下,這次,object_detection_yolo.cpp是g++編譯的。
(3)OpenCV的DNN,GPU僅使用英特爾的GPU進行測試,因此如果沒有英特爾GPU,代碼會將您切換回CPU。
使用:
(1)object_detection_yolo.cpp,執行:
編譯,g++ `pkg-config opencv --cflags` object_detection_yolo.cpp -o object_detection_yolo `pkg-config opencv --libs` -std=c++11
測試,a single image:
./object_detection_yolo --image=./data/1.jpg
a video file:
./object_detection_yolo --video=./data/run.mp4
(2)object_detection_yolo.py,執行:
a single image:
python3 object_detection_yolo.py --image=bird.jpg
a video file:
python3 object_detection_yolo.py --video=run.mp4
#readme.txt
Run the getModels.sh file from command line to download the needed model files sudo chmod a+x getModels.sh ./getModels.sh Python: Commandline usage to colorize a single image: python3 object_detection_yolo.py --image=bird.jpg a video file: python3 object_detection_yolo.py --video=run.mp4 C++: a single image: ./object_detection_yolo.out --image=bird.jpg a video file: ./object_detection_yolo.out --video=run.mp4 Compilation examples: g++ -ggdb `pkg-config --cflags --libs /usr/local/Cellar/opencv3/3.4.2/lib/pkgconfig/opencv.pc` object_detection_yolo.cpp -o object_detection_yolo.out g++ -ggdb `pkg-config --cflags --libs /usr/local/opencv3.4.2/lib/pkgconfig/opencv.pc` object_detection_yolo.cpp -o object_detection_yolo.out # For OpenCV 2.4.x cd /path/to/opencv/samples/c/ # For OpenCV 3 cd /path/to/opencv/samples/cpp/ #Compile g++ -ggdb facedetect.cpp -o facedetect `pkg-config --cflags --libs opencv` #run ./facedetect /usr/local/opencv3.4.2/include/opencv2/?? cd /home/u/opencv3.4.2/samples/cpp/ ?? g++ -ggdb `pkg-config --cflags --libs /usr/lib/x86_64-linux-gnu/pkgconfig/opencv.pc` object_detection_yolo.cpp -o object_detection_yolo.out g++ -ggdb object_detection_yolo.cpp -o object_detection_yolo.out `pkg-config --cflags --libs /usr/lib/x86_64-linux-gnu/pkgconfig/opencv.pc` g++ object_detection_yolo.cpp -o object_detection_yolo `pkg-config --cflags --libs /usr/lib/x86_64-linux-gnu/pkgconfig/opencv.pc`
-------------------具體遇見問題與解決----------------------
(1)只要環境搭建好,object_detection_yolo.py運行比較順暢,沒有出現什么問題
(2)object_detection_yolo.cpp編譯時,遇見問題
運行: g++ object_detection_yolo.cpp -o object_detection_yolo `pkg-config --cflags --libs /usr/lib/x86_64-linux-gnu/pkgconfig/opencv.pc` 報錯: No package 'object_detection_yolo' found object_detection_yolo.cpp:10:31: fatal error: opencv2/highgui.hpp: 沒有那個文件或目錄 #include <opencv2/highgui.hpp> ^ compilation terminated. u@u1604:~/yolov3-opencv3.4.2/yolo-opencv$ g++ `pkg-config object_detection_yolo --cflags` object_detection_yolo.cpp -o opencv `pkg-config opencv --libs` Package object_detection_yolo was not found in the pkg-config search path. Perhaps you should add the directory containing `object_detection_yolo.pc' to the PKG_CONFIG_PATH environment variable No package 'object_detection_yolo' found object_detection_yolo.cpp:11:31: fatal error: opencv2/imgproc.hpp: 沒有那個文件或目錄 #include <opencv2/imgproc.hpp> ^ compilation terminated. u@u1604:~/yolov3-opencv3.4.2/yolo-opencv$ g++ `pkg-config object_detection_yolo --cflags` object_detection_yolo.cpp -o opencv `pkg-config opencv --libs` Package object_detection_yolo was not found in the pkg-config search path. Perhaps you should add the directory containing `object_detection_yolo.pc' to the PKG_CONFIG_PATH environment variable No package 'object_detection_yolo' found object_detection_yolo.cpp:13:27: fatal error: opencv2/dnn.hpp: 沒有那個文件或目錄 #include <opencv2/dnn.hpp> ^ compilation terminated.
解決:
查看object_detection_yolo.cpp中highgui.hpp、imgproc.hpp、dnn.hpp都能找到文件,猜測是路徑讀不進來,按提示更改,
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/dnn/dnn.hpp>
//#include <opencv2/highgui.hpp>
//#include <opencv2/imgproc.hpp>
//#include <opencv2/dnn.hpp>
--------------------
拷貝
sudo cp -r /home/用戶名/桌面/lib /usr
sudo cp -r /home/u/桌面/dnn.hpp /usr/include/opencv2/dnn
新建
sudo touch filename 新建文件
sudo mkdir foldername 新建文件夾
刪除
sudo rm -rf 文件夾
sudo rm -rf 文件
----------------------------------
上一步,通了
繼續執行: g++ `pkg-config opencv --cflags` object_detection_yolo.cpp -o object_detection_yolo `pkg-config opencv --libs`
(參考 g++ `pkg-config opencv --cflags` opencv.cpp -o opencv `pkg-config opencv --libs` #將OpenCV的庫包含進去,進行編譯)
報錯:
------------------------------ u@u1604:~/yolov3-opencv3.4.2/yolo-opencv$ g++ `pkg-config opencv --cflags` object_detection_yolo.cpp -o object_detection_yolo `pkg-config opencv --libs` object_detection_yolo.cpp: In function ‘int main(int, char**)’: object_detection_yolo.cpp:77:31: error: no matching function for call to ‘std::basic_ifstream<char>::basic_ifstream(std::__cxx11::string&)’ ifstream ifile(str); ------------------------------
解決:
gcc/g++以c++11編譯(僅g++ 4.8及以上版本才支持C++ 11標准。)
g++ --version
g++ -V
再執行OK: g++ `pkg-config opencv --cflags` object_detection_yolo.cpp -o object_detection_yolo `pkg-config opencv --libs` -std=c++11
執行可執行文件:
./object_detection_yolo --image=./data/1.jpg
*****************************#20191011再用**************************************
#20191011 g++ `pkg-config opencv --cflags` yolo.cpp -o yolo `pkg-config opencv --libs` -std=c++11 a single image: ./yolo --image=./data/1.jpg a video file: ./yolo --video=./data/run.mp4 使用語法: u@u160406:~/yolo-opencv$ g++ `pkg-config opencv --cflags` yolo.cpp -o yolo `pkg-config opencv --libs` -std=c++11 u@u160406:~/yolo-opencv$ ./yolo --video=./data/run.mp4