Partieerfassung mit pgnApp
Wer kennt es nicht, ein Wochenendturnier ist gelaufen, hunderte Partien sind gespielt und die ersten Schachfreunde beschweren sich, dass ihre Partie noch nicht digital erfasst ist. Mit etwas Übung braucht es zwar nur ein paar Minuten für eine normal lange Partie, aber die Masse machts.
Im letzten Jahr haben mehrere Anbieter von Scan- und Auswertungslösungen den Markt betreten. Zentrale Anforderungen erfüllte Stand Oktober 2024 dabei nur pgnApp. Es entstand dadurch der Wunsch, die Qualifikationsturniere zur LJEM als Testballon für einen Einsatz bei den wirklich großen Turnier wie der LJEM selbst zu verwenden.
Dieser Artikel soll die Anforderungen, Erwartungen und Ergebnisse beleuchten, in der Hoffnung, anderen Schachfreunden eine Entscheidung für oder gegen diese Lösung leichter zu machen. Screenshots und Funktionen sind dabei auf dem Stand Anfang Januar 2025, Details können sich im Laufe der Zeit natürlich ändern. Es gab einen Austausch zu Fehlern und Verbesserungsvorschlägen mit Klaus Knopf als Entwickler von pgnApp, dieser Artikel ist aber unabhängig und ohne finanzielle Unterstützung entstanden.
Anforderungen und Erwartungen
Wichtigste Anforderung ist die schnelle Verarbeitung von Partien. Die Verwendung eines Dokumentenscanners ist dafür unumgänglich. Fotografieren mit dem Handy ist keine Option, da es sowohl wesentlich länger braucht als auch schlechtere Ergebnisse liefert. Die Zuordnung der Kopfdaten sollte so weit wie möglich automatisiert sein.
Die Erkennungsquote hängt natürlich sowohl von der Erfassung der Vorlage als auch der Notation der Spieler selbst ab. Eine Erfassungsquote von über 50% war die Hoffnung, damit wäre bereits eine wesentliche Zeitersparnis erreicht.
Die Erkennung sollte, neben der deutschen Notation, auch die englischen Figurenkürzel beherrschen. Weiterhin ist eine gewisse Resilienz gegenüber Fehlern wünschenswert.
Vorbereitung vor der LJEM-Qualifikation
Der erste Versuch mit pgnApp erfolgt mit dem Willkommens-Gutschein am ersten Spieltages unserer Landesligen. Das Hochladen der PGN-Datei des Chess League Managers wurde zwar als erfolgreich gemeldet, eine Auswahl war aber nicht möglich. Nach Rückfrage stellte sich dies als Bug in der Verarbeitung des fehlenden Orts (Site "?") heraus. Die Verarbeitung ging bei den meisten Partien sehr flüssig, selbst bei den Vereinskollegen mit sehr "kreativer" Handschrift.
Dieser erste Versuch war erfolgsversprechend genug, die "große" Jahresgebühr von 14,99€ zu rechtfertigen. Mit dem unbegrenzten Partie-Budget bewaffnet, war es Zeit, die Schnittstellen zum Upload zu rekonstruieren, um diesen besser automatisieren zu können. Parallel begann ein Test zum Bedrucken der Partieformulare mit einem Barcode, um diese sauber den Partien zuordnen zu können.
Für den Anfang waren PDF417-Barcodes der Kandidat der Wahl, da diese in Tests mit niedriger Auflösung besser abschnitten als QR- oder DataMatrix-Codes, insbesondere, da sie nicht quadratisch sein müssen. Neben dem Barcode ist Runde und Brett in menschen-lesbarer Form zu finden, damit die Formulare vom Schiedsrichter richtig ausgeteilt werden können. Nebeneffekt hier ist, dass die Eintragung durch die Spieler nicht mehr wichtig ist. Insbesondere in der U10 und U12 ist die Zuordnung durch die Vornamen bei fehlendem Brett oft ein müßiger Zeitvertreib. In der nächsten Iteration für die LJEM selber wird aber auf Aztec-Barcodes gewechselt werden, die vergleichbar robust aber kompakter sind.
Größte Überraschung beim Druck vor Ort waren Probleme mit dem Papiereinzug, die beim Test vorher nicht auftraten. Wenn das Blatt nicht optimal im Einzug plaziert war, wurde es vom Druckkopf meines Tintenstrahlers oft geschreddert. Lösung hier war das Definieren eines Papierformats leicht kleiner als A5, wodurch der Druckkopf nur einmal über den Rand des Durchschlagsformulars muss und danach immer über dem oberen Blatt bleibt.
Mit den gelabelten Formularen und ein paar Stunden Reverse-Engineerung entstand ein kleines Python-Script und verarbeitet:
- Bild auf jeder PDF-Seite extrahieren
- Barcode im Bild oben rechts suchen, wenn keiner gefunden, ist dies eine Folgeseite (Partien mit mehr als 60 Zügen!)
- Fortfahren bis die zweite Partie zu dieser Begegnung vollständig ist
- PGN passend zum Turnier und der Runde aus dem Barcode öffnen, Kopfdaten zum Brett extrahieren
- Hochladen in einen Ordner passend zum Turnier mit den Kopfdaten
- Bearbeitung pausieren
Abgesehen von einer paar Koordinationsschwierigkeiten in der ersten Runde war die Verarbeitung robust. Es gab einen Fall von vertauschten Formularen und am ersten Tag mit den genannten Druckproblemen ein paar Fälle von nicht lesbaren Barcodes, beides konnte aber für den zweiten Tag gelöst werden. Dadurch reduzierte sich die Bearbeitung von eingehenden fertigen Partien auf:
- Erfassung des Ergebnisses in Swiss Chess
- Zusammensortieren von Partieformularen der gleichen Paarung
- Formulare auf den Einzug packen
- Scannen per Schnellauswahl
- Script ausführen
- Datei löschen/archiveren
Die nächste Iteration des Scriptes wird fortlaufend den Scan-Eingang erfassen und Dokumente selbständig verarbeiten. Eine Bestätigung wird dann nur bei Folgeseiten erfolgen. Für die LJEM ist auch geplant, die Scans separat auf unserer Homepage zu veröffentlichen, damit Betreuer diese zeitnah für Analysen verwenden können.
Verarbeitung der Partien
Nach dem Hochladen der Partien können diese auf der Webseite im entsprechenden Ordner gefunden werden:
Das goldene Pause-Zeichen zeigt an, dass diese Partie noch in Bearbeitung ist. In die Bearbeitung steigt der Benutzer mit dem Stift-Icon rechts ein.
Die Kopfdaten-Maske ist bei der Verwendung des Upload-Scriptes bereits mit den Daten aus Swiss Chess befüllt. Für jeden Ordner kann alternativ auch eine PGN-Datei hochgeladen werden zur Auswahl; weiterhin können die Daten manuell erfasst werden. Rechts werden die erfassten Formulare der Spieler nochmal angezeigt, z.B. um abzugleichen, dass keine Vertauschungen erfolgten. Mit "Partie prüfen und Züge bearbeiten" geht es weiter zur Erfassung des letzten Zuges.
Nach den Kopfdaten ist jeweils der letzte Zug mit der Fahne auszuwählen. Die Heuristik funktioniert hier besser, wenn zwischen Zügen und Unterschrift min. eine Leerzeile existiert. Die Anzahl kann zwischen den Formularen abweichen, wenn z.B. auf einem Formular der letzte Zug vergessen wurde oder Züge durchgestrichen und dann neugeschrieben wurden.
Im letzten Bearbeitungsschritt werden als Default alle auffälligen Züge angezeigt. Dies ist immer der letzte Zug sowie Züge, die z.B. nicht eindeutig oder nicht erlaubt sind. Hier haben beide Spieler die Partie richtig und auswertbar mitgeschrieben und es wird nur die Schlussstellung angezeigt als Plausibilitätstest. Diese Partie kann also mit "Bearbeitung abschließen" direkt beendet werden.
Bei diesem Beispiel aus einer anderen Partie wurde der fünfte Zug von Schwarz von beiden Spielern falsch notiert. Der erste Spieler hat nur das Zielfeld angegeben, der zweite Spieler hat sich nicht an die algebraische Notation gehalten. Hier schlägt das System zwei Züge vor, schlagen mit dem b- und dem d-Bauern. Durch Auswahl des entsprechenden Zuges wird dann der Partieverlauf angepasst. Analog sind sich die Spieler beim neunten Zug von Schwarz nicht einig, wo der Läufer hingezogen hat. Durch spätere Züge wird dann klar, dass es sich um d6 gehandelt haben muss. In solchen Fällen ist das gleiche Rätseln wie bei der klassischen Erfassung per Hand angesagt.
Fazit
Im Testlauf für die Qualifikation West mit 62 Teilnehmern konnten alle Partien der fünf Runden bis auf ein paar Nacharbeiten während des Turniers selber durch eine Person erfasst werden. Dabei war die Erfassung nur ein Teil der Aufgaben und ein Drittel der Teilnehmer waren jeweils in der U10 und U12, beides Altersklassen mit überdurchschnittlich hoher Fehlerquote. In der U16 und U18 konnten fast alle Partien mit wenigen Klicks in deutlich unter einer Minute erledigt werden. Aber selbst in der U10 waren sehr viele Partien in wenigen Minuten geschafft. Der Zeitgewinn war also spürbar.