Как импортировать несколько изображений из URL в тензор потока? - PullRequest
0 голосов
/ 24 марта 2019

У меня есть файл JSON, который содержит URL-адреса изображений и метки.Я пытаюсь загрузить изображения с tf.keras.utils.get_file().Таким образом, я могу загрузить только одно изображение за раз.Я добавил все URL-адреса в список URL-адресов.Затем я попытался загрузить изображения из URL-адресов в новый список с tf.keras.utils.get_file().Почему это не работает?Структура файла Json

{"ID":"-","DataRow ID":"-","Labeled Data":"url is here!","Label":{"dorsaalinen kallistuskulma":[{"geometry":{"x":217,"y":269}},{"geometry":{"x":243,"y":263}}]},"Created By":"-","Project Name":"syvärit (testi)","Created At":"","Seconds to Label":42.286,"External ID":"image5 (2).png","Agreement":null,"Dataset Name":"ranne yhdistelmä","Reviews":[],"View Label":"-"},{"ID":"-","DataRow ID":"-","Labeled Data":"url is here","Label":{"dorsaalinen kallistuskulma":[{"geometry":{"x":217,"y":266}},{"geometry":{"x":243,"y":263}}]},"Created By":"-","Project Name":"syvärit (testi)","Created At":"","Seconds to Label":16.801,"External ID":"image5.png","Agreement":null,"Dataset Name":"ranne yhdistelmä","Reviews":[],"View Label":""}]

Код

    import json
    import tensorflow as tf

    with open(filename) as f:
        data = json.load(f)

    # loading json data (url's)to list
    url = []
    for object in data:
        url.append(object['Labeled Data'])

    # loading the images
    pictures =[]
    for i in url:
        pictures = tf.keras.utils.get_file('fname', i, untar=True)
        # loads only one file and if I use pictures.append(tf.keras.utils.get_file) it doesn't download anything.

1 Ответ

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

Вы можете попробовать с gapcv.Это основа для предварительной обработки данных для ОД.Вот как это работает:

установка gapcv:

pip install gapcv

импорт Images из vision:

from gapcv.vision import Images

небольшое исправление в вашем файле json, так как gapcv читал json как:

см. документацию :

[
    {'label': 'cat', 'image': 'http://example.com/c1.jpg'},
    {'label': 'dog', 'image': 'http://example.com/d1.jpg'},
    ...
]

запустите эту команду, чтобы создать new_labelвведите и извлеките имя метки во вложенный dict

for image in json_file:
    for key in list(image):
        if key == 'Label':
            image['new_label'] = list(image['Label'].keys())[0]

, вы получите что-то вроде:

'new_label': 'dorsaalinen kallistuskulma'

сохраните новый файл json_file

import json
with open('data.json', 'w') as outfile:  
    json.dump(json_file, outfile)

теперь мы можем использовать gapcv для загрузки и предварительной обработки ваших изображений с URL:

images = Images('my_new_file', 'data.json', config=['image_key=Labeled Data', 'label_key=new_label', 'store', 'resize=(224,224)'])

. Это создаст my_new_file.h5 файл, готовый для вашей модели:)

youможно использовать также получить генератор и использовать его для керас:

# this will stream the data from the `my_new_file.h5` file so you don't overload your memory
images = Images(config=['stream'], augment=['flip=both', 'edge', 'zoom=0.3', 'denoise']) # augment if it's needed if not use just Images(config=['stream']), norm 1.0/255.0 by default.
images.load('my_new_file')

#Metadata

print('images train')
print('Time to load data set:', images.elapsed)
print('Number of images in data set:', images.count)
print('classes:', images.classes)

генератор:

images.split = 0.2
images.minibatch = 32
gap_generator = images.minibatch
X_test, Y_test = images.test

Fit keras модель:

model.fit_generator(generator=gap_generator,
                    validation_data=(X_test, Y_test),
                    epochs=epochs,
                    steps_per_epoch=steps_per_epoch)

зачем использовать gapcv?ну, это в два раза быстрее подходит для модели, чем ImageDataGenerator():)

пример в colab

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