Bildverarbeitung
Dieses Projekt verwendet den flower_photos-Datensatz, um mit einem Convolutional Neural Network verschiedene Blumenarten zu klassifizieren. Die Bilder werden automatisch in Trainings- und Validierungssets aufgeteilt.
import tensorflow as tf
from tensorflow.keras import layers, models, Input
from tensorflow.keras.utils import load_img, img_to_array
import numpy as np
import pathlib
data_dir = pathlib.Path(".../flower_photos")
img_height = 180
img_width = 180
batch_size = 32
seed = 123
train_ds = tf.keras.utils.image_dataset_from_directory(
data_dir, validation_split=0.2, subset="training", seed=seed,
image_size=(img_height, img_width), batch_size=batch_size
)
val_ds = tf.keras.utils.image_dataset_from_directory(
data_dir, validation_split=0.2, subset="validation", seed=seed,
image_size=(img_height, img_width), batch_size=batch_size
)
model = models.Sequential([
Input(shape=(img_height, img_width, 3)),
layers.Rescaling(1./255),
layers.Conv2D(16, 3, padding='same', activation='relu'),
layers.MaxPooling2D(),
layers.Conv2D(32, 3, padding='same', activation='relu'),
layers.MaxPooling2D(),
layers.Conv2D(64, 3, padding='same', activation='relu'),
layers.MaxPooling2D(),
layers.Flatten(),
layers.Dense(128, activation='relu'),
layers.Dense(num_classes, activation='softmax')
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(train_ds, validation_data=val_ds, epochs=10)
img_path = ".../blume1.jpg"
img = load_img(img_path, target_size=(img_height, img_width))
img_array = img_to_array(img)
img_array = tf.expand_dims(img_array, 0) # (1, height, width, 3)
predictions = model.predict(img_array)
score = tf.nn.softmax(predictions[0])
print("Vorhersage:", class_names[np.argmax(score)])
print("Sicherheit: {:.2f}%".format(100 * np.max(score)))