Tools für die automatische Notation: Webcam-Film zu PGN


14

Manchmal ist es bei Blitzspielen über das Brett oder wenn es nicht zeitgemäß ist, sehr schwierig, sie mit Anmerkungen zu versehen.

Ich habe verschiedene Software / Hardware gesehen, um die Notation zu schreiben, sogar eine, die von der FIDE genehmigt wurde . Dazu müssen Sie die Bewegungen auf dem Gerät wiederholen. Kaum schneller als Stift und Papier, genauso fehleranfällig, und Sie riskieren, den falschen Zug einzugeben und noch mehr Zeit zu verschwenden.

DGT stellt ein Board her , das dies automatisch macht, aber nur mit seinen Teilen funktioniert. Der Preis beginnt bei 400 € und ist doppelt so hoch wie bei Turnierboards . Einige unabhängige Projekte sind verfügbar, wie z. B. USB-Schachbrett 101 oder sprachgesteuerte Schachroboter , Schachbrett-Step-Sequenzer . Zusätzlich sind einige offene Projekte verfügbar , die sogar Teile (oder gigantische Teile ) bewegen .

Ich habe heute Abend ein Playoff und die Turnierregeln schreiben immer kürzere Spiele vor, bis ein Gewinner feststeht. Daher dachte ich darüber nach, einen Film von der Tafel zu drehen, falls wir den Überblick verlieren sollten. Aber dann kam mein Programmierhintergrund und ich dachte "es muss eine Software geben, die einen Film verarbeiten und die PGN schreiben kann".

Ich habe überall gesucht und nichts gefunden.

  1. Gibt es so etwas (Webcam / Video zu PN Konverter)? Ein Prototyp vielleicht?
  2. Hat jemand eine solche Leistung versucht und seine Forschungen geteilt?
  3. Gibt es offensichtliche Einschränkungen, die den Erfolg dieses Projekts unwahrscheinlich machen?
  4. Würden Sie es kaufen, wenn es existiert?

2
Es wäre ein interessantes Computer Vision / Machine Learning Projekt!
Memming

Ich denke, das Board muss von oben nach unten gefilmt werden, um ein "2D" -Bild zu erstellen. Andernfalls besteht ein zusätzliches Problem bei der Übertragung einer 3D-Ansicht in eine 2D-Ansicht, und verschiedene 3D-Winkel müssen separat behandelt werden.
Rauan Sagit

Tatsächlich handelt es sich lediglich um eine lineare Transformation, bei der das Brett "entspannt" und alle Quadrate quadratisch dargestellt werden. Das Hauptproblem besteht darin, das Quadrat zu erkennen, aus dem das Teil bewegt wird, wenn der Winkel so ist, dass die Teile hintereinander ausgerichtet werden können.
Peter

Vielleicht könnten wir für dieses Projekt eine Art Crowdsourcing durchführen. Ich denke, es ist sehr interessant. Ich wette, dass einige College-Studenten dies für Senior-Projekte tun könnten. Wir müssen einen Weg finden, die Idee den Professoren mitzuteilen. Vielleicht kann dies mit zwei Kameras, die an zwei verschiedenen Orten platziert sind, zuverlässig durchgeführt werden. Mich würde der 3D-Ansatz interessieren, nicht 2D von oben. Die Montage einer Overheadkamera ist zu unpraktisch. Ich würde auch in der Software interessiert sein , die Eingänge von einigen verschiedenen Kameras schießen mehrere Spiele gleichzeitig gespielt auf einem langen Tisch und produzieren Notation nehmen würde - für

Da kickstarter.com/projects/infivention/… bereits erfolgreich war, erscheint ein Crowdfunding-Projekt durchaus machbar. Zumal die Kosten für Endverbraucher sehr gering wären.
Wolfgang Fahl

Antworten:


4

Es ist eindeutig interessant und relevant, Schachpartien automatisch aufzuzeichnen (Live-Boards lösen mehr oder weniger das gleiche Problem). Soweit ich weiß, gibt es heute keine Software für diesen Zweck. Um dieses Problem zu lösen, denke ich, dass der "einfache" Fall wie folgt lauten sollte.

  1. Das Schachbrett sollte von oben nach unten gefilmt werden, um eine zweidimensionale Ansicht zu erhalten. (Motivation: Das Filmen in einer dreidimensionalen Ansicht würde Probleme verursachen, da die Ansicht verzerrt ist und Teile die Ansicht für andere dahinter liegende Teile blockieren. Es sind auch andere 3D-Ansichten möglich, die einem sauberen Vorgang entgegenwirken würden.)
  2. Der Film sollte manuell bearbeitet werden, um "saubere Brett" -Momente einzufangen und Momente zu entfernen, in denen die Hände oder Köpfe der beiden Spieler die Sicht blockieren.
  3. Der Bildverarbeitungsalgorithmus auf der Softwareseite sollte Änderungen auf der Karte erkennen und als Bewegungen aufzeichnen. Es sollte sich auch automatisch drehen und das Bild transformieren, um die Ausrichtung der Platine und damit die Koordinaten zu ermitteln.
  4. Die Software sollte die Startposition verwenden, um sich jeden Teiletyp zu "merken" und diese dann für die Bilderkennung während des Spiels zu verwenden. Wahrscheinlich können einige clevere Tricks geschrieben werden, um das Problem der Stückerkennung auf intelligente Weise zu lösen.

Eine schnelle Google-Suche mit dem Suchbegriff

Schachspiel Bildverarbeitung

hat diesen interessanten Artikel zurückgegeben

Alles in allem sollte es realistisch sein, diese Art von Software zu implementieren. Es kann jedoch billiger sein, wenn ein Mensch die gleiche Arbeit leistet (Übertragung von einem Videoclip auf einen Computer).


Es hat eine Weile gedauert, bis ich die Studie von GDIlleperuma durchgesehen habe, die Sie verlinkt haben. Es ist äußerst interessant. Es schließt jedoch a priori die Möglichkeit aus, verzerrte 3D-Bilder zu erstellen. Vielen Dank, ein sehr interessanter Artikel.
Riccardo Zorn

@ RiccardoZorn Sie sind herzlich willkommen! Ich muss zugeben, dass ich keinen Sinn darin sehe, mit 3D-verzerrten Bildern umzugehen. Wenn ein Mensch Probleme hat, die Bewegungen einer Videoaufzeichnung zu dokumentieren, hat eine Bildverarbeitungssoftware sogar noch größere Schwierigkeiten.
Rauan Sagit

Das Einrichten einer vertikalen Kamera erfordert viel Platz, ist invasiv und Sie benötigen einen benutzerdefinierten Support / Ständer. Dies macht es unpraktisch :-(
Riccardo Zorn

Eine einfachere und billigere "Live-Board" -Technologie ist in diesem Fall möglicherweise die bessere Lösung. Optional können Sie aus einem vernünftigen 3D-Winkel filmen und die Schachnotation von einem Menschen aus der Videoaufnahme extrahieren lassen.
Rauan Sagit

Die Datei researchgate.net/publication/… scheint nicht mehr zu existieren. Hat jemand eine Kopie?
Peter

6

In Ordnung,

1) Meines Wissens nicht

2) Meines Wissens nicht

3) Es gibt mehrere Dinge, die diese Art von Projekt nicht trivial, sogar schwierig machen. Nicht zuletzt folgt es dem Stück und unterscheidet es beispielsweise von einer Handbewegung. Auch zu bestimmen, wann der Umzug gestoppt wurde, wäre eine interessante Frage, die das Computer-Sehen lösen könnte. Diese Art von Problemen wurde in anderen Situationen gelöst, jedoch nicht mit 100% iger Genauigkeit und schon gar nicht zu Preisen, die der Konkurrenz des DGT-Boards nahe kommen.

Dann stellt sich die Frage, wo die Kamera positioniert werden könnte. Direkt über Kopf bietet sich die beste Sicht auf die Tafel, sodass das Quadrat leichter und präziser bestimmt werden kann. Aber wo immer die Kamera platziert wird, besteht eine deutliche Wahrscheinlichkeit, dass einer der Spieler die Sicht behindert, indem er sich über das Brett beugt, nach der Uhr greift oder einfach gestikuliert.

4) Nicht, wenn es nicht wirklich billig war. Und ich rechne nicht damit. Meine Argumentation ist einfach. Wenn sich die Zeitkontrollen verkürzen, sinkt die Qualität des Spiels bis zu einem Punkt, an dem es für mich nicht mehr interessant ist


Mit 4 machst du einen tollen Punkt: Die Qualität ist in der Tat schlecht. Es lohnt sich nicht, eine Kamera einzurichten, geschweige denn einen Monat, um die Software zu schreiben. Ich habe gerade die Playoffs gewonnen, aber es ist mir peinlich, wie schlecht ich gespielt habe.
Riccardo Zorn

5

Das wäre eine recht komplexe Aufgabe. Vielleicht ist ein vernünftiger erster Schritt, die FEN-Position anhand eines einzelnen Bildes zu erkennen - für das mehr Ressourcen vorhanden sind, zum Beispiel:


Ausgezeichnet, vielen Dank. Ich habe beide gelesen und sie sind wirklich interessant. Chessgrabber ist ein aktuelles Projekt und ist definitiv besser geeignet, ich habe den Entwickler kontaktiert.
Riccardo Zorn

Ich denke, dass es von diesem ersten Schritt an nicht allzu schwierig ist, ein Video in PGN zu konvertieren. Nehmen Sie alle paar Millisekunden Bilder auf, analysieren Sie sie und fügen Sie der Datei die neue Position hinzu, wenn sich die Position auf legale Weise geändert hat.
rlms

Update: Der Entwickler hat geantwortet, es wird niemals für 3D-verzerrte Bilder mit überlappenden Teilen funktionieren. Schade, ohne diese Basis startet das Projekt nie.
Riccardo Zorn

Das Erkennen eines Standbildes ist tatsächlich schwieriger als das Aufrufen des Videos, da letzteres das Problem beseitigt, die Teile identifizieren zu müssen.
Peter

3

Ich habe diese Software geschrieben. Es enthält eine Webcam-KI zur Bewegungserkennung, die mit der Arena-GUI verbunden ist.

https://www.youtube.com/watch?v=APkoE1UDKj0


Sehr beeindruckender Marius, Glückwunsch! Ist das Alpha bereits zum Testen verfügbar? Können Sie die Bewegungen durch einen Dienst für die Verwendung durch andere Software verfügbar machen?
Riccardo Zorn

3

Ich habe 2013 im Rahmen des Bildverarbeitungskurses bei FING UdelaR am Schach-Tracking-Projekt 8x8cam gearbeitet.

2014 haben dann andere Studenten eine bessere Version für Android namens chesstrack erstellt . Im Internet finden Sie Videos und Links zu dem verwendeten Code.

Ich würde gerne eine fertige App dieser Projektidee sehen, die ich seit Jahren hatte. Wenn es also Neuigkeiten dazu gibt, hinterlasse bitte einen Kommentar.

Beantwortung Ihrer gezielten Fragen:

  1. Gibt es so etwas (Webcam / Video zu PN Konverter? Ein Prototyp vielleicht?


    Abgesehen von meinem Projekt 8x8cam und chesstrack habe ich kürzlich ein Projekt namens ChessCam gefunden . Alle diese Projekte sind Open Source und müssen nur dann als Ressource benannt werden, wenn Sie daraus ein neues Projekt erstellen.

  2. Hat jemand eine solche Leistung versucht und seine Forschungen geteilt?


    Ja. Sie können dies auf der Antwort der vorherigen Frage sehen.

  3. Gibt es offensichtliche Einschränkungen, die den Erfolg dieses Projekts unwahrscheinlich machen?


    Das Schwierigste ist meiner Meinung nach, dass die Software funktioniert, unabhängig davon, wie die Kamera platziert ist und unabhängig von der Beleuchtung. Und auch, um an schnellen Spielen zu arbeiten und mit den Hand-Okklusionen zu arbeiten, wenn das Spiel gespielt wird, um die ausgeführte Bewegung korrekt zu erfassen.

  4. Würden Sie es kaufen, wenn es existiert?


    Definitiv Ja.


3

Es ist jetzt 2019-12 und 5 Jahre nach der ursprünglichen Frage.

  1. Gibt es so etwas (Webcam / Video zu PN Konverter)? Ein Prototyp vielleicht?

    sehen

  2. Hat jemand eine solche Leistung versucht und seine Forschungen geteilt?

    Ja, bis jetzt habe ich ungefähr 35 Forschungsarbeiten und ungefähr 10 Open Source-Lösungen und ein kommerzielles Angebot gefunden

    2.1 http://wiki.bitplan.com/index.php/PlayChessWithAWebCam/Papers

    2.2. http://wiki.bitplan.com/index.php/PlayChessWithAWebCam#Open_Source_Projects

    2.3. http://wiki.bitplan.com/index.php/PlayChessWithAWebCam#Commercial

    http://wiki.bitplan.com/index.php/PlayChessWithAWebCam ist ein weiteres Projekt, das auf die von Ihnen festgelegten Ziele abzielt. Das Projekt wurde am 15.10.2019 gestartet und in wenigen Stunden habe ich bereits viele Ressourcen gefunden, z. B. diese Frage. Zwei Monate später habe ich meine Antwort aktualisiert (siehe Links oben).

  3. Gibt es offensichtliche Einschränkungen, die den Erfolg dieses Projekts unwahrscheinlich machen? Ich kann nur aus eigener Erfahrung mit einem ähnlichen Projekt antworten, das ich vor 31 Jahren durchgeführt habe, siehe http://wiki.bitplan.com/index.php/MagneticSensorChessBoard1987 . Zu dieser Zeit habe ich versucht, ein Schachbrett zu erstellen, das Bewegungen erkennt. Ich habe Magnete für die Holzteile und Reedkontakte verwendet. Der Schlüssel zum Erfolg war die Verwendung einer Schachengine, die neue "Regeln" einführte, um sich nur auf Bewegungen konzentrieren zu können und keine einzelnen Figuren erkennen zu müssen. Wie in einer Antwort oben dargelegt, sind Werbeaktionen für nicht-königliche Stücke möglicherweise einer der Randnutzungsfälle, die schwierig sind. Das Erkennen der Bewegung von Teilen anhand von Bildunterschieden ist ein bekanntes Problem.

    Heutzutage sind auch Schachengines und UCI-kompatible GUIs verfügbar. Das Problem ist heutzutage eher ein Integrationsproblem als die Lösung der einzelnen Detailprobleme.

    Ein großes Hindernis ist der Unterschied zwischen einem "Prototyp" und einem Produkt. Siehe z. B. http://www.nandanbanerjee.com/files/ICCVR-08AUG12-011%20paper.pdf

    Ein Papier, das noch älter ist als diese Frage, aber weit entfernt von einem Produkt, das Sie zu einem vernünftigen Preis kaufen können.

  4. Würden Sie es kaufen, wenn es existiert?

    Ja. Als ich vor ein paar Tagen ein neues Schachbrett kaufte, suchte ich nach einem, das Züge aufnehmen konnte, und es lag immer noch bei 500 EUR. Wie es aussieht, werden die Hardwarekosten in diesen Tagen weit unter 150 EUR liegen, einschließlich eines anständigen Schachbretts und guter Stücke.

    Die Software könnte in Kürze Open Source und kostenlos (wie bei Freibier) sein. Ich werde diese Antwort entsprechend aktualisieren.


1
Vielen Dank, ich freue mich auf Ihre Fortschritte
Riccardo Zorn

1

Ich werde die Frage nicht beantworten, weil ich nicht weiß, ob es eine Software gibt. Ich sage nur, wie ich denke, dass es so ist, ich weiß es nicht genau, also ...


Okay, zuerst müssen Sie sicherstellen, dass das Video von einer Schachsoftware aufgenommen wurde, nicht von einem Live-Turnier, nur um Ihnen die Arbeit zu erleichtern.

Sie müssen den Film in Bilder konvertieren

ffmpeg -i foo.avi -vsync 0 -vf select="eq(pict_type\,PICT_TYPE_I)" -s WxH -f image2 foo-%03d.jpeg

Das war einfach, jetzt ist es schwierig, mit der Bildbearbeitung zu beginnen. Dafür ist OpenCV am leistungsfähigsten.

Dafür gibt es verschiedene Techniken. Ich gebe Ihnen die Links, damit Sie sie lesen können.

Es ist kompliziert, aber einfacher als Sie denken, denn Sie müssen nur die Ausgangsposition kennen, alle Bilder durchlaufen und den Unterschied sehen. Werfen Sie einen Blick auf OpenCV-Dokumente, in denen Sie jede Menge Materialien zu diesem Thema finden.


Übrigens, was Sie verlangen, ist bereits erledigt, aber soweit ich weiß, wird keine Software verwendet. Es gibt ein altes Projekt, das mit Pascal codiert wurde, Kameras, die über der Tafel platziert wurden, Roboter, die Bildverarbeitung und eine Bewegung ausführen. Heutzutage spielen viele Roboter Schach.

Sie könnten einen Arduino uno kaufen, und sein Lichtsensor erkennt die weißen und schwarzen Teile, einige Codierungen und spielt Schach. :)


1

Bearbeiten: Wer zu etwas anderem als Königin befördert, lässt alles explodieren. Es wird auch sehr schwierig sein, dies zu unterstützen (mein Programm für Teil 2 unterstützt Unterpromotion, aber das reine Speichern der Informationen von Teil 1 durch Lesen von Pixeln ist ein Albtraum).

Edit2: Mir ist gerade aufgefallen, dass du echtes für PGN meinst, das ist also alles nutzlos und ich werde höchstwahrscheinlich meine Antwort löschen.

Teil 1: Speichern der Quadrate mit Pixel-Readern

Es ist durchaus möglich, die erforderlichen Schritte wären:

  1. ändere die Anordnung der Tafel so, dass sie den letzten Zug hervorhebt (vorzugsweise nicht) nur den Rand)
  2. schreibe ein Programm, das Pixel auf gegebenem (x, y) liest
  3. Lass es ungefähr 5+ Pixel auf jedem Quadrat lesen (so ist es unmöglich, dass der Cursor / das Teil alle zu lesenden Pixel abdeckt)
  4. wandle das HEX in RBG um und gib dann einen Bereich an von akzeptierten Werten an, die unserer Ansicht nach nahe an der Farbe für den "letzten Zug" liegen
  5. Speichern Sie die Züge in einem Array mit einem Format, das ["h1-h8", "e4-e5", ...] nur die Anfangs- und Endquadrate enthält (Reihenfolge unwichtig ).

Hinweis: Von hier können wir nicht wirklich wissen, von welchem ​​Quadrat aus die Anfangs- / Endposition war, aber es gibt nur zwei Möglichkeiten und nur eine davon ist zulässig.

Ich habe einfache pixelbasierte Makros / Bots für RPGs in C # geschrieben. Ich kann garantieren, dass dies nicht so schwierig ist , vorausgesetzt, dass:

  1. Die Kamera ist statisch (damit die XY-Werte nicht durcheinander geraten)
  2. Sie kennen die Hintergrundfarbe bereits oder können sie vor dem Spielen einrichten

Grundsätzlich ist es am besten, wenn das Spiel online gespielt wird und Sie direkt vom Bildschirm aufnehmen.

Leider ist für Teil 1 kein Programm verfügbar


Teil 2: Exportieren dieser Liste in PGN

Um diese Liste in eine echte PGN zu verwandeln, können Sie ein in JavaScript geschriebenes Programm verwenden , das Züge aufzeichnet und eine der Funktionen, die moveCaller()Sie an zwei Quadrate übergeben, und das final_posnach den zulässigen Zügen von durchsucht initial_posund bei Übereinstimmung aufruft makeMove(). So können wir es zweimal anrufen e5 to e4und e4 to e5und ich garantiere , es wird den illegalen einen ignorieren.

  1. Projekt herunterladen (direkter Link .zip )
  2. dekomprimieren Sie die .zip
  3. ändere das JavaScript der index.htmlDatei folgendermaßen:

'

$(function(){
    var i, len, arr, temp, m_board;

    m_board=IsepicChess.initBoard({name : "main"});

    arr=["e4-e2", "e7-e5", "f3-g1"]; //is ok for the initial and final squares to be swapped

    for(i=0, len=arr.length; i<len; i++){
        temp=arr[i].split("-");

        //one of the two following lines will silently fail
        m_board.moveCaller(temp[0], temp[1]);
        m_board.moveCaller(temp[1], temp[0]);
    }

    m_board.refreshBoard();
});

.4. Kopieren Sie die Verschiebungsliste und fügen Sie einige PGN-Header darüber wie [WhiteElo "2400"]folgt hinzu.


-1

Ich benutze das Monroi Chess Notation Device für alle meine Schachpartien und es ist im Grunde ein elektronisches Brett.


4
Das beantwortet jedoch nicht die Frage des OP.
Dag Oskar Madsen

Sie könnten einen digitalen Präsentator verwenden, um ein Spiel aufzuzeichnen, dessen Kamera sich direkt über dem Tisch befindet. Dann könnten Sie einfach eine Anwendung schreiben, die die Objekte in einem Raster verfolgt.
Cferrel
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.