Mac/Linux上编译支持视频输入的YOLOv3程序
YOLOv3介绍:https://pjreddie.com/darknet/yolo/#demo
一、支持图片检测的编译步骤(官网)
图片检测只需要按照页面提示编译即可。
git clone https://github.com/pjreddie/darknet
cd darknet
make
wget https://pjreddie.com/media/files/yolov3.weights
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
二、支持视频输入的编译步骤
视频检测命令示例是
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights <video file>
需要OpenCV的支持,因此先编译安装OpenCV。
1.编译安装OpenCV
OpenCV编译步骤(Linux、Mac均可)
git clone clone https://github.com/opencv/opencv.git
cd opencv
mkdir build
cd build
cmake -DOPENCV_GENERATE_PKGCONFIG:BOOL="1" -DBUILD_PNG:BOOL="1" .
make
make install
参数介绍: “OPENCV_GENERATE_PKGCONFIG”:生成 "opencv*.pc"文件,以便其他项目编译时正确导入文件和编译参数; “BUILD_PNG”:内部libpng编译,防止调用时libpng版本不一致。
我是记录下OpenCV安装路径的,把编译输出文件放到了"darknet"项目下,这样就可以直接引用,防止不确定导入环境引起不必要的麻烦。 找到编译输出路径"/usr/local/Cellar/opencv/4.5.5_1",复制为"darknet/opencv",Linux路径类似。
2.编译YOLOv3
YOLOv3编译步骤:
git clone https://github.com/pjreddie/darknet.git
cd darknet
vim MakeFile
vim src/image_opencv.cpp
make
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights <video file>
修改编译配置:添加c++编译,替换OpenCV引入路径,启用类型转换代码
GPU=0
CUDNN=0
OPENCV=1
OPENMP=0
DEBUG=0
ifeq ($(OPENCV), 1)
COMMON+= -DOPENCV
CFLAGS+= -DOPENCV
LDFLAGS += -Lopencv/lib -lopencv_world -lstdc++
COMMON += -Iopencv/include/opencv4
endif
$(OBJDIR)%.o: %.cpp $(DEPS)
$(CPP) --std=c++11 -DCV__ENABLE_C_API_CTORS $(COMMON) $(CFLAGS) -c $< -o $@
修改源文件,不需要改代码,只需要添加头文件包含即可。 头文件包含直接搜索OpenCV输出文件添加进去即可,IplImage的转换在该类的定义下面。
#include <opencv2/videoio/legacy/constants_c.h>
#include <opencv2/highgui/highgui_c.h>
#include <opencv2/core/types_c.h>
#include <opencv2/core/core_c.h>
这时候编译出的可执行文件就支持摄像头和视频文件的输出了。
YOLOv3编译及运行错误记录:
./darknet detector demo cfg/coco.data yolov3-tiny.cfg yolov3-tiny.weights .mp4
libpng warning: Application built with libpng-1.4.12 but running with 1.6.37
Cannot load image "data/labels/32_0.png"
|