在01中已经实现了对图片中的物体的检测与识别,本节分析目标检测test_detector的执行过程,对源码进行分析。
终端输入的命令如下,本节即分析该命令的执行过程。
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
darknet的主程序入口在darknet/example/darknet.c 中,在01中我们打印出来main()函数的argc和**argv两个参数,两个参数的传入的值如下:
argc = 5;
argv[0] = "./darknet";
argv[1] = "detector";
argv[2] = "cfg/yolov3.cfg";
argv[3] = "yolov3.weights";
argv[4] = "data/dog.jpg";
根据传入的argc和**argv参数会发现main()函数,以下语句会被调用:
else if (0 == strcmp(argv[1], "detect")){
float thresh = find_float_arg(argc, argv, "-thresh", .5);
char *filename = (argc > 4) ? argv[4]: 0;
char *outfile = find_char_arg(argc, argv, "-out", 0);
int fullscreen = find_arg(argc, argv, "-fullscreen");
test_detector("cfg/coco.data", argv[2], argv[3], filename, thresh, .5, outfile, fullscreen);
}
我们逐语句去分析这5条语句,首先分析第一条语句:
float thresh = find_float_arg(argc, argv, "-thresh", .5);
首先我们看以下find_float_arg()函数的源码,如下:【源码位于:/darknet/src/utils.c 中】
float find_float_arg(int argc, char **argv, char *arg, float def)