YOLO v4 图片批量测试

2022-07-27,,,,

如果新拿到一批数据,如何利用现有的yolov4 训练好的模型进行批量测试

1.生成测试图片文档

在如下程序中,将imgs_path更换为自己的文件路径,下边程序将生成一个测试图片路径的txt文档。

import os
imgs_path = 'images'
txt_path = 'batch_test.txt'
img_list = [os.path.join(imgs_path, i) for i in os.listdir(imgs_path)]
save_txt = '\n'.join(img_list)
file_write_obj = open(txt_path, 'a')
file_write_obj.write(save_txt)
file_write_obj.close()

2.检测图像

下边就是利用yolo图像测试进行检测图像,其中将自己生成好的batch_test.txt一行行作为输入,送入网络中进行检测,同时将生成的log保存在text_result.txt中。

./darknet detector test cfg/coco.data cfg/yolov4.cfg yolov4.weights -ext_output -dont_show -out result.json < batch_test.txt >> text_result.txt

3.分析log

利用如下程序对log进行分析,获取log中目标框的位置,并且将结果图片保存在results_image文件夹下,并将目标框以yolo的label格式保存在results.txt中。

import os
import cv2

def save_txt(data, path):
    file_write_obj = open(path, 'a')
    file_write_obj.write(data)
    file_write_obj.close()
if __name__ == '__main__':
    txt_path = 'text_result.txt'
    img_path = 'images'
    new_txt = 'results.txt'
    results_image = './results_image'
    f = open(txt_path)
    lines = f.readlines()
    cur_img = ''
    img = []
    for i in lines:
        if i.find('Enter') > -1:
            img_id = i[i.rfind('/') + 1:i.find('jpg') - 1]
            if cur_img != '' and cur_img != img_id:
                cv2.imwrite(os.path.join(results_image, img_id+'.jpg'),img)
                # cv2.imshow('img', img)
                # cv2.waitKey(200)
            img_name = os.path.join(img_path, img_id)
            img = cv2.imread(img_name + '.jpg')
            cur_img = img_id
            print(i[i.rfind('/') + 1:i.find('jpg') - 1])
        if i.find('person') > -1:
            confident = int(i[i.find(':') + 2:i.find('%')])
            # print(i, confident)
            if confident > 0.25:
                save_new_txt = os.path.join(new_txt, img_id+'.txt')
                line_list = i.split(' ')
                x_min = int(i[i.find('left_x') + 8: i.find('top_y')])
                y_min = int(i[i.find('top_y') + 7: i.find('width')])
                w = int(i[i.find('width') + 7: i.find('height')])
                h = int(i[i.find('height') + 7:].replace(')', ''))
                img = cv2.rectangle(img, (x_min, y_min), (x_min + w, y_min + h), (255, 0, 0))
                line_str = "{0} {1} {2} {3}\n".format(str((x_min - w / 2) / 1920), str((y_min - h / 2) / 1080),
                                                 str(w / 1920), str(h / 1080))
                # print(img_id, (x_min - w / 2) / 1920, (y_min - h / 2) / 1080, w / 1920, h / 1080)
                save_txt(line_str, save_new_txt)

本文地址:https://blog.csdn.net/qq_35451572/article/details/110260010

《YOLO v4 图片批量测试.doc》

下载本文的Word格式文档,以方便收藏与打印。