ChessPdfBrowser

La aplicación ChessPdfBrowser nace para intentar cubrir un hueco de funcionalidad para los ajedrecistas:

la extracción de las partidas contenidas en libros de ajedrez en PDF a un formato de partidas de ajedrez estándar (.pgn) que se puede abrir con cualquier aplicación de ajedrez que se precie.

Tiene un sitio web chesspdfbrowser propio

Descripción

Con la aplicación podrás:

  • Extraer las partidas de libros en PDF.
  • Navegar por las variantes de las partidas.
  • Extraer los diagramas de un rango de páginas.
  • Reconocer posiciones (imagen -> FEN).
  • Trabajar con el formato estándar de partidas .pgn
  • Trabajar con formato .richPgn (enriquecido para añadir información para la interacción con el PDF)
  • Interacción entre el PDF y el tablero
  • Conectar con motores tipo UCI (como Stockfish)
  • Jugar partidas con tiempo

Características generales:

  • Multi-idioma
  • Multi-resolución (zoom configurable)
  • Opción de modo oscuro
  • Notificación de nueva versión
  • Manual de usuario

Descripción del código

Aplicación programada en Java, cuyas librerías están organizadas en módulos.


La extracción de partidas, su función más destacada, se basa en un parser que es una combinación de analizador léxico con un analizador sintáctico

La primera versión de este parser, permitía extraer partidas en notación algebraica en varios idiomas

A partir de la versión v1.26 también se permite la extracción de partidas en notación algebraica de figuras

Esta nueva función se programó basándose en el parser de partidas ya existente, pero añadiéndole una capa que tradujera las imágenes de las figuras a sus correspondientes iniciales, para así poder aplicar el parser de partidas existente

El traductor de imágenes a las iniciales de las figuras, se ha implementado usando el algoritmo de vecino más cercano, con K = 1

Es decir, que toma de entre los ejemplos etiquetados que tiene configurados, el más cercano en base a una medida de error.


Otra función interesante es la de reconocimiento de posiciones (añadida en la v1.20). De una imagen de un tablero, la aplicación trata de obtener la cadena FEN de la posición.

Esa función está programada haciendo uso de la teoría de un artículo de IEEE que compré para esto:

  • Con una detección de bordes, se trata de obtener la ubicación de las casillas del tablero.
  • Si hubo éxito se recorren todas las casillas, y se trata de reconocer la figura que hay en cada una de ellas o si está vacía, con el algoritmo de vecino más cercano.
  • Si hubo éxito reoconociendo todas las casillas, entonces se supone que hubo éxito reconociendo el tablero.
  • Si no hubo éxito reconociendo todas las casillas, se le muestra al usuario el tablero con las casillas reconocidas, y se le pide que lo complete, para tener más ejemplos que permitan reconocer completamente el tablero.

El reconocedor de tableros, se autoentrena cuando se extraen las partidas de un PDF, ya que hay imágenes de posiciones que sí que son conocidas, y con ellas se autoentrena para obtener ejemplos de casillas con piezas


Una función también interesante que se añadió en la v1.20, es la de extracción de metadatos de las partidas (nombres de los jugadores, ELOs, fecha, lugar, ...).

Esta función se basa en un sistema de expresiones regulares que contemplan muchos formatos de metadatos con los que me había encontrado durante las pruebas.


Y otra función que puede ser interesante también añadida en la v1.20, es la opción de conectar con motores tipo UCI (como Stockfish).

Para esta función se programó un configurador genérico de motores, que leía la configuración del motor durante la conexión y creaba un formulario para que el usuario pudiera cambiar las opciones del motor.


En la versión v1.26, se añade soporte para extraer partidas en notación algebraica de figuras.


Desde la versión v1.30, la aplicación incluye un nuevo binario que permite crear un Pdf a partir de un .pgn, con dos opciones: aplicación de interfaz gráfica, o la opción de aplicación de línea de comandos, para poder automatizar el proceso.


En la versión v1.33 se añade soporte para trabajar con Pdfs escaneados.

Pantallas

ChessPdfBrowser v1.0 (2016)

Descargar

ChessPdfBrowser v1.1 (2019)

Descargar

ChessPdfBrowser v1.11 (2019)

Descargar

ChessPdfBrowser v1.20 (2020-2023)

Ver vídeo
Descargar

ChessPdfBrowser v1.26 (2023-2024)

Ver vídeo
Descargar

ChessPdfBrowser v1.27 (2024)

Ver vídeo
Descargar

ChessPdfBrowser v1.30 (2025)

Ver vídeo
Descargar

ChessPdfBrowser v1.33 (2025)

Ver vídeo
Descargar

ChessPdfBrowser v1.36 (2026)

Descargar

Versiones

image

La Chess PDF Browser es una aplicación programada en Java que permite navegar por libros de ajedrez en formato PDF.

También permite trabajar con archivos de partidas en formato .pgn

Muestra un tablero de ajedrez donde se puede navegar por las partidas.

Permite abrir libros de ajedrez en PDF y extraer sus partidas, para poder guardarlas en formato .pgn

Permite editar las variantes de las partidas que tiene en memoria (leidas de .pgn, extraídas de un PDF o bien creadas directamente moviendo las piezas del tablero).

Existe un amplio manual donde se explica el funcionamiento de la aplicación.

image

Con la nueva versión de la aplicación, se han corregido varios errores, y se han añadido varias características:

  • Nuevo extractor de partidas experimental.
  • Se permite marcar movimientos como novedades (Novelty).
  • Se añade soporte para el idioma ruso.

Existe un amplio manual donde se explica el funcionamiento de la aplicación.

image

Con la nueva versión de la aplicación, se han actualizado los manuales de usuario.

Existe un amplio manual donde se explica el funcionamiento de la aplicación.

image

Con la nueva versión de la aplicación, se han añadido varias características:

  • Se substituye el extractor de partidas experimental por uno nuevo que tienen en cuenta los paréntesis y corchetes.
  • Se ha habilitado un mecanismo para extraer los datos de las partidas (nombres de los jugadores, ELOs, etc.)
  • Se añade la posibilidad de ver las partidas en notación algebraica de figuras.
  • Se añade un ocr para tratar de reconocer las posiciones de los tableros y añadirlas a las partidas que no partan de la posición inicial estándar.
  • Ahora se pueden jugar partidas contra otra persona o contra un motor, o poner a jugar a dos motores entre sí.

  • Se facilita la conexión con motores tipo UCI:
    • Se permite modificar la configuración de los motores (por ejemplo para disminuir el nivel, para jugar contra un nivel inferior al máximo)
    • Análisis de posiciones.
    • Análisis de partidas completas.
    • Se puede usar un motor como jugador de una partida.
  • Opción de modo oscuro

Existe un amplio manual donde se explica el funcionamiento de la aplicación.

image

La nueva versión de la aplicación aparece con la necesidad de extraer las partidas de PDFs en notación algebraica de figuras.

Lo que es nuevo en esta versión:

  • Ofrece una implementación de la extracción de partidas en notación algebraica de figuras.
  • Mejora el reconocimiento de posiciones de las imágenes con tableros (OCR)
  • Se corrigen algunos bugs.

Existe un amplio manual donde se explica el funcionamiento de la aplicación.


Puedes ver un vídeo de la nueva funcionalidad Vídeo de demostración

image

La nueva versión aporta mejoras en la detección de posiciones (imagen -> FEN)

image

Con la nueva versión se incluye un nuevo binario que permite crear Pdfs a partir de Pgns

En este enlace puedes encontrar un vídeo de demostración de la nueva funcionalidad

image

La nueva versión añade la opción de trabajar con Pdfs escaneados


Cuando implementé el código para manejar Pdfs, la opción era usar pdfbox para trabajar con los detalles de los Pdfs.

Pero no me gustaba la idea de que la lógica de negocio hiciera uso explícito de esa dependencia, por lo que decidí crear una interfaz de Pdfs que ofreciera la funcionalidad, y programar una implementación que hiciera uso de la librería de pdfbox


El inconveniente, era que para Pdfs escaneados puros (sin que alguien le hubiera añadido los textos), la librería no podía devolver los textos asociados a las páginas escaneadas.

Por lo tanto, la apliación no podía ofrecer la funcionalidad de extraer partidas de Pdfs escaneados.


Esta nueva versión ya permite tratar de extraer partidas de Pdfs escaneados.

Ello ha sido posible programando una nueva implementación de la interfaz de Pdfs, que intenta ofrecer una funcionalidad razonablemente similar a la que había con los Pdfs "normales" con la implementación existente con pdfbox

Esta nueva librería internamente hace uso de pdfbox para obtener las imágenes de las páginas escaneadas, y, para cada página, invoca a un OCR externo que está en la nube

Como trabajar así en tiempo real sería lentísimo (la invocación al OCR para cada página lleva entre 3 y 10 segundos), lo que hace la librería es invocar al OCR una sola vez para cada página (que no es poco ...)

Una vez que ha invocado al OCR, se guarda el resultado en el sistema de archivos, y las próximas veces que la aplicación las necesite, ya se recuperan de ahí


El resultado es que la nueva librería es equivalente e intercambiable con la de pdfbox pura, ofreciendo una funcionalidad equivalente para Pdfs "normales" y para Pdfs escaneados.

Aunque el inconveniente es que el reconocimiento de texto ofrecido por el OCR no es tan perfecto como el texto extraído de los Pdfs "normales"


Para la extracción de partidas, la aplicación ya ofrecía un mecanismo que permite elegir cambiar las "l" por "1", y las "S" por "5"

Para los Pdfs escaneados, además se han añadido algunas nuevas traducciones (cambian las "£" por "f") y esas traducciones son fijas, sin intervanción del usuario

Con esas transformaciones de caracteres se mejora bastante la extracción de movimientos.

El resultado de la extracción de partidas no es perfecto, pero se consigue extraer algunas secuencias de movimientos, y editando las partidas y con un poco de paciencia, se pueden reensamblar las partidas seccionadas.


En este enlace puedes encontrar un vídeo de demostración de la nueva funcionalidad

image

Esta versión de la aplicación nace con la voluntad de mejorar la aplicación para extraer lo mejor posible las partidas del Pdf de ajedrez compartido por la Comunidad de Madrid


El primer intento de extraer esas partidas fue un poco desastroso, ya que el pdf tenía características que no estaban previstas en la aplicación:

  • El pdf tiene partidas cuyos movimientos no tienen la distinción de captura explícitamente (es decir, que las capturas aparecen sin la "x". Por ejemplo: "ed4" en lugar de "exd4").
  • También hay una característica en los diagramas de finales, en los que parece que el estilo de las imágenes de las figuras es suficientemente diferente a los del resto del Pdf, que hacía que la aplicación fallara a la hora de entrenarse automáticamente, o incluso manualmente, ya que intentaba incluir todos los ejemplos etiquetados en el mismo modelo.
  • Los layouts de las páginas con diagramas no se detectaban correctamente con ninguno de los tipos de detectores de layouts que existían en la aplicación.

Teniendo en mente estos problemas, intenté encontrarles una solución:

  • Ahora la aplicación acepta los signos explícitos de captura, pero no confía ciegamente en ellos. También permite la ausencia de esos signos, y es durante la determinación de las casillas origen y destino del movimiento cuando se termina de conocer si un movimiento es de captura o no, escribiéndolo de manera adecuada en el .pgn guardado.
  • También se ha añadido la opción de gestionar más detalles de los modelos del reconocedor de posiciones, permitiendo elegir uno concreto o crear uno nuevo para entrenar manualmente al reconocedor con una posición en la que falló el reconocimiento. Además, ahora es posible borrar modelos o configurar más detalles de ellos mediante una nueva ventana para gestionarlos.
  • Se añaden dos nuevos tipos de detectores de layout, creados especialmente para la extracción de diagramas.

Con la intención de depurar la extracción de partidas del Pdf, encontré algunos errores que se habían introducido en algún momento con los últimos cambios realizados en la aplicación.

(Lo siento, la aplicación no tiene tests unitarios, y no sencillo del todo detectar cuando se estropea alguna característica que funcionaba con anterioridad)


Los errores corregidos tienen que ver con la detección de posiciones (se había estropeado el reconocimiento automático de posiciones).

También se arregla un problema relacionado con la detección de (N) Novelties y otros varios problemas para mejorar el funcionamiento de algunos otros detalles.

Además, ahora se ha intentado mejorar la identificación de imágenes con posiciones de ajedrez para detectores de layout que no eran tipo GROWTH, ni OCR, equiparando la identificación de imágenes de posiciones con la de esos dos detectores de layout.


Mi opinión es que esta última es la versión de la aplicación más fina hasta el momento.

Vídeos

Descargas