1. 程式人生 > >mac下安裝darknet和opencv跑yolo-v2實時目標檢測

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

它會自動把攝像頭開啟,進行實時目標檢測。