用于我的yolov3-spp目标检测项目
txt的格式为:
csv的格式为:
## Readme:
## 将该代码包放到与res.txt同目录下
## python3 txt2csv.py
## output: res_out.csv
import csv
import re
class Item:
def __init__(self, type, con, xmax, xmin, ymax, ymin, img):
self.type = type
self.con = con
self.xmax = xmax
self.xmin = xmin
self.ymax = ymax
self.ymin = ymin
self.img = img
# store all the items
objList = []
# store current img id
itemNow = 0
def Formatt():
fn = open('res.txt', 'r')
fn = fn.read()
for i in range(10):
fn = fn.replace(' ', ' ')
fn = fn.replace(' ', ',')
fn = fn.replace(']][', ']]\n[')
fn = fn.replace('[[', '[\n[')
fn = fn.replace('][', ']\n[')
fn = fn.replace(']]', ']\n]')
fn = fn.replace('jpg', 'jpg\n')
fn = fn.replace('[,', '[')
fn = fn.replace(',[', '[')
s = open('Formatted_out.txt', 'a+')
s = s.write(fn)
Formatt()
file = open("Formatted_out.txt", "r")
def getVal():
tempItem = []
counter = 0
while True:
line = file.readline()
# if the vals of x and y is gone,then read 2 lines to store type and con
if (line.startswith("]")):
# read con
line = file.readline()
list1 = eval(line)
i = 0
# store con
for v in list1:
tempItem[i].con = list1[i]
i = i + 1
# read type
line = file.readline()
list1 = eval(line)
i = 0
# store type
for v in list1:
if list1[i] == 1:
tempItem[i].type = "ball"
if list1[i] == 2:
tempItem[i].type = "cylinder"
if list1[i] == 3:
tempItem[i].type = "square cage"
if list1[i] == 4:
tempItem[i].type = "cube"
if list1[i] == 5:
tempItem[i].type = "circle cage"
if list1[i] == 6:
tempItem[i].type = "human body"
if list1[i] == 7:
tempItem[i].type = "metal bucket"
if list1[i] == 8:
tempItem[i].type = "tyre"
i = i + 1
# store all items to objList
for item in tempItem:
objList.append(item)
return
counter = counter + 1
val = eval(line)
obj = Item(None, None, val[2], val[0], val[3], val[1], itemNow)
tempItem.append(obj)
#
# Main
#
# Read Text File
while True:
line = file.readline()
if not line:
break
if '.jpg' in line:
itemNow = re.findall(r"(.+).jpg", line)[0]
if "[" in line:
if "]" not in line:
getVal()
file.close()
# OUTPUT CSV
f = open('res_out.csv', 'w', encoding='utf-8',newline='')
csv_writer = csv.writer(f)
csv_writer.writerow(["name", "image_id", "confidence", "xmin", "ymin", "xmax", "ymax"])
for item in objList:
csv_writer.writerow([item.type, item.img, item.con, item.xmin, item.ymin, item.xmax, item.ymax])
print(item.type)
f.close()