Как экспортировать TFRecords из файлов меток pts для API-интерфейса обнаружения объектов tenorflow? - PullRequest
0 голосов
/ 23 марта 2020

обычно, когда мы генерируем TFRecords из xml файлов меток (например, из labelimg), существуют значения x.min, x.max, y.min и y.max, которые показывают квадратную метку. мы можем сделать из него данные CSV и сгенерировать из них TFRecords.

, но в случае значений pts значения заключаются в не квадратную рамку, например:

bounding_box: 534.588998862 232.095176337; 101.596234357 388.45367463; 51.3295676906 249.25367463; 484.322332196 92.8951763367

так что есть четыре точки x и y, а не две, как указывает labelimg. Может кто-нибудь объяснить мне, как генерировать TFRecord из PTS?

1 Ответ

0 голосов
/ 24 марта 2020

Так что на тот случай, если у кого-то еще возникнет тот же вопрос, я написал скрипт, который сделает эти четыре точки квадратными с помощью xmin xmax ymin ymax, чтобы мы могли легко получить tfrecord, как в xml labelimg.

вот оно:

import os
import glob
import pandas as pd
from PIL import Image
import csv

for pts_file in glob.glob("./labels" + '/*.pts'):
    with open(pts_file) as f:
        im=Image.open("./img/" + pts_file[9:-3] + "jpg")
        filename = pts_file[9:-3] + "jpg"
        width = str(im.size[0])
        height = str(im.size[1])
        classs = "fish"
        lines = f.readlines() 
        content = [line.split(' ')for line in open (pts_file)]
        xmax = max(int(float(content[0][1])), int(float(content[0][4])), int(float(content[0][7])), int(float(content[0][10])))
        xmin = min(int(float(content[0][1])), int(float(content[0][4])), int(float(content[0][7])), int(float(content[0][10])))
        ymax = max(int(float(content[0][3][0:5])), int(float(content[0][6][0:5])), int(float(content[0][9][0:5])), int(float(content[0][11][0:5])))
        ymin = min(int(float(content[0][3][0:5])), int(float(content[0][6][0:5])), int(float(content[0][9][0:5])), int(float(content[0][11][0:5])))

        fields=[filename,width,height,classs,xmin,ymin,xmax,ymax]
        with open(r'name', 'a', newline='') as f:
            writer = csv.writer(f)
            writer.writerow(fields)        

print('Successfully converted pts to csv.')
...