как изменить мою нейронную сеть так, чтобы она могла распознавать любую картинку, а не только ту, название которой записано?

from keras.applications.vgg16 import VGG16
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input, decode_predictions
from PIL import Image
import requests
from io import BytesIO
import numpy as np

model = VGG16(weights="imagenet")

img = image.load_img('3SSScAbpJXQ.jpg', target_size=(224, 224))

x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)

preds = model.predict(x)

name='gg.png'
img1 = decode_predictions(preds,top=1)[0]
print(img1)

Вот сама нейронка, но её проблема в том, что она может распознавать только картинку, название которой ты запишешь в строке

img = image.load_img('3SSScAbpJXQ.jpg', target_size=(224, 224))

как этого избежать и автоматизировать процесс, дабы программа сама понимала имя картинки? Сразу распишу, что программа уже распознаёт объекты, проблема не в этом, она просто не может обработать объект, если не знает его имени, например, gg.jpg и так далее, я же хочу, чтобы имя каждого загружаемого объекта определялось и забивалось автоматически, без моего вмешательства в код


Ответы (1 шт):

Автор решения: NykSu
import os

def get_files_folder(folder):
    res = []
    if os.path.exists(folder) and os.path.isdir(folder):
        files = os.listdir(folder)
        for fl in files:
            filenam = os.path.join(folder, fl)
            if not os.path.isdir(filenam):
                res.append(filenam)
    return res

# получаем список файлов папки:
infolder = "D:/Test" # здесь папка откуда вы берете файлы для предсказания
outfolder = "D:/Out" # здесь файлы куда вы складываете файлы (если это нужно) с измененными названиями полученными в предикте.
file_list = get_files_folder(infolder) 

for file in file_list:
    img = image.load_img(file, target_size=(224, 224))
    # ну и здесь далее делаем всё то, что нужно делать с этим файлом
    # получаем предикт, если предикт выдаёт класс - собственно используем его, если кодированый клас,
    # то сперва декодируем его например в переменную resname, то сохраняем так:
    # image.save(os.path.join(outfolder, resname + '.png'), "PNG")

В общем с файлами тут работа простая. Выше всё объяснено. Что не понятно - пишите.

→ Ссылка