YOLO v4 图片批量测试
程序员文章站
2022-07-08 09:54:45
如果新拿到一批数据,如何利用现有的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
上一篇: [HDU-1398] 生成函数基础题