Как сделать tfrecords из аннотированных изображений json - PullRequest
0 голосов
/ 25 июня 2018

Я использовал Tenisflow Object Detection-API для обучения моего собственного детектора объектов. Но в то время изображения были аннотированы с использованием labelimg , которые создают XML-файл для каждого изображения. Теперь у меня есть помеченные изображения, которыеу меня есть файл json для каждого изображения. Так как я использую эти файлы json для создания tfrecords.

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Сначала я создал csv-файлы, используя свой собственный скрипт.

import os
import glob
import pandas as pd
import json
import pickle

def json_to_csv():
    path_to_json = 'images/train/'
    json_files = [pos_json for pos_json in os.listdir(path_to_json) if pos_json.endswith('.json')]
    path_to_jpeg = 'images/train/'
    jpeg_files = [pos_jpeg for pos_jpeg in os.listdir(path_to_jpeg) if pos_jpeg.endswith('.jpeg')]
    fjpeg=(list(reversed(jpeg_files)))
    n=0
    csv_list = []
    labels=[]
    for j in json_files:
        data_file=open('images/train/{}'.format(j))   
        data = json.load(data_file)
        width,height=data['display_width'],data['display_height']
        for item in data["items"]:
            box = item['bounding_box']
            if item['upc']!='None':
                name=item['upc']
                labels.append(name)
                xmin=box['left']
                ymin=box['top']
                xmax=box['right']
                ymax=box['bottom']
                value = (fjpeg[n],
                         width,
                         height,
                         name,
                         xmin,
                         ymin,
                         xmax,
                         ymax
                         )
                csv_list.append(value)
          n=n+1
    column_name = ['filename', 'width', 'height', 'class', 'xmin', 'ymin', 'xmax', 'ymax']
    csv_df = pd.DataFrame(csv_list, columns=column_name)
    labels_train=list(set(labels))
    with open("train_labels.txt", "wb") as fp:   #Pickling
        pickle.dump(labels_train, fp)
    return csv_df

def main():
    for directory in ['train']:
        csv_df = json_to_csv()
        csv_df.to_csv('data/{}_labels.csv'.format(directory), index=None)
        print('Successfully converted json to csv.')

main()

Затем я использую этот скрипт для создания tfrecords.

0 голосов
/ 26 июня 2018

У нас есть некоторая документация по теме.

Обратите внимание, что labelimg должен выдавать выходные данные, аналогичные используемым наборам данных POSCAL VOC, поэтому эти сценарии также могут быть полезны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...