Outils de notation automatisée: film webcam vers PGN

14

Parfois, pendant les jeux blitz sur le plateau, ou en zeitnot, il devient très difficile de les annoter.

J'ai vu plusieurs logiciels / matériels pour aider à écrire la notation, même un qui est approuvé par la FIDE ; ceux-ci nécessitent que vous répétiez les mouvements sur l'appareil. À peine plus rapide que le stylo et le papier, tout aussi sujet aux erreurs, vous risquez de taper le mauvais mouvement et de perdre encore plus de temps.

DGT fabrique une planche qui le fera automatiquement, mais elle ne fonctionnera qu'avec ses pièces, et commence à 400 €, le double de celle des planches de tournoi . Certains projets indépendants sont disponibles tels que l' échiquier usb 101 , ou les robots d'échecs à commande vocale , le séquenceur pas à pas de l'échiquier . De plus, certains projets ouverts sont disponibles qui déplacent même des pièces (ou des pièces gigantesques ).

J'ai des éliminatoires ce soir, et les règles du tournoi dictent des matchs de plus en plus courts jusqu'à ce qu'il y ait un gagnant. J'ai donc pensé à tourner un film de la planche si nous perdions la trace. Mais mon expérience en programmation a commencé et j'ai pensé "qu'il doit y avoir un logiciel qui peut traiter un film et écrire le PGN".

J'ai cherché partout et je n'ai rien trouvé.

  1. Existe-t-il une telle chose (convertisseur webcam / vidéo en pgn)? Un prototype peut-être?
  2. Quelqu'un a-t-il tenté un tel exploit et partagé ses recherches?
  3. Y a-t-il des limites évidentes qui empêchent ce projet de réussir?
  4. L'achèteriez-vous s'il existait?
Riccardo Zorn
la source
2
ce serait un projet intéressant de vision par ordinateur / apprentissage automatique!
Memming
Je pense que la planche doit être filmée de haut en bas pour produire une image "2D". Sinon, il y a un problème supplémentaire de transposition d'une vue 3D en vue 2D et différents angles 3D doivent être traités séparément.
Rauan Sagit
en fait, il s'agit simplement d'une transformation linéaire pour "déplier" la planche et rendre tous ses carrés carrés. le problème principal est de reconnaître le carré duquel la pièce est déplacée si l'angle est tel que les pièces peuvent s'aligner les unes derrière les autres.
peter
Peut-être que nous pourrions faire une sorte de crowdsourcing pour ce projet. Je pense que c'est très intéressant. Je parie que certains étudiants pourraient le faire pour des projets seniors. Nous devons trouver un moyen de communiquer l'idée aux professeurs. Peut-être qu'avec deux caméras placées à deux endroits différents, cela peut être fait de manière fiable. Je serais intéressé par l'approche 3D, pas 2D à partir des frais généraux. Le montage d'une caméra aérienne est trop peu pratique. Je serais également intéressé par un logiciel qui prendrait des entrées de quelques caméras différentes filmant plusieurs jeux simultanément sur une longue table et produirait une notation - pour
Étant donné que kickstarter.com/projects/infivention/… a déjà réussi, un projet de financement participatif semble effectivement réalisable. D'autant plus que le coût pour les utilisateurs finaux serait très faible.
Wolfgang Fahl

Réponses:

4

Il est clairement intéressant et pertinent d'enregistrer automatiquement des parties d'échecs (les tableaux en direct s'attaquent plus ou moins au même problème). Pour autant que je sache, il n'existe aucun logiciel à cet effet qui existe aujourd'hui. Pour résoudre ce problème, je pense que le cas "simple" devrait être le suivant.

  1. L'échiquier doit être filmé de haut en bas pour obtenir une vue en deux dimensions. (Motivation: le tournage dans une vue en trois dimensions causerait des problèmes en raison d'une vue asymétrique et de pièces qui bloqueraient la vue pour d'autres pièces derrière elles. De plus, différentes vues 3D sont possibles, ce qui contrecarrerait une procédure propre.)
  2. Le film doit être édité manuellement pour capturer des moments de "planche propre" et supprimer les moments où les mains ou les têtes des deux joueurs bloquent la vue.
  3. L'algorithme de traitement d'image du côté logiciel devrait détecter les changements sur la carte et les enregistrer en tant que mouvements. Il doit également tourner automatiquement et transformer l'image pour détecter l'orientation de la carte et donc les coordonnées.
  4. Le logiciel doit utiliser la position de départ pour «mémoriser» chaque type de pièce, puis les utiliser pour la reconnaissance d'image pendant le jeu. Probablement, quelques astuces intelligentes peuvent être écrites pour résoudre le problème de la reconnaissance de pièces de manière intelligente.

Une recherche rapide sur Google avec la chaîne de recherche

traitement d'image de jeu d'échecs

a retourné cet article intéressant

Dans l'ensemble, il devrait être réaliste de mettre en œuvre ce type de logiciel. Pourtant, il pourrait être moins cher pour un humain de faire le même travail (transfert de transfert d'un clip vidéo vers un ordinateur).

Rauan Sagit
la source
Il m'a fallu un certain temps pour parcourir l'étude de GDIlleperuma que vous avez liée, c'est très intéressant. Mais cela exclut a priori la possibilité d'élaborer des images 3D biaisées. Merci, un article très intéressant.
Riccardo Zorn
@RiccardoZorn vous êtes les bienvenus! Je dois admettre que je ne vois pas l'intérêt de gérer des images biaisées 3D. La situation est que si un humain a du mal à documenter les mouvements d'un enregistrement vidéo, alors un logiciel de traitement d'image aura encore plus de difficultés.
Rauan Sagit
La mise en place d'une caméra verticale nécessite beaucoup d'espace, est invasive et vous avez besoin d'un support / support personnalisé. Cela le rend peu pratique :-(
Riccardo Zorn
Une technologie de "direct board" plus simple et moins chère pourrait être une meilleure façon de procéder dans ce cas. En option, filmez sous un angle 3D raisonnable et laissez un être humain extraire la notation d'échecs de l'enregistrement vidéo.
Rauan Sagit
le fichier researchgate.net/publication/… ne semble plus exister. quelqu'un a-t-il une copie?
Peter
6

En ordre,

1) Pas à ma connaissance

2) Pas à ma connaissance

3) Plusieurs choses rendent ce type de projet non trivial, voire difficile. Pas le moindre ne suit la pièce, la différenciant d'un geste de la main, par exemple. Déterminer également quand l'arrêt du mouvement serait une question intéressante à résoudre pour la vision par ordinateur. Ces types de problèmes ont été résolus dans d'autres situations, mais pas avec une précision de 100%, et certainement pas à des prix qui sont même près d'être compétitifs avec la carte DGT.

Il y a ensuite la question de l'emplacement de la caméra. Directement au-dessus de la tête offrirait la meilleure vue de la planche, ce qui faciliterait la détermination précise du carré. Mais partout où la caméra est placée, il y a une probabilité distincte que sa vue soit obstruée par l'un des joueurs, soit en se penchant au-dessus du tableau, en atteignant l'horloge ou simplement en gesticulant.

4) Sauf si ce n'était vraiment pas cher. Et je ne m'attends pas à ce que ce soit. Mon raisonnement est simple. Au fur et à mesure que les commandes de temps se raccourcissent, la qualité du jeu diminue, au point où ça ne m'intéresse plus

Arlen
la source
Vous faites un bon point à 4: la qualité est en effet médiocre. Ne vaut pas la peine d'installer une caméra, et encore moins de passer un mois pour écrire le logiciel. Je viens de gagner les séries éliminatoires, mais je suis gêné de voir à quel point j'ai mal joué.
Riccardo Zorn
5

Ce serait une tâche assez complexe. Une première étape raisonnable consiste peut-être à rechercher la reconnaissance de la position FEN à partir d'une seule image - pour laquelle il existe plus de ressources, par exemple:

Tihomir Georgiev
la source
Excellent merci. J'ai lu les deux et ils sont vraiment intéressants. Chessgrabber est un projet récent et est certainement plus adapté, j'ai contacté le développeur.
Riccardo Zorn
Je pense qu'à partir de cette première étape, il ne serait pas trop difficile de convertir une vidéo en PGN - prenez des images toutes les quelques millisecondes, analysez-les et si la position a changé de manière légale, ajoutez la nouvelle position au fichier.
rlms
Mise à jour: le développeur a répondu, cela ne fonctionnera jamais pour les images biaisées en 3D avec des pièces qui se chevauchent. Dommage, sans ça comme base, le projet ne démarrera jamais.
Riccardo Zorn
reconnaître une image fixe est en fait plus difficile que d'avoir la vidéo qui y mène, car cette dernière élimine le problème de devoir identifier les pièces.
Peter
4

C'est 2019-12 maintenant et 5 ans après la question d'origine.

  1. Existe-t-il une telle chose (convertisseur webcam / vidéo en pgn)? Un prototype peut-être?

    voir

  2. Quelqu'un a-t-il tenté un tel exploit et partagé ses recherches?

    Oui - jusqu'à présent, j'ai trouvé quelque 35 documents de recherche et quelque 10 solutions open source et une offre commerciale

    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 est un autre projet visant les objectifs que vous avez définis. Le projet a démarré le 2019-10-15 et en quelques heures j'ai déjà trouvé beaucoup de ressources par exemple cette Question Environ deux mois plus tard j'ai mis à jour ma réponse (voir liens ci-dessus)

  3. Y a-t-il des limites évidentes qui empêchent ce projet de réussir? Je ne peux que répondre de ma propre expérience avec un projet similaire que j'ai réalisé il y a 31 ans, voir http://wiki.bitplan.com/index.php/MagneticSensorChessBoard1987 . A cette époque, j'ai essayé de créer un échiquier qui détecterait les mouvements. J'ai utilisé des aimants dans les pièces en bois et les contacts en roseau. La clé du succès a été d'utiliser un moteur d'échecs qui a créé de nouvelles "règles" pour pouvoir se concentrer uniquement sur les mouvements et ne pas avoir à détecter des pièces individuelles. Comme indiqué dans une réponse ci-dessus, les promotions sur les pièces non reine peuvent être l'une des cas d'utilisation les plus difficiles. La détection du mouvement des pièces via des différences d'images est un problème bien compris.

    Des moteurs d'échecs et des interfaces graphiques compatibles UCI sont également disponibles de nos jours. Le problème est donc plus un problème d'intégration de nos jours que de résoudre les problèmes de détail individuels.

    Un obstacle majeur est la différence entre un "prototype" et un produit. Voir par exemple http://www.nandanbanerjee.com/files/ICCVR-08AUG12-011%20paper.pdf

    un papier qui est encore plus ancien que cette question mais loin d'un produit que l'on peut acheter à un prix raisonnable.

  4. L'achèteriez-vous s'il existait?

    Oui. Lorsque j'ai acheté un nouvel échiquier il y a quelques jours, je cherchais un qui pouvait enregistrer des mouvements et il était toujours aux alentours de 500 EUR. En apparence, le coût du matériel sera bien inférieur à 150 EUR ces jours-ci, y compris un échiquier et des pièces décents.

    Le logiciel pourrait bien être open source et gratuit (comme dans la bière gratuite) bientôt. Je mettrai à jour cette réponse en conséquence.

Wolfgang Fahl
la source
1
Merci, j'ai hâte de voir vos progrès
Riccardo Zorn
3

J'ai écrit ce logiciel. Il contient une webcam AI pour la reconnaissance des mouvements, connectée à l'interface graphique Arena.

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

Marius
la source
Très impressionnant Marius, félicitations! L'alpha est-il déjà disponible pour les tests? Pouvez-vous exposer les mouvements via un service, pour une utilisation par d'autres logiciels?
Riccardo Zorn
3

J'ai travaillé sur le projet de suivi d'échecs 8x8cam dans le cadre du cours de traitement d'image en 2013 à FING UdelaR.

Puis en 2014, d'autres étudiants ont créé une meilleure version pour Android nommée chesstrack . Sous son site Web, vous pouvez trouver des vidéos et un lien vers le code qu'ils ont utilisé.

J'aimerais voir une application finalisée de cette idée de projet que j'avais depuis des années. Donc, s'il y a des nouvelles à ce sujet, veuillez laisser un commentaire.

Répondre à vos questions pointues:

  1. Existe-t-il une telle chose (convertisseur webcam / vidéo en pgn? Un prototype peut-être?


    Outre mon projet 8x8cam et chesstrack , j'ai récemment trouvé un projet nommé ChessCam . Tous ces projets sont Open Source et ne doivent être nommés comme ressource que si vous créez un nouveau projet à partir d'eux.

  2. Quelqu'un a-t-il tenté un tel exploit et partagé ses recherches?


    Oui. Vous pouvez le voir sur la réponse à la question précédente.

  3. Y a-t-il des limites évidentes qui empêchent ce projet de réussir?


    La partie la plus difficile, je crois, est de faire fonctionner le logiciel, peu importe la façon dont la caméra est placée et indépendamment de l'éclairage. Et aussi pour travailler sur des jeux au rythme rapide et travailler avec les occlusions de la main lorsque le jeu est joué, afin de détecter correctement le mouvement effectué.

  4. L'achèteriez-vous s'il existait?


    Définitivement oui.

Cedric Zoppolo
la source
1

Je ne répondrai pas à la question, car je ne sais pas s'il existe un logiciel. Je dis juste comment je pense que c'est comme ça, je ne sais pas avec certitude, alors ...


D'accord, vous devez d'abord vous assurer que la vidéo est enregistrée à partir d'un logiciel d'échecs, pas d'un tournoi en direct, juste pour vous faciliter la tâche.

Vous devez convertir le film en images

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

C'était facile, maintenant la partie difficile, vous devez commencer à faire le procession d'images, pour cela, le plus puissant est OpenCV.

Pour cela, il existe plusieurs techniques, je vais vous donner les liens pour que vous puissiez les lire.

C'est compliqué mais plus simple que vous ne le pensez, car il vous suffit de savoir quelle est la position de départ, de parcourir toutes les images et de voir la différence. Jetez un œil aux documents OpenCV, vous trouverez des tonnes de documents sur ce sujet.


Oh au fait, ce que vous demandez est déjà fait, mais sans utiliser de logiciel pour autant que je sache, il y a un vieux projet qui a été codé en Pascal, des caméras placées sur la carte, des robots font du traitement d'image et bougent. De nos jours, de nombreux robots jouent aux échecs.

Vous pourriez acheter un Arduino uno, et sa censure légère, il détectera les pièces blanches et les pièces noires, du codage et jouera aux échecs. :)

Lynob
la source
1

Edit: la promotion de quelque chose de différent de queen fera exploser tout. Il sera également très difficile de prendre en charge cela (mon programme pour la partie 2 prend en charge la sous-promotion, mais stocker les informations de la partie 1 uniquement en lisant des pixels est un cauchemar).

Edit2: Je viens de remarquer que vous voulez dire de vrais échecs sur PGN, donc tout cela est inutile et je supprimerai très probablement ma réponse.

Partie 1: stockage des carrés à l'aide de lecteurs de pixels

C'est tout à fait possible, les étapes nécessaires seraient:

  1. changer la configuration de la planche pour mettre en évidence le dernier mouvement (de préférence pas seulement la bordure)
  2. écrire un programme qui lit les pixels sur donné (x, y)
  3. faites-le lire environ 5+ pixels sur chaque carré (il est donc impossible pour le curseur / morceau de couvrir tous les pixels à lire)
  4. convertir le HEX en RBG, puis donner une plage de valeurs acceptées de ce que nous considérons comme proche de la couleur du "dernier mouvement"
  5. enregistrer les mouvements sur un tableau avec un format ["h1-h8", "e4-e5", ...] juste les carrés initial et final (ordre sans importance )

Remarque: à partir d'ici, nous ne pouvons pas vraiment savoir de quel carré était la position initiale / finale, mais il n'y a que 2 posibilités et seulement 1 d'entre elles est légale.

J'ai écrit des macros / bots simples basés sur des pixels pour les jeux de rôle en C #, je peux garantir que ce n'est pas si difficile, étant donné que:

  1. la came est statique (donc les valeurs x, y ne sont pas gâchées)
  2. vous connaissez la couleur d'arrière-plan ou vous pouvez la configurer avant de jouer

Fondamentalement, il est préférable que le jeu soit joué en ligne et que vous enregistrez directement à partir de l'écran.

Désolé, aucun programme disponible pour la partie # 1


Partie 2: exporter cette liste dans PGN

Pour transformer cette liste en un véritable PGN, vous pouvez utiliser un programme que j'ai écrit en JavaScript qui enregistre les mouvements, et l'une des fonctions moveCaller()vous passez deux positions de carrés et il recherche final_posdans les mouvements légaux de initial_poset s'il y a une correspondance, alors il appelle makeMove(). Nous pouvons donc l'appeler deux fois e5 to e4et e4 to e5je vous garantis qu'il ignorera l'illégal.

  1. télécharger le projet (lien direct .zip )
  2. décompresser le .zip
  3. changez le JavaScript du index.htmlfichier avec ceci:

"

$(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. copiez la liste des mouvements et ajoutez des en-têtes PGN au-dessus comme [WhiteElo "2400"]etc.

ajax333221
la source
-1

J'utilise le Monroi Chess Notation Device pour toutes mes parties d'échecs et c'est essentiellement une carte électronique.

Cferrel
la source
4
Cela ne répond cependant pas à la question du PO.
Dag Oskar Madsen du
vous pouvez utiliser un présentateur numérique pour enregistrer un jeu, c'est une caméra juste au-dessus de la table. alors vous pouvez simplement écrire une application qui suit les objets dans une grille.
Cferrel