Für ein Modul zu Computer Vision habe ich als Übungsaufgabe eine kleine Pipeline gebaut, die Kontrollschilder auf Fotos automatisch erkennt und durch künstlich erzeugte, nicht mehr lesbare Kennzeichen ersetzt, ähnlich wie Gesichter oder Kennzeichen, die auf Strassenfotos unkenntlich gemacht werden. Die Aufgabe war in fünf Teilschritte gegliedert, von der reinen Erkennung bis zum realistischen Ersetzen der Kennzeichen. Es handelt sich dabei ausdrücklich um eine Übungsarbeit und keinen fertigen Produktionscode, trotzdem funktioniert die Grundidee bereits erstaunlich gut.

Kennzeichen erkennen

Als Grundlage für die Erkennung habe ich kein eigenes Modell trainiert, sondern ein bereits feingetuntes YOLOv11-Modell von Hugging Face verwendet, das gezielt auf die Erkennung von Kennzeichen spezialisiert ist, wie im Bild oben zu sehen. Objekterkennungsmodelle wie YOLO sagen für ein Bild sowohl die Position als auch die Klasse von Objekten voraus, in diesem Fall also achsenparallele Bounding Boxes rund um jedes gefundene Kennzeichen. Als Datengrundlage diente ein Kaggle-Datensatz mit mehreren tausend Fahrzeugbildern.

Orientierung bestimmen und zuschneiden

Die Bounding Box aus dem ersten Schritt ist achsenparallel und schliesst bei schräg fotografierten Kennzeichen oft unnötig viel Hintergrund mit ein. Um die exakte Ausrichtung zu bestimmen, habe ich bewusst auf klassische Bildverarbeitung statt auf ein weiteres Deep-Learning-Modell gesetzt: Im Ausschnitt der Bounding Box wird zuerst mit dem Canny-Algorithmus die Kantenkarte berechnet3, anschliessend werden über die Hough-Transformation die vier dominantesten Geraden gefunden, welche die Ränder des Kennzeichens bilden4. Jede Gerade wird dabei nicht mit Steigung und Achsenabschnitt beschrieben, sondern über ihren Normalenabstand ρ\rho zum Ursprung und den Winkel θ\theta dieser Normalen:

ρ=xcos⁡θ+ysin⁡θ\rho = x \cos\theta + y \sin\theta

Diese Parametrisierung erlaubt es auch, senkrechte Kanten ohne Sonderfall zu erfassen. Aus den Schnittpunkten der vier gefundenen Geraden ergeben sich die vier Eckpunkte des Kennzeichens, mit denen sich über eine perspektivische Transformation ein sauber ausgerichteter, entzerrter Ausschnitt erzeugen lässt.

Sechs freigestellte und perspektivisch entzerrte Kennzeichen-Ausschnitte in unterschiedlichen Farben und Formaten.
Über Canny-Kantenerkennung und Hough-Transformation entzerrte Kennzeichen-Ausschnitte, unabhängig von Land oder Farbgebung.

Neue Kennzeichen generieren

Für den nächsten Schritt sollten neue, künstliche Kennzeichen generiert werden, welche später die echten ersetzen. Dazu habe ich ein eigenes Generative Adversarial Network trainiert1: Ein Generator GG versucht aus zufälligem Rauschen zz plausible Kennzeichen-Bilder zu erzeugen, während ein Diskriminator DD gleichzeitig lernt, diese von echten, zuvor zugeschnittenen Kennzeichen xx zu unterscheiden. Beide Netzwerke werden dabei über dasselbe gegensätzliche Ziel trainiert:

min⁡Gmax⁡D  Ex[log⁡D(x)]+Ez[log⁡(1−D(G(z)))]\min_G \max_D \; \mathbb{E}_{x}[\log D(x)] + \mathbb{E}_{z}[\log(1 - D(G(z)))]

Der Diskriminator versucht diesen Ausdruck zu maximieren, indem er echte Bilder als echt und generierte als gefälscht erkennt, während der Generator ihn zu minimieren versucht, indem er den Diskriminator möglichst gut täuscht. Architektonisch orientiert sich mein Generator und Diskriminator an einem DCGAN mit transponierten beziehungsweise gewöhnlichen Convolutions, Batch-Normalization und einem 64-dimensionalen latenten Vektor als Eingabe2. Trainiert wurde das Netz für 150 Epochen auf den zuvor zugeschnittenen Kennzeichen.

Vier vom GAN generierte, kennzeichenähnliche Bilder mit verwaschenen, aber plausibel wirkenden Zeichenfolgen.
Vier vom trainierten GAN generierte Kennzeichen nach 150 Trainings-Epochen. Die Struktur passt, einzelne Zeichen bleiben unscharf.

Kennzeichen ersetzen

Im letzten Schritt werden Erkennung, Zuschnitt und Generierung zusammengeführt: Für jedes erkannte Kennzeichen generiert das GAN eine neue Bildprobe, die anschliessend perspektivisch auf die exakte Form und Grösse des Original-Kennzeichens verzerrt und über eine Maske ins Ursprungsbild eingesetzt wird. So bleibt die Position im Bild erhalten, nur der Inhalt des Kennzeichens ändert sich.

Vergleich desselben Fotos vor und nach der Anonymisierung. Links ist das echte Kennzeichen lesbar, rechts wurde es durch ein generiertes, unleserliches Kennzeichen ersetzt.
Das echte Kennzeichen wurde durch eine generierte, nicht mehr identifizierbare Variante ersetzt, Position und Perspektive bleiben erhalten.

Grenzen und Ausblick

Als Übungsaufgabe hatte diese Pipeline nie den Anspruch, produktionsreif zu sein: Das GAN erzeugt keine scharfen, individuellen Zeichen, sondern eher plausibel wirkende Muster, und auch die Einpassung ist rein geometrisch, ohne Beleuchtung, Schatten oder Bildrauschen des Originals zu berücksichtigen. Um die generierten Kennzeichen wirklich an die Aufnahmebedingungen anzupassen, würde sich ein Style-Transfer-Ansatz anbieten, der Farbgebung und Textur des Zielbilds auf das generierte Kennzeichen überträgt5. Für eine Übungsaufgabe zeigt das Ergebnis aber bereits deutlich, dass sich die Grundidee, Kennzeichen automatisiert zu erkennen und realistisch zu anonymisieren, mit vertretbarem Aufwand umsetzen lässt.