Herramientas para notación automatizada: película de cámara web a PGN


14

A veces, durante los juegos de blitz sobre el tablero, o cuando está en zeitnot, se hace muy difícil anotarlos.

He visto varios software / hardware para ayudar a escribir la notación, incluso uno aprobado por la FIDE ; estos requieren que repita los movimientos en el dispositivo. Apenas más rápido que el lápiz y el papel, igual de propenso a errores, además se arriesga a escribir el movimiento incorrecto y perder aún más tiempo.

DGT crea un tablero que hará esto automáticamente, pero solo funcionará con sus piezas, y comienza en 400 €, el doble que para los tableros de torneo . Algunos proyectos independientes están disponibles, como el tablero de ajedrez usb 101 , o los robots de ajedrez controlados por voz , el secuenciador por pasos del tablero de ajedrez . Además , están disponibles algunos proyectos abiertos que incluso mueven piezas (o piezas gigantescas ).

Tengo una eliminatoria esta noche, y las reglas del torneo dictan juegos cada vez más cortos hasta que haya un ganador. Por lo tanto, pensé en filmar una película del tablero si perdemos la noción. Pero luego entró mi experiencia en programación y pensé "debe haber algún software que pueda procesar una película y escribir la PGN".

Busqué en todas partes y no encontré nada.

  1. ¿Existe tal cosa (webcam / video a convertidor pgn)? ¿Un prototipo tal vez?
  2. ¿Alguien ha intentado tal hazaña y ha compartido su investigación?
  3. ¿Existen limitaciones obvias que hacen que este proyecto sea poco probable que tenga éxito?
  4. ¿Lo comprarías si existiera?

2
¡Sería un proyecto interesante de visión artificial / aprendizaje automático!
Memming

Creo que el tablero tiene que ser filmado de arriba hacia abajo para producir una imagen "2D". De lo contrario, existe un problema adicional de transposición de una vista 3D a una vista 2D y los diferentes ángulos 3D deben tratarse por separado.
Rauan Sagit

en realidad es simplemente una transformación lineal para "estirar" el tablero y hacer que todos sus cuadrados sean cuadrados. El problema principal es reconocer el cuadrado desde el que se mueve la pieza si el ángulo es tal que las piezas pueden alinearse una detrás de la otra.
Peter

Tal vez podríamos hacer algún tipo de crowdsourcing para este proyecto. Creo que es muy interesante Apuesto a que algunos estudiantes universitarios podrían hacer esto para proyectos de alto nivel. Necesitamos encontrar una manera de comunicar la idea a los profesores. Tal vez con dos cámaras colocadas en dos ubicaciones diferentes, esto se puede hacer de manera confiable. Me interesaría el enfoque 3D, no el 2D desde arriba. Montar una cámara superior no es práctico. Yo también estaría interesado en el software que tomaría las aportaciones de unas pocas cámaras diferentes tiro varios juegos al mismo tiempo juega en una mesa larga y la notación productos - para

Dado que kickstarter.com/projects/infivention/… ya tuvo éxito, un proyecto de crowdfunding parece factible. Especialmente porque el costo para los usuarios finales sería muy bajo.
Wolfgang Fahl

Respuestas:


4

Es claramente interesante y relevante grabar automáticamente juegos de ajedrez (los tableros en vivo abordan más o menos el mismo problema). Hasta donde yo sé, no existe ningún software para este propósito que exista hoy. Para resolver este problema, creo que el caso "simple" debería ser el siguiente.

  1. El tablero de ajedrez se debe filmar de arriba hacia abajo para obtener una vista bidimensional. (Motivación: filmar en una vista tridimensional causaría problemas debido a una vista sesgada y piezas que bloquearán la vista de otras piezas detrás de ellas. Además, son posibles diferentes vistas en 3D que contrarrestarían un procedimiento limpio).
  2. La película debe editarse manualmente para capturar momentos de "tablero limpio" y eliminar los momentos en que las manos o cabezas de los dos jugadores bloquean la vista.
  3. El algoritmo de procesamiento de imágenes en el lado del software debería detectar los cambios en el tablero y registrarlos como movimientos. También debe rotar automáticamente y transformar la imagen para detectar la orientación del tablero y, por lo tanto, las coordenadas.
  4. El software debe usar la posición inicial para "memorizar" cada tipo de pieza y luego usarlas para el reconocimiento de imágenes durante el juego. Probablemente, se pueden escribir algunos trucos inteligentes para resolver el problema del reconocimiento de piezas de una manera inteligente.

Una búsqueda rápida en Google con la cadena de búsqueda

procesamiento de imágenes del juego de ajedrez

devolvió este interesante artículo

En general, debería ser realista implementar este tipo de software. Sin embargo, podría ser más barato para un humano hacer el mismo trabajo (transferir movimientos de un videoclip a una computadora).


Me tomó un tiempo revisar el estudio de GDIlleperuma que vinculaste, es muy interesante. Pero excluye a priori la posibilidad de elaborar imágenes sesgadas en 3D. Gracias, un artículo muy interesante.
Riccardo Zorn

@RiccardoZorn de nada! Debo admitir que no veo el punto de manejar imágenes sesgadas en 3D. La situación es que si un humano tiene problemas para documentar los movimientos de una grabación de video, entonces un software de procesamiento de imágenes tendrá aún más dificultades.
Rauan Sagit

La configuración de una cámara vertical requiere mucho espacio, es invasiva y necesita un soporte / soporte personalizado. Esto lo hace poco práctico :-(
Riccardo Zorn

Una tecnología de "tablero en vivo" más simple y barata podría ser una mejor manera de hacerlo en ese caso. Opcionalmente, filme desde un ángulo 3D razonable y deje que un humano extraiga la notación de ajedrez de la grabación de video.
Rauan Sagit

el archivo researchgate.net/publication/… ya no parece existir. ¿Alguien tiene una copia?
Peter

6

En orden,

1) No que yo sepa

2) No que yo sepa

3) Hay varias cosas que hacen que este tipo de proyecto no sea trivial, incluso difícil. No menos importante es seguir la pieza, diferenciarla de un gesto con la mano, por ejemplo. También determinar cuándo se detuvo el movimiento sería una pregunta interesante para la visión por computadora. Este tipo de problemas se han resuelto en otras situaciones, pero no con una precisión del 100%, y ciertamente no a precios que están incluso cerca de ser competitivos con el tablero DGT.

Luego está la cuestión de dónde se podría colocar la cámara. Directamente desde arriba ofrecería la mejor vista del tablero, haciendo que sea más fácil determinar el cuadrado con precisión. Pero donde sea que se coloque la cámara, existe una clara probabilidad de que uno de los jugadores obstruya su visión, ya sea inclinándose sobre el tablero, alcanzando el reloj o simplemente gesticulando.

4) No, a menos que sea realmente barato. Y no espero que lo sea. Mi razonamiento es simple. A medida que los controles de tiempo se acortan, la calidad del juego disminuye, hasta el punto en que ya no me interesa.


Haces un gran punto a las 4: la calidad es de hecho pobre. No vale la pena la molestia de configurar una cámara, y mucho menos gastar un mes para escribir el software. Acabo de ganar el playoff, pero me da vergüenza lo mal que jugué.
Riccardo Zorn

5

Esa sería una tarea bastante compleja. Tal vez un primer paso razonable es buscar reconocer la posición de FEN a partir de una sola imagen, para la cual existen más recursos, por ejemplo:


Excelente gracias. Leí ambos y son realmente interesantes. Chessgrabber es un proyecto reciente y definitivamente es más adecuado, contacté al desarrollador.
Riccardo Zorn

Creo que desde este primer paso no sería demasiado difícil convertir un video a PGN: tome imágenes cada pocos milisegundos, analícelas y, si la posición ha cambiado de manera legal, agregue la nueva posición al archivo.
rlms

Actualización: el desarrollador respondió, nunca funcionará para imágenes asimétricas en 3-D con piezas superpuestas. Lástima, sin eso como base, el proyecto nunca comenzará.
Riccardo Zorn

reconocer una imagen fija es en realidad más difícil que tener el video que lo lleva, ya que esta última elimina el problema de tener que poder identificar las piezas.
Peter

4

Es 2019-12 ahora y 5 años después de la pregunta original.

  1. ¿Existe tal cosa (webcam / video a convertidor pgn)? ¿Un prototipo tal vez?

    ver

  2. ¿Alguien ha intentado tal hazaña y ha compartido su investigación?

    Sí, hasta ahora encontré unos 35 trabajos de investigación y unas 10 soluciones de código abierto y una oferta comercial

    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 es otro proyecto que apunta a los objetivos establecidos por usted. El proyecto se inició el 15/10/2019 y en unas pocas horas ya encontré muchos recursos, por ejemplo, esta pregunta. Dos meses después, actualicé mi respuesta (ver enlaces más arriba)

  3. ¿Existen limitaciones obvias que hacen que este proyecto sea poco probable que tenga éxito? Solo puedo responder desde mi propia experiencia con un proyecto similar que hice hace 31 años, consulte http://wiki.bitplan.com/index.php/MagneticSensorChessBoard1987 . En ese momento intenté crear un tablero de ajedrez que detectara movimientos. Usé imanes en las piezas de madera y contactos de láminas. La clave del éxito fue usar un motor de ajedrez que creara "las reglas" para poder concentrarse solo en los movimientos y no tener que detectar piezas individuales. Como se describe en una respuesta anterior, las promociones para piezas que no son de la reina podrían ser uno de los casos de uso de borde que son difíciles. Detectar el movimiento de piezas a través de diferencias de imagen es un problema bien entendido.

    Los motores de ajedrez y las GUI compatibles con UCI también están disponibles en estos días. Entonces, el problema es más un problema de integración en estos días que resolver los problemas de detalles individuales.

    Un obstáculo importante es la diferencia entre un "prototipo" y un producto. Ver, por ejemplo, http://www.nandanbanerjee.com/files/ICCVR-08AUG12-011%20paper.pdf

    un documento que es incluso más antiguo que esta pregunta pero que está lejos de ser un producto que puede comprar a un precio razonable.

  4. ¿Lo comprarías si existiera?

    Si. Cuando compré un nuevo tablero de ajedrez hace unos días, estaba buscando uno que pudiera registrar movimientos y todavía costaba alrededor de 500 EUR. Según parece, el costo del hardware será muy inferior a 150 EUR en estos días, incluido un tablero de ajedrez y piezas decentes.

    El software bien podría ser de código abierto y gratuito (como en cerveza gratis) pronto. Actualizaré esta respuesta en consecuencia.


1
Gracias, espero ver su progreso
Riccardo Zorn

3

Escribí este software. Contiene cámara web AI para reconocimiento de movimiento, conectado a Arena GUI.

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


Muy impresionante Marius, ¡felicidades! ¿Ya está disponible la prueba alfa? ¿Puede exponer los movimientos a través de un servicio, para su uso por otro software?
Riccardo Zorn

3

Trabajé en el proyecto de seguimiento de ajedrez 8x8cam dentro del curso de procesamiento de imágenes en 2013 en FING UdelaR.

Luego, en 2014, otros estudiantes crearon una mejor versión para Android llamada chesstrack . Debajo de su web puedes encontrar videos y enlaces al código que usaron.

Me encantaría ver una aplicación finalizada de esta idea de proyecto que tuve durante años. Entonces, si hay alguna noticia sobre esto, deje un comentario.

Respondiendo sus preguntas puntiagudas:

  1. ¿Existe tal cosa (webcam / video a pgn convertidor? Un prototipo tal vez?


    Además de mi proyecto 8x8cam y chesstrack , recientemente encontré un proyecto llamado ChessCam . Todos estos proyectos son de código abierto y solo deben nombrarse como recurso si crea un nuevo proyecto a partir de ellos.

  2. ¿Alguien ha intentado tal hazaña y ha compartido su investigación?


    Si. Puedes verlo en la respuesta de la pregunta anterior.

  3. ¿Existen limitaciones obvias que hacen que este proyecto sea poco probable que tenga éxito?


    Creo que la parte más difícil es hacer que el software funcione sin importar cómo se coloque la cámara e independientemente de la iluminación. Y también para trabajar en juegos de ritmo rápido y trabajar con las oclusiones de las manos cuando se juega el juego, para detectar correctamente el movimiento realizado.

  4. ¿Lo comprarías si existiera?


    Definitivamente si.


1

No responderé la pregunta, porque no sé si hay un software por ahí. Solo digo cómo creo que es cómo hacerlo, no estoy seguro, así que ...


Bien, primero debes asegurarte de que el video se grabe desde un software de ajedrez, no un torneo en vivo, solo para facilitar tu trabajo.

Necesitas convertir la película a imágenes

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

Eso fue fácil, ahora es la parte difícil, debes comenzar a hacer procesiones de imágenes, para eso, lo más poderoso es OpenCV.

Para eso, hay varias técnicas, te daré los enlaces para que puedas leerlos.

Es complicado pero más simple de lo que piensas, porque solo necesitas saber cuál es la posición inicial, recorrer todas las imágenes y ver la diferencia. Eche un vistazo a los documentos de OpenCV, encontrará toneladas de materiales sobre ese tema.


Ah, por cierto, lo que estás pidiendo ya está hecho, pero hasta donde yo sé no hay software, hay un antiguo proyecto que fue codificado con Pascal, cámaras colocadas sobre el tablero, robots que procesan imágenes y hacen un movimiento. Hoy en día muchos robots juegan al ajedrez.

Podrías comprar un Arduino uno, y su censor de luz, detectará las piezas blancas y las piezas negras, algo de codificación y jugará al ajedrez. :)


1

Editar: promocionar a algo diferente a la reina hará que todo explote. También será muy difícil soportar esto (mi programa para la Parte 2 es compatible con la promoción deficiente, pero almacenar la información de la Parte 1 simplemente leyendo píxeles es una pesadilla).

Edit2: Acabo de notar que te refieres al ajedrez de tablero real para PGN, por lo que todo esto es inútil y lo más probable es que elimine mi respuesta.

Parte 1: almacenar los cuadrados usando lectores de píxeles

Es totalmente posible, los pasos necesarios serían:

  1. cambie la configuración del tablero para que resalte el último movimiento (preferiblemente no solo el borde)
  2. escribir un programa que lea píxeles en dado (x, y)
  3. haz que lea más de 5 píxeles en cada cuadrado (por lo que es imposible que el cursor / pieza cubra todos los píxeles que se leerán)
  4. convierta el HEX a RBG, luego proporcione un rango de valores aceptados de lo que consideramos cercano al color del "último movimiento"
  5. guardar los movimientos en una matriz con un formato ["h1-h8", "e4-e5", ...] solo los cuadrados iniciales y finales (el orden no es importante )

Nota: desde aquí no podemos saber realmente desde qué cuadrado fue la posición inicial / final, pero solo hay 2 posibilidades y solo 1 de ellas es legal.

He escrito simples macros / bots basados en píxeles para los juegos de los juegos de rol en C #, puedo garantizar que esto no es que difícil, teniendo en cuenta que:

  1. la cámara es estática (para que los valores x, y no se estropeen)
  2. ya conoces el color de fondo o puedes configurarlo antes de jugar

Básicamente, es mejor si el juego se juega en línea y está grabando directamente desde la pantalla.

Lo sentimos, no hay programa disponible para la parte 1


Parte 2: exportando esa lista a PGN

Para convertir esta lista en un PGN real, puede usar un programa que escribí en JavaScript que registra movimientos, y una de las funciones moveCaller()pasa dos posiciones de cuadrados y busca final_posen los movimientos legales de initial_posy si hay una coincidencia, entonces llama makeMove(). Entonces podemos llamarlo dos veces e5 to e4y e4 to e5les garantizo que ignorará el ilegal.

  1. descargar el proyecto (enlace directo .zip )
  2. descomprimir el .zip
  3. cambie el JavaScript del index.htmlarchivo con esto:

'

$(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. copie la lista de movimientos y agregue algunos encabezados PGN encima, como [WhiteElo "2400"]etc.


-1

Uso el dispositivo de notación de ajedrez Monroi para todos mis juegos de ajedrez y es básicamente un tablero electrónico.


44
Sin embargo, eso no responde la pregunta del OP.
Dag Oskar Madsen

podrías usar un presentador digital para grabar un juego, es una cámara justo encima de la mesa. entonces podrías escribir una aplicación que rastree los objetos en una cuadrícula.
Cferrel
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.