参考:
https://pjreddie.com/darknet/yolov2/ #yolo-v2
https://opencv.org/releases.html #opencv源码下载
环境:
整个安装过程用两个字来形容就是“折腾”。第一步先安装好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
它会自动把摄像头打开,进行实时目标检测。