Wenn Sie ein Python-Entwickler sind und ein Daten-Parsing-Tool erstellen möchten, ist dieses Tutorial genau das Richtige für Sie. Wir zeigen Ihnen, wie Sie ein effizientes Dokument-Parsing-Tool mit Python und dem SROIE-Datensatz erstellen und führen Sie in die Möglichkeiten des Konfuzio SDK ein. Legen wir los!
Einen kurzen Einstieg zum String Parsing in Python finden Sie hier.
Dieser Artikel wurde auf Deutsch verfasst und redaktionell überprüft. Weitere Sprachen stehen als automatische Übersetzung zur Verfügung. Wir freuen uns über Feedback am Ende des Artikels.
Schritt 1: Einrichtung Ihrer Umgebung
Bevor wir beginnen, stellen Sie sicher, dass Python und alle benötigten Bibliotheken installiert sind. Führen Sie dazu die folgenden Befehle in Ihrer Kommandozeile oder Ihrem Terminal aus:
# Install Python packages
pip install opencv-python tensorflow numpy scikit-learn
Schritt 2: SROIE-Datensatz laden
Der SROIE-Datensatz besteht aus Bildern von Quittungen und den dazugehörigen Annotationsdateien. So können Sie sie laden:
import os
import cv2
# Verzeichnisse für SROIE-Bilder und -Annotationen
image_folder = "path/to/SROIE/image/folder"
annotation_folder = "path/to/SROIE/annotation/folder"
def load_sroie_dataset(image_folder, annotation_folder):
"""Load images and corresponding text from the SROIE dataset."""
images, extracted_texts = [], []
for filename in os.listdir(annotation_folder):
with open(os.path.join(annotation_folder, filename), "r") as file:
extracted_text = file.readlines()[1].strip()
image_path = os.path.join(image_folder, filename.replace(".txt", ".jpg"))
image = cv2.imread(image_path)
images.append(image)
extracted_texts.append(extracted_text)
return images, extracted_texts
images, extracted_texts = load_sroie_dataset(image_folder, annotation_folder)
Schritt 3: Datensatz vorbereiten
Jetzt wollen wir die Bilder aus dem SROIE-Datensatz für das weitere Training vorverarbeiten:
output_folder = "path/to/output/folder"
def preprocess_images(image_folder, annotation_folder, output_folder):
"""Preprocess images and save them to the output directory."""
for filename in os.listdir(annotation_folder):
with open(os.path.join(annotation_folder, filename), "r") as file:
extracted_text = file.readlines()[1].strip()
image_path = os.path.join(image_folder, filename.replace(".txt", ".jpg"))
image = cv2.imread(image_path)
# Hier können Sie Bildvorverarbeitungsschritte hinzufügen
output_path = os.path.join(output_folder, filename.replace(".txt", ".jpg"))
cv2.imwrite(output_path, image)
preprocess_images(image_folder, annotation_folder, output_folder)
Einen weiteren spannenden Datensatz bietet FUNSD+. Lesen Sie jetzt mehr.
Schritt 4: Feinabstimmung und Bewertung mit Donut-Modell
Für genaues Dokument-Parsing werden wir ein vortrainiertes Donut-Modell auf unseren vorverarbeiteten Daten feinabstimmen:
import tensorflow as tf
from tensorflow.keras import layers, models
from sklearn.model_selection import train_test_split
# Split data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(images, extracted_texts, test_size=0.2, random_state=42)
def create_donut_model(input_shape, num_classes):
"""Create the Donut CNN model for text recognition."""
model = models.Sequential([
layers.Conv2D(32, (3, 3), activation='relu', input_shape=input_shape),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation='relu'),
layers.MaxPooling2D((2, 2)),
layers.Flatten(),
layers.Dense(128, activation='relu'),
layers.Dense(num_classes, activation='softmax')
])
return model
model = create_donut_model((height, width, channels), num_classes)
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_split=0.1)
test_loss, test_accuracy = model.evaluate(X_test, y_test)
Zusammenfassung
Das Erstellen eines Daten-Parsing-Tools mit Python und dem SROIE-Datensatz kann mit dem richtigen Ansatz nahtlos erfolgen. Für erweiterte Funktionen und fortschrittlichere Funktionen sollten Sie das Konfuzio SDK in Ihre Projekte integrieren. Werfen Sie einen Blick in die Dokumentation von Konfuzio für umfassende Einblicke.
Viel Spaß beim Programmieren!
Weitere Links
- LayoutLM using the SROIE dataset | Kaggle
- Extracting Structured Data From Invoice | by DLMade | Analytics Vidhya | Medium
- zzzDavid/ICDAR-2019-SROIE: ICDAR 2019 Robust Reading Challenge on Scanned Receipts OCR and Information Extraction (github.com)