darknet之yolo测试一批图片并保存结果

本文介绍如何修改YoloV3源代码实现图片批量检测,通过读取包含图片路径的txt文件,自动进行目标检测并保存结果。文章提供详细的代码修改指导,包括函数添加、流程调整等,适用于需要大规模图片检测的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 原则:修改src/detector.c, 尽量不删除源代码
  • 用法:将要测试图片的绝对路径存入txt,例如000.txt,然后执行./darknet detector test data/candle.data cfg/yolov3.cfg backup/yolov3_1000.weights 000.txt,结果保存在results目录下。此法可代替原版的两种方式。
  • 可使用ls ${PWD}/*jpg > 000.txt将当前目录下的jpg图片的绝对路径存入000.txt
  • 添加函数get_image_name
void get_image_name(char *filename, char *image, int l) {
    int j, i = l - 1, k = 8;
    while(i > 0) {
        if(filename[i] == '/') {
            j = i + 1;
            break;
        }
        --i;
    }
    while(j < l - 4) {
        image[k] = filename[j];
        ++k;
        ++j;
    }
}
  • 修改test_detector函数:
  • while (1)上面添加
char lwd[256];
size_t llen = 0;
strncpy(lwd, filename, 256);
if(lwd[strlen(lwd)-1] != 't') {
        printf("Need txt file of image path\n");
        return;
}
FILE* fl = fopen(lwd, "r");
  • while (1)刚开始添加
if(getline(&filename, &llen, fl) == -1) {
            fclose(fl);
            break;
}
filename[strlen(filename)-1]='\0';
  • save_image(im, "predictions");改为
char lwd_name[256] = {"results/"};
get_image_name(filename, lwd_name, strlen(filename));
save_image(im, lwd_name);
  • 注释以下几行
show_image(im, "predictions");
wait_until_press_key_cv();
destroy_all_windows_cv();
if (filename) break;
  • 如果要在图片上打印概率,则修改src/image.c函数draw_detections_v3的if (alphabet)部分
if (alphabet) {
                char labelstr[4096] = { 0 };
                int lwd_score = selected_detections[i].det.prob[selected_detections[i].best_class] * 100;
                char lwd_str[10];
                snprintf(lwd_str, sizeof(lwd_str), "%d", lwd_score);
                strcat(labelstr, names[selected_detections[i].best_class]);
                strcat(labelstr, lwd_str);
                int j;
                for (j = 0; j < classes; ++j) {
                    if (selected_detections[i].det.prob[j] > thresh && j != selected_detections[i].best_class) {
                        strcat(labelstr, ", ");
                        strcat(labelstr, names[j]);
                    }
                }
                image label = get_label_v3(alphabet, labelstr, (im.h*.03));
                draw_label(im, top + width, left, label, rgb);
                free_image(label);
            }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刀么克瑟拉莫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值