欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

YOLO v4 图片批量测试

程序员文章站 2022-04-01 13:07:23
如果新拿到一批数据,如何利用现有的yolov4 训练好的模型进行批量测试。1.生成测试图片文档在如下程序中,将imgs_path更换为自己的文件路径,下边程序将生成一个测试图片路径的txt文档。import osimgs_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_l...

如果新拿到一批数据,如何利用现有的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