[Keras] Persönliches Memo zum Klassifizieren von Bildern nach Ordner [Python]

Bilder nach Ordner sortieren

Umgebung

Python: 3.6.10 Keras: 2.2.4 Tensorflow: 1.14.0 numpy: 1.16.4 sklearn: 0.22.2

Erstellen einer npy-Datei aus einem Bild

create_datasets.py


from sklearn import model_selection
from PIL import Image
import os, glob
import numpy as np
import random


#Klassifizierungskategorie
name = "name"
root_dir = "./datasets/" + name +"/"
savenpy = "./npy/"+name+".npy"
categories = os.listdir(root_dir)
nb_classes = len(categories)
image_size = 224

#Lesen Sie die Bilddaten für jeden Ordner
X = [] #Bilddaten
Y = [] #Daten beschriften
for idx, category in enumerate(categories):
    dir_path = root_dir + category
    search_files = os.listdir(dir_path)
    for file in search_files:
        filepath = dir_path + "/" + file
        img = Image.open(filepath)
        img = img.convert("RGB")
        #img = img.convert("L")
        img = img.resize((image_size, image_size))
        data = np.asarray(img)
        X.append(data)
        Y.append(idx)

X = np.array(X)
Y = np.array(Y)
print(len(X), len(Y))

# #Trainingsdaten und Testdaten trennen
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, Y, test_size=0.2)
xy = (X_train, X_test, y_train, y_test)

#Speichern Sie das Numpy-Array in einer Datei
np.save(savenpy, xy)
print("end")

Modell erstellen

create_model.py


import keras
from keras.models import Sequential
from keras.layers import Convolution2D, MaxPooling2D, Conv2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras.utils import np_utils
import numpy as np
from keras.callbacks import EarlyStopping

#Zu klassifizierende Kategorie
name = "name"
root_dir = "./datasets/" + name +"/"
loadnpy = "./npy/"+name+".npy"
categories = os.listdir(root_dir)
nb_classes = len(categories)

#Definieren Sie die Hauptfunktion
def main():
    X_train,X_test,y_train,y_test = np.load(loadnpy, allow_pickle=True)
    #Normalisierung der Bilddatei
    X_train = X_train.astype('float') / 256
    X_test = X_test.astype('float') / 256
    y_train = np_utils.to_categorical(y_train, nb_classes)
    y_test = np_utils.to_categorical(y_test, nb_classes)

    model = model_train(X_train,y_train)
    model_eval(model,X_test,y_test)

#Modell lernen
def model_train(X,y):
    model = Sequential()
    model.add(Conv2D(32,(3,3), padding='same',input_shape=X.shape[1:]))
    model.add(Activation('relu'))
    model.add(Conv2D(32,(3,3)))
    model.add(Activation('relu'))
    model.add(MaxPooling2D(pool_size=(2,2)))
    model.add(Dropout(0.25))

    model.add(Conv2D(64,(3,3),padding='same'))
    model.add(Activation('relu'))
    model.add(Conv2D(64,(3,3)))
    model.add(Activation('relu'))
    model.add(MaxPooling2D(pool_size=(2,2)))
    model.add(Dropout(0.25))

    model.add(Flatten())
    model.add(Dense(512))
    model.add(Activation('relu'))
    model.add(Dropout(0.5))
    model.add(Dense(nb_classes))

    model.add(Activation('softmax'))

    model.summary()

    #Optimierungsmethode
    opt = keras.optimizers.rmsprop(lr=0.0001,decay=1e-6)

    #Modell kompilieren
    model.compile(loss='categorical_crossentropy',
                    optimizer=opt,metrics=['accuracy'])

    #Modelllernen
    model.fit(X, y, batch_size=32,epochs=100)

    #Modell speichern
    model.save('./save_model.h5')

    return model

#Bewerten Sie das Modell
def model_eval(model, X, y):
    score = model.evaluate(X, y)
    print('loss=', score[0])
    print('accuracy=', score[1])

if __name__ == "__main__":
    main()

Verwenden Sie das erstellte Modell, um eines zu identifizieren

from keras.models import load_model
import numpy as np
from keras.preprocessing.image import img_to_array, load_img

img_path = 'Bilddateipfad, den Sie identifizieren möchten (jpg/PNG-Datei)'
model_file_path='Modelldateipfad (h5-Datei)'

root_dir = "./datasets/" + name +"/"#Pfad mit dem Namen des zu klassifizierenden Ordners
categories = os.listdir(root_dir)#Beschriftung vom Ordnernamen abrufen

model=load_model(model_file_path)

img = img_to_array(load_img(img_path, target_size=(224,224)))
img_nad = img_to_array(img)/255
img_nad = img_nad[None, ...]

pred = model.predict(img_nad, batch_size=1, verbose=0)
score = np.max(pred)
pred_label = categories[np.argmax(pred[0])]
print('name:',pred_label)
print('score:',score)

Recommended Posts

[Keras] Persönliches Memo zum Klassifizieren von Bildern nach Ordner [Python]
Funktion zum Speichern von Bildern nach Datum [python3]
Fordern Sie die Bildklassifizierung durch TensorFlow2 + Keras 5 heraus ~ Beobachten Sie Bilder, die nicht klassifiziert werden können ~
Visualisierungsnotiz von Python
[Python] Versuchen Sie, Ramen-Shops durch Verarbeitung natürlicher Sprache zu klassifizieren
Verwendung von cron (persönliches Memo)
So sammeln Sie Bilder in Python
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 8 Einführung in Numpy
[Persönliches Memo] Python-Memo für virtuelle Umgebungen
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 10 Einführung in Cupy
[Python] Ein Memo zum Betreiben eines mit GBDK mit PyBoy erstellten ROM
Poste ein Bild von Python auf Tumblr
[Persönliches Memo] Python-Sequenztyp / Zuordnungstyp
Python-Memo ① Ordner- und Dateivorgänge
Abschnittsplanung Lernnotiz ~ von Python ~
[Nanonets] Wie poste ich Memo [Python]
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 9 Einführung in das Scikit-Lernen
Ein Memo, das durch Umbenennen der Dateinamen im Ordner mit Python organisiert wird
Konvertieren Sie Memos sofort mit Python 2to3
Wiedereinführung in Python-Dekoratoren ~ Lernen wir Dekoratoren nach Typ ~
Antwort auf AtCoder Beginners Selection von Python3
[Lernnotiz] Grundlagen des Unterrichts mit Python
Memo, um nach KPI mit Python zu fragen
Versuchen Sie, Piktogramm-Schriftarten mit Keras zu klassifizieren
Empfohlene Bücher von 3 Typen im Zusammenhang mit Python
Versuchen Sie, O'Reillys Bücher durch Clustering zu klassifizieren
Fügen Sie Bildern mit Python2.7 Gaußsches Rauschen hinzu
Organisieren Sie mit Python nach Ordnern getrennte Daten
Python & maschinelles Lernen Lernnotiz Machine: Maschinelles Lernen durch Rückausbreitung
Laden Sie Bilder mit Python auf Google Drive hoch
Python-Memo
So zeichnen Sie Bilder mit mehreren Anpassungen nebeneinander mit Python
Python-Memo
Python-Memo
Python-Memo
Ich habe ein Modul in C-Sprache erstellt, das von Python geladene Bilder filtert
Python-Memo
Python-Memo
Memo Nr. 4, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
[Persönliches Memo] julia - Verwenden Sie die Python-Bibliothek mit julia unter Verwendung von PyCall
[Python] So zeigen Sie die Elemente der Liste nebeneinander an
Konvertieren Sie PDFs mit Python in Massenbilder
Memo Nr. 3, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Persönliche Notizen zum Dokumentieren von Python-Code in Sphinx
Memo Nr. 1, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
[Python] Memo zur Übersetzung von Matplotlib ins Japanische [Windows]
So löschen Sie die von Python ausgegebenen Zeichen
Memo Nr. 2, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
So erhalten Sie die Dateien im Ordner [Python]
[Ich möchte Bilder mit Tensorflow klassifizieren] (2) Lassen Sie uns Bilder klassifizieren
[Python] So sortieren Sie Instanzen nach Instanzvariablen
Ich möchte die Produkte verkaufen, die ich durch Python Scraping Mercari aufgelistet habe
Memo Nr. 7, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Hinweise zum Erstellen einer Python-Umgebung durch Anfänger
progate Python-Lernnotiz (von Zeit zu Zeit aktualisiert)
Memo Nr. 6 für Python-Anfänger zum Lesen von "Detaillierte Erklärung der Python-Grammatik"
[Windows] Memo zur Verwendung von Keras auf der GPU [Tensorflow-GPU]
Führen Sie Power Query aus, indem Sie Argumente an Python übergeben
Ich habe versucht, Drachenkugeln nach Adalin zu klassifizieren