Ich möchte ein Neuronales Netz erstellen, dass namen erkennt. Es gibt eine Datei mit den Bildnamen in der Spalte Filename und eine Spalte mit den "Labels". Die andere Datei erhält die wirklichen Bilddateine. Ich muss ja nun die Bildnamen mit den Bilddateien ersetzen? Wie mach ich das ? Bei meinem Code kommt immer nur Fehler beim öffnen der Datei, bzw. dass die Dateien nicht vorhanden sind. Der Ordenerpfad stimmt aber.
Kann mir jemand helfen ??
import os
import numpy as np
import pandas as pd
import tensorflow as tf
from sklearn.model_selection import train_test_split
from PIL import Image
# Daten laden
train = pd.read_csv('written_name_train_v2.csv')
# Absoluter Pfad zum Ordner mit den Bilddateien
folder_path = os.path.join('train')
# Überprüfen, ob der Ordner existiert
if not os.path.exists(folder_path):
raise ValueError(f"Ordnerpfad nicht gefunden: {folder_path}")
# Liste für die Bilddaten und Labels
images = []
labels = []
# Alle Bilddateien im Ordner durchlaufen
for file_name, label in zip(train['FILENAME'], train['IDENTITY']):
# Pfad zum aktuellen Bild erstellen
image_path = os.path.join(folder_path, str(file_name))
# Bild öffnen und zu einem Numpy-Array konvertieren
try:
img = Image.open(image_path)
img_np = np.array(img)
# Bild zur Liste hinzufügen
images.append(img_np)
# Label zur Liste hinzufügen
labels.append(label)
except Exception as e:
print(f"Fehler beim Öffnen der Datei {image_path}: {e}")
# Konvertiere Listen in NumPy-Arrays
X = np.array(images)
y = np.array(labels)
# Trainings- und Testdaten aufteilen
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=12)
# Neuronales Netzwerk erstellen
model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=(X_train.shape[1:])),
tf.keras.layers.Dense(units=128, activation='relu'),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(units=64, activation='relu'),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(units=32, activation='relu'),
tf.keras.layers.Dense(units=1, activation='sigmoid')
])
# Modell kompilieren
optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)
model.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['accuracy'])
# Modell trainieren
history = model.fit(X_train, y_train, batch_size=40, epochs=10, validation_split=0.2)
# Modell evaluieren
y_pred = model.predict(X_test)
accuracy = np.mean((y_pred.round() == y_test).astype(int))
print(f"Test Accuracy: {accuracy:.2%}")