ich habe folgendes funktionsfähiges Skript, mit dem ich alle Dateinamen in einem Ordner durchlaufe und diese mit ein paar weiteren Angaben in eine Text-Datei schreibe.
Code: Alles auswählen
import os
import glob
import csv
from PIL import Image
basepath = "train_dataset/"
with open(os.path.join(basepath,'PETS09_train_dataset.txt')) as l:
with open(os.path.join(basepath,'..','Dataset_train.txt'),'w') as t:
trainwriter = csv.writer(t, delimiter=' ')
csvreader = csv.reader(l, delimiter=',')
imageID = None
oldimageID = None
bboxes = []
numboxes = len(l.readlines())
l.seek(0)
for i, line in enumerate(csvreader):
imageID = int(line[0])
if not oldimageID is None and oldimageID != imageID or i == numboxes-1:
trainwriter.writerow([os.path.join(basepath,"{:06d}".format(oldimageID)+".jpg")]+bboxes)
bboxes = []
img = Image.open(os.path.join(basepath,"{:06d}".format(imageID)+".jpg"))
img_width, img_height = 768, 576
x = float(line[2])
y = float(line[3])
w = float(line[4])
h = float(line[5])
bboxes.append(",".join([str(int(x)), str(int(y)), str(int(x+w)), str(int(y+h)),str(0)]))
oldimageID = imageID
000191.jpg
000192.jpg
000193.jpg
...
Und hier zur Info noch die daraus entstehende Ausgabe:
train_dataset/000191.jpg 561,246,594,340,0 681,98,700,153,0 707,100,722,154,0 537,137,567,212,0 656,232,686,322,0 138,156,165,222,0 278,199,309,280,0
train_dataset/000192.jpg 567,248,601,343,0 681,98,700,153,0 707,100,723,154,0 532,138,563,214,0 662,234,691,324,0 132,156,159,222,0 270,199,301,280,0
train_dataset/000193.jpg 573,251,607,346,0 681,98,700,154,0 706,100,722,154,0 526,139,557,215,0 668,236,697,326,0 125,155,152,221,0 263,198,293,279,0
...
Jetzt habe ich die Dateinamen geändert und sie sehen so aus:
000191a.jpg
000192a.jpg
000193a.jpg
...
Ich schaffe es aber leider nicht das obige Skript so umzuschreiben, dass das "a" berücksichtigt wird.
Kann mir da jemand einen Tipp geben?
Viele Grüße
chris