в этой статье мы увидим простое предсказание изображения с помощью vgg16.

VGG16 — это модель сверточной нейронной сети, предложенная К. … Зиссерманом из Оксфордского университета в статье «Очень глубокие сверточные сети для крупномасштабного распознавания изображений». Модель достигает точности 92,7 % в тестах Top-5 в ImageNet, который представляет собой набор данных из более чем 14 миллионов изображений, принадлежащих к 1 000 классам.

  1. определить путь к изображению
img_path = 'images/'

2. импортировать все библиотеки

import numpy as np
import keras
import os
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from tensorflow.keras.applications.vgg16 import VGG16
from keras.applications.vgg16 import preprocess_input
from keras.applications.vgg16 import decode_predictions
from PIL import Image as pil_image
from tensorflow.keras.models import load_model

3. установить размер изображения

width = 224
height = 224
imgdir = img_path
outfile = 'result.txt'

4. загрузить все изображения

allimgname = sorted(os.listdir(imgdir))
imgnumber = len(allimgname)
allimg = []
for i in range(imgnumber):
 img = pil_image.open(imgdir+'/'+allimgname[i])
 img = img.resize((width, height))
 dataimg = np.array(img)
 allimg.append(dataimg[:,:,:3])
allimg2 = np.float64(np.asarray(allimg)) 
allimg2 = preprocess_input(allimg2)

5. скачать или загрузить модель

#dowload 
model = VGG16(weights='imagenet')
#or
#load model
#model = load_model('vgg16.hdf5')

6. скомпилировать модель

model.compile(optimizer='rmsprop',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

7. прогнозировать изображения и сохранять в файл .txt

pred = model.predict(allimg2)
#convert the probabilities to class labels
predlabel = decode_predictions(pred)
out = open(outfile, 'w')
for i in range(len(predlabel)):
    res = predlabel[i][0]
    out.write(allimgname[i]+" -> "+res[1]+" ("+str(res[2]*100)+")\n")
    print('--------------------------')
    print(allimgname[i]+" -> "+res[1]+" ("+str(res[2]*100)+")\n")

видео к статье выше

посетите ASHABB SoftMart



Спасибо, что посетили ASHABB… если хотите, похлопайте