Strumenti per la notazione automatizzata: film in webcam su PGN


14

A volte durante i giochi blitz sul tavolo, o quando si è in zeitnot, diventa molto difficile annotarli.

Ho visto diversi software / hardware per aiutare a scrivere la notazione, anche uno che ha approvato FIDE ; questi richiedono che si ripetano le mosse sul dispositivo. Poco più veloce di carta e penna, altrettanto soggetto a errori, oltre a rischiare di digitare la mossa sbagliata e di perdere ancora più tempo.

Il DGT crea un tabellone che lo farà automaticamente, ma funzionerà solo con i suoi pezzi, e inizia a 400 €, il doppio rispetto ai tabelloni dei tornei . Sono disponibili alcuni progetti indipendenti come la scacchiera USB 101 , o robot di scacchi a comando vocale , il sequencer di passi della scacchiera . Inoltre sono disponibili alcuni progetti aperti che spostano anche pezzi (o pezzi giganteschi ).

Stasera ho un playoff e le regole del torneo dettano partite sempre più brevi fino a quando non ci sarà un vincitore. Quindi ho pensato di girare un film sul tabellone se dovessimo perdere le tracce. Ma poi è iniziato il mio background di programmazione e ho pensato "ci deve essere un software in grado di elaborare un film e scrivere il PGN".

Ho cercato dappertutto e non ho trovato nulla.

  1. Esiste qualcosa del genere (convertitore da webcam / video a pgn)? Un prototipo forse?
  2. Qualcuno ha tentato una simile impresa e ha condiviso le proprie ricerche?
  3. Ci sono ovvie limitazioni che rendono improbabile che questo progetto abbia successo?
  4. Lo compreresti se esistesse?

2
sarebbe un interessante progetto di visione artificiale / machine learning!
Memming

Penso che la scheda debba essere filmata dall'alto verso il basso per produrre un'immagine "2D". Altrimenti, c'è un ulteriore problema di trasposizione di una vista 3D in una vista 2D e diversi angoli 3D devono essere trattati separatamente.
Rauan Sagit,

in realtà è semplicemente una trasformazione lineare per "distendere" la tavola e rendere quadrati tutti i suoi quadrati. il problema principale è riconoscere il quadrato da cui viene spostato il pezzo se l'angolo è tale che i pezzi possono allinearsi uno dietro l'altro.
Pietro,

Forse potremmo fare una sorta di crowdsourcing per questo progetto. Penso che sia molto interessante. Scommetto che alcuni studenti universitari potrebbero farlo per progetti senior. Dobbiamo trovare un modo per comunicare l'idea ai professori. Forse con due telecamere posizionate in due posizioni diverse, ciò può essere fatto in modo affidabile. Sarei interessato all'approccio 3D, non al 2D dall'alto. Il montaggio di una videocamera aerea è troppo poco pratico. Sarei anche interessato a software che prendesse input da alcune telecamere diverse che

Dato che kickstarter.com/projects/infivention/… ha già avuto successo, un progetto di crowdfunding sembra davvero fattibile. Soprattutto perché il costo per gli utenti finali sarebbe molto basso.
Wolfgang Fahl,

Risposte:


4

È chiaramente interessante e pertinente registrare automaticamente le partite di scacchi (le scacchiere dal vivo affrontano più o meno lo stesso problema). Per quanto ne so, non esiste un software per questo scopo che esiste oggi. Per risolvere questo problema, penso che il caso "semplice" dovrebbe essere il seguente.

  1. La scacchiera dovrebbe essere filmata dall'alto verso il basso per ottenere una visione bidimensionale. (Motivazione: le riprese in una vista tridimensionale causerebbero problemi a causa di una vista distorta e di pezzi che bloccano la vista per altri pezzi dietro di loro. Inoltre, sono possibili diverse viste 3D che contrasterebbero una procedura pulita.)
  2. Il film deve essere modificato manualmente per catturare i momenti di "pulizia della tavola" e rimuovere i momenti in cui le mani o le teste dei due giocatori stanno bloccando la vista.
  3. L'algoritmo di elaborazione delle immagini sul lato software dovrebbe rilevare le modifiche sulla scheda e registrarle come mosse. Dovrebbe anche ruotare automaticamente e trasformare l'immagine per rilevare l'orientamento della scheda e quindi le coordinate.
  4. Il software dovrebbe usare la posizione iniziale per "memorizzare" ogni tipo di pezzo e quindi usarli per il riconoscimento delle immagini durante il gioco. Probabilmente, alcuni trucchi intelligenti possono essere scritti per risolvere il problema del riconoscimento dei pezzi in modo intelligente.

Una rapida ricerca su Google con la stringa di ricerca

elaborazione delle immagini del gioco di scacchi

restituito questo interessante articolo

Tutto sommato, dovrebbe essere realistico implementare questo tipo di software. Tuttavia potrebbe essere più economico per un essere umano fare lo stesso lavoro (il trasferimento si sposta da un videoclip a un computer).


Mi ci è voluto un po 'per esaminare lo studio di GDIlleperuma che hai collegato, è molto interessante. Ma esclude a priori la possibilità di elaborare immagini 3D distorte. Grazie, un articolo molto interessante.
Riccardo Zorn,

@RiccardoZorn sei il benvenuto! Devo ammettere che non vedo il punto di gestire immagini distorte in 3D. La situazione è che se un essere umano ha difficoltà a documentare le mosse da una registrazione video, allora un software di elaborazione delle immagini avrà ancora più difficoltà.
Rauan Sagit,

La configurazione di una fotocamera verticale richiede molto spazio, è invasiva e è necessario un supporto / supporto personalizzato. Questo lo rende poco pratico :-(
Riccardo Zorn,

Una tecnologia "live board" più semplice ed economica potrebbe essere un modo migliore per procedere in quel caso. Opzionalmente, filmare da una ragionevole angolazione 3D e lasciare che un essere umano estragga la notazione di scacchi dalla registrazione video.
Rauan Sagit,

il file researchgate.net/publication/… sembra non esistere più. qualcuno ne ha una copia?
Pietro,

6

In ordine,

1) Non per mia conoscenza

2) Non per mia conoscenza

3) Ci sono diverse cose che rendono questo tipo di progetto non banale, persino difficile. Non ultimo dei quali sta seguendo il pezzo, differenziandolo da un gesto della mano, per esempio. Determinare anche quando la mossa si è fermata sarebbe una domanda interessante da risolvere per la visione artificiale. Questo tipo di problemi è stato risolto in altre situazioni, ma non con un'accuratezza del 100%, e certamente non a prezzi che sono persino vicini alla competitività con il consiglio DGT.

Quindi c'è la domanda su dove posizionare la telecamera. Direttamente dall'alto si offrirebbe la migliore visuale del tabellone, facilitando la determinazione del quadrato con precisione. Ma ovunque venga posizionata la telecamera, c'è una netta probabilità che uno dei giocatori ostruisca la sua vista, sporgendosi dal tavolo, raggiungendo l'orologio o semplicemente gesticolando.

4) A meno che non fosse davvero economico. E non mi aspetto che lo sia. Il mio ragionamento è semplice. Man mano che i controlli del tempo si accorciano, la qualità del gioco diminuisce, al punto che per me non è più interessante


Fai un ottimo punto a 4: la qualità è davvero scarsa. Non vale la seccatura di installare una fotocamera, tanto meno spendere un mese per scrivere il software. Ho appena vinto il playoff, ma sono imbarazzato da quanto male ho giocato.
Riccardo Zorn,

5

Sarebbe un compito piuttosto complesso. Forse un primo passo ragionevole è cercare di riconoscere la posizione della FEN da una singola immagine, per la quale esistono più risorse, ad esempio:


Eccellente grazie. Ho letto entrambi e sono davvero interessanti. Chessgrabber è un progetto recente ed è sicuramente più adatto, ho contattato lo sviluppatore.
Riccardo Zorn,

Penserei che da questo primo passo non sarebbe troppo difficile convertire un video in PGN: scatta immagini ogni pochi millisecondi, analizzale e se la posizione è cambiata in modo legale aggiungi la nuova posizione al file.
rlms,

Aggiornamento: lo sviluppatore ha risposto, non funzionerà mai per le immagini 3D distorte con pezzi sovrapposti. Peccato, senza che come base, il progetto non inizierà mai.
Riccardo Zorn,

riconoscere un'immagine fissa è in realtà più difficile che avere il video che porta ad essa, poiché quest'ultimo elimina il problema di dover essere in grado di identificare i pezzi.
Pietro,

4

Sono ora il 2019-12-2015 e 5 anni dopo la domanda originale.

  1. Esiste qualcosa del genere (convertitore da webcam / video a pgn)? Un prototipo forse?

    vedere

  2. Qualcuno ha tentato una simile impresa e ha condiviso le proprie ricerche?

    Sì, finora ho trovato circa 35 articoli di ricerca e circa 10 soluzioni open source e un'offerta 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 è un altro progetto che mira agli obiettivi da te dichiarati. Il progetto è stato avviato il 15-10-2019 e in poche ore ho già trovato molte risorse, ad esempio questa domanda Circa due mesi dopo ho aggiornato la mia risposta (vedere i link sopra)

  3. Ci sono ovvie limitazioni che rendono improbabile che questo progetto abbia successo? Posso solo rispondere dalla mia esperienza con un progetto simile che ho fatto 31 anni fa, vedere http://wiki.bitplan.com/index.php/MagneticSensorChessBoard1987 . A quel tempo ho provato a creare una scacchiera in grado di rilevare le mosse. Ho usato i magneti nei pezzi di legno e i contatti reed. La chiave del successo era usare un motore di scacchi che "nuove regole" per essere in grado di concentrarsi sui movimenti da solo e non dover rilevare singoli pezzi. Come indicato in una risposta sopra, le promozioni ai pezzi non regina potrebbero essere uno dei casi più difficili. Rilevare il movimento dei pezzi tramite differenze di immagine è un problema ben compreso.

    Oggigiorno sono disponibili anche motori per scacchi e GUI compatibili con UCI. Quindi il problema è più un problema di integrazione in questi giorni che risolvere i singoli problemi di dettaglio.

    Un grande ostacolo è la differenza tra un "prototipo" e un prodotto. Vedi ad esempio http://www.nandanbanerjee.com/files/ICCVR-08AUG12-011%20paper.pdf

    una carta ancora più vecchia di questa domanda ma lontana da un prodotto che è possibile acquistare a un prezzo ragionevole.

  4. Lo compreresti se esistesse?

    Sì. Quando ho comprato una nuova scacchiera qualche giorno fa ne cercavo una in grado di registrare mosse ed era ancora intorno ai 500 euro. A quanto pare il costo dell'hardware sarà ben al di sotto di 150 EUR in questi giorni, compresi una scacchiera e pezzi decenti.

    Il software potrebbe presto essere open source e gratuito (come nella birra gratis). Aggiornerò di conseguenza questa risposta.


1
Grazie, non vedo l'ora di vedere i tuoi progressi
Riccardo Zorn,

3

Ho scritto questo software. Contiene AI della webcam per il riconoscimento delle mosse, collegato alla GUI Arena.

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


Molto impressionante Marius, complimenti! L'alfa è già disponibile per il test? Puoi esporre le mosse attraverso un servizio, per l'utilizzo da parte di altri software?
Riccardo Zorn,

3

Ho lavorato al progetto di tracciamento degli scacchi 8x8cam nell'ambito del corso di elaborazione delle immagini nel 2013 presso FING UdelaR.

Quindi nel 2014 altri studenti hanno creato una versione migliore per Android chiamata chesstrack . Sotto il suo web puoi trovare video e link al codice che hanno usato.

Mi piacerebbe vedere un'app finalizzata di questa idea di progetto che ho avuto per anni. Quindi, se ci sono alcune novità a riguardo, lascia un commento.

Rispondere alle domande appuntite:

  1. Esiste qualcosa del genere (convertitore da webcam / video a pgn? Forse un prototipo?


    Oltre al mio progetto 8x8cam e chesstrack , ho recentemente trovato un progetto chiamato ChessCam . Tutti questi progetti sono Open Source e devono essere nominati come risorsa solo se si crea un nuovo progetto da essi.

  2. Qualcuno ha tentato una simile impresa e ha condiviso le proprie ricerche?


    Sì. Puoi vederlo nella risposta alla domanda precedente.

  3. Ci sono ovvie limitazioni che rendono improbabile che questo progetto abbia successo?


    La parte più difficile credo sia quella di far funzionare il software indipendentemente da come è posizionata la videocamera e indipendentemente dall'illuminazione. E anche per lavorare su giochi frenetici e lavorare con le occlusioni delle mani durante il gioco, al fine di rilevare correttamente la mossa effettuata.

  4. Lo compreresti se esistesse?


    Decisamente sì.


1

Non risponderò alla domanda, perché non so se c'è un software là fuori. Sto solo dicendo come penso che sia come farlo, non lo so per certo, quindi ...


Va bene prima devi assicurarti che il video sia registrato da un software di scacchi, non da un torneo dal vivo, solo per semplificare il tuo lavoro.

Devi convertire il film in immagini

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

È stato facile, ora la parte difficile, è necessario iniziare a processare l'immagine, per questo, il più potente è OpenCV.

Per questo, ci sono diverse tecniche, ti darò i link in modo da poterli leggere.

È complicato ma più semplice di quanto pensi, perché devi solo sapere qual è la posizione iniziale, scorrere tutte le immagini e vedere la differenza. Dai un'occhiata ai documenti di OpenCV, troverai tantissimi materiali su questo argomento.


Oh, a proposito, quello che stai chiedendo è già fatto, ma non usando software per quanto ne so, c'è un vecchio progetto che è stato codificato usando Pascal, telecamere posizionate sul tavolo, i robot eseguono l'elaborazione delle immagini e fanno una mossa. Oggi molti robot giocano a scacchi.

Potresti comprare un Arduino Uno, e il suo incensiere leggero, rileverà i pezzi bianchi e quelli neri, alcuni codici e giocherà a scacchi. :)


1

Modifica: promuovendo qualcosa di diverso dalla regina farà esplodere tutto. Sarà anche molto difficile supportarlo (il mio programma per la Parte 2 supporta la sottopromozione, ma archiviare le informazioni della Parte 1 semplicemente leggendo i pixel è un incubo).

Edit2: Ho appena notato che vuoi dire scacchi reali su PGN, quindi è tutto inutile e molto probabilmente cancellerò la mia risposta.

Parte 1: memorizzazione dei quadrati usando i lettori di pixel

È del tutto possibile, i passaggi necessari sarebbero:

  1. cambia la configurazione della scacchiera in modo da evidenziare l'ultima mossa (preferibilmente non solo il bordo)
  2. scrivere un programma che legge pixel su dato (x, y)
  3. fai in modo che legga circa 5+ pixel su ogni quadrato (quindi è impossibile per il cursore / pezzo coprire tutti i pixel da leggere)
  4. converti l'esadecimale in RBG, quindi fornisci una gamma di valori accettati di ciò che riteniamo essere considerato vicino al colore dell'ultima mossa
  5. salva le mosse su un array con un formato ["h1-h8", "e4-e5", ...] solo i quadrati iniziale e finale (ordine non importante )

Nota: da qui non possiamo davvero sapere da quale quadrato fosse la posizione iniziale / finale, ma ci sono solo 2 possibilità e solo 1 di esse è legale.

Ho scritto semplici macro / bot basati su pixel per giochi di ruolo in C #, posso garantire che non è così difficile, dato che:

  1. la cam è statica (quindi i valori x, y non si incasinano)
  2. in precedenza conosci il colore di sfondo o puoi impostarlo prima di giocare

Fondamentalmente, è meglio se il gioco è giocato online e stai registrando direttamente dallo schermo.

Siamo spiacenti, nessun programma è disponibile per la parte # 1


Parte 2: esportazione di tale elenco in PGN

Per trasformare questo elenco in un vero PGN, puoi usare un programma che ho scritto in JavaScript che registra le mosse e una delle funzioni in moveCaller()cui passi due posizioni dei quadrati e cerca final_posnelle mosse legali di initial_pose se c'è una corrispondenza, chiama makeMove(). Quindi possiamo chiamarlo due volte e5 to e4e e4 to e5garantisco che ignorerà quello illegale.

  1. scarica il progetto (link diretto .zip )
  2. decomprimere il file .zip
  3. cambia il JavaScript del index.htmlfile con questo:

'

$(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. copia l'elenco delle mosse e aggiungi alcune intestazioni PGN sopra di essa come [WhiteElo "2400"]ecc.


-1

Uso il Monroi Chess Notation Device per tutte le mie partite a scacchi ed è fondamentalmente una scheda elettronica.


4
Tuttavia, ciò non risponde alla domanda del PO.
Dag Oskar Madsen,

potresti usare un presentatore digitale per registrare un gioco è una videocamera appena sopra il tavolo. quindi potresti semplicemente scrivere un'applicazione che tiene traccia degli oggetti in una griglia.
Cferrel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.