mac下安裝darknet和opencv跑yolo-v2實時目標檢測
參考:
環境:
整個安裝過程用兩個字來形容就是“折騰”。第一步先安裝好opencv,一個強大開源計算機視覺庫。從官網下載了2.4.10的原始碼進行編譯安裝:
cd opencv-2.4.10
mkdir build
cd build
cmake -G "Unix Makefiles" -D CMAKE_BUILD_TYPE=Release ..
在原始碼目錄下新建了一個build目錄,這是因為cmake執行過程中會生成很多編譯的中間檔案以及makefile檔案,cmake命令將CMakeLists.txt檔案轉化為make所需要的makefile檔案,最後用make命令編譯原始碼生成可執行程式或共享庫(so(shared object)。cmake編譯如果能一衝到底那就恭喜了,也就沒有下文了,不過這種概率幾乎為0。我這反正是出了N多錯誤,譬如:
opencv-2.4.10/build/CMakeFiles/CMakeTmp/CheckIncludeFile.c:1:10: fatal error: 'io.h' file not found
fatal error: 'linux/videodev2.h' file not found
fatal error: 'libavformat/avformat.h' file not found
fatal error: 'ffmpeg/avformat.h' file not found
...
各種找不到標頭檔案或其它錯誤,嘗試了一些辦法去解決,但要消除全部錯誤幾乎要累趴下,放棄原始碼編譯這條路徑,改用brew安裝。
brew install opencv
然後進入可怕的靜默狀態,等了N久,中間我還重灌了一次homebrew,終於看到了進度條。
完成了第一步opencv的安裝。然後進入第二步,從github上下載darknet原始碼進行編譯安裝。
因為我們要帶opencv安裝darknet,所以要將Makefile檔案中opencv一項置為1。
然後make開始編譯,迎來了意料中的報錯。
.....
"_cvWaitKey", referenced from:
_test_resize in image.o
_display_in_thread in demo.o
ld: symbol(s) not found for architecture x86_64
clang: fatal error: linker command failed with exit code 1 (use -v to see invocation)
先是一頓百度,谷歌沒有解決,然後自己仔細分析了一下Makefile,發現有一處異常。
LDFLAGS和COMMON都有用到pkg-config工具,這個工具可以列出某個庫的相關資訊,例如:
而我恰恰沒有這個pkg-config,首先嚐試下原始碼安裝,失敗。然後用brew安裝,成功了。
再重新make一下darknet,竟然成功了!
下面可以跑一下實時檢測的命令了:
./darknet detector demo cfg/coco.data cfg/yolov2.cfg yolov2.weights
它會自動把攝像頭開啟,進行實時目標檢測。