ChessPdfBrowser

L'aplicació ChessPdfBrowser naix per a intentar cobrir un buit de funcionalitat per als jugadors d'escacs:

l'extracció de les partides presents a llibres d'escacs en PDF a un format de partides d'escacs estàndar (.pgn) que es pot obrir amb qualsevol aplicació d'escacs que es preui.

Té un lloc web chesspdfbrowser propi

Descripció

Amb l'aplicació podràs:

  • Extreure les partides de llibres en PDF.
  • Navegar per les variants de les partides.
  • Extraure els diagrames d'un conjunt de pàgines.
  • Reconèixer posicions (imatge -> FEN).
  • Treballar amb el format estàndar de partides .pgn
  • Treballar amb format .richPgn (enriquit per a afegir informació per a la interacció amb el PDF)
  • Interacció entre el PDF y el taulell
  • Conectar amb motors tipus UCI (com Stockfish)
  • Jugar partides amb temps

Características generales:

  • Multi-idioma
  • Multi-resolució (zoom configurable)
  • Opció de mode fosc
  • Notificació de nova versió
  • Manual d'usuari

Descripció del codi

Aplicació programada en Java, amb les llibreries organitzades en mòduls.


L'extracció de partides, la seva funció més destacada, es basa en un extractor que és una combinació d'analitzador lèxic amb un analitzador sintàctic

La primera versió d'aquest analitzador, permetia extraure partides en notació algebraica en diferents idiomes

Des de la versió v1.26 també es pot extreure partides en notació algebraica de figures

Aquesta nova funció es va programar basant-se en l'extractor de partidas ja existent, però afegint-li una capa que traduís les imatges de les figures les seves pròpies inicials, per a així poder aplicar l'extractor de partides ja existent

El traductor d'imatges a les inicials de les figures, s'ha implementat fent ús de l'algoritme de vei més proper, amb K = 1

És a dir, que pren de entre els exemples etiquetats de que disposa, el més proper en base a una mesura d'error.


Una altra funció interessant es la de reconeixement de posicions (afegida a la v1.20). D'una imatge d'un taulell, l'aplicació tracta d'obtenir la cadena FEN de la posició.

Aquesta funció està programada fent ús de la teoria d'un article d'IEEE que vaig comprar per a això:

  • Amb una detecció de vores, es tracta d'obtenir la ubicació de les caselles del taulell.
  • Si fou èxit, llavores es recorren totes les caselles, i es tracta de reconèixer la figura que hi ha a cada una d'elles o si està buida, amb l'algoritme de veí més proper.
  • Si fou èxit reconeixent totes les caselles, llavors es presuposa que el reconeixement del taulell fou un èxit.
  • Si no fou èxit el reconeixement de totes les caselles, l'aplicació mostra a l'usuari el taulell amb les caselles reconegudes, i se li demana que el completi, per a obtenir més exemples que li permetin el reconexement complert del taulell.

El reconeixedor de taulells, s'autoentrena quan s'extrauen les partides d'un PDF, ja que hi ha imatges de posicions que sí que son conegudes, i s'autoentrena amg elles per a obtenir exemples de caselles amb peces


Una funció també interessant que se es va afegir a la v1.20, és la d'extracció de metadades de les partides (noms dels jugadors, ELOs, data, lloc, ...).

Aquesta funció es basa en un sistema d'expressions regulars que contemplen molts formats de metadades amb els que m'he trobat durant les proves.


I una altra funció que pot ser interessant també afegida a la v1.20, és l'opció de connectar amb motors tipus UCI (com Stockfish).

Per a aquesta funció es va programar un configurador genèric de motors, que llegeix la configuració del motor durant la connexió i crea un formulari per a que l'usuari pugui modificar les opcions del motor.


A la versió v1.26, s'afegeix suport per a extreure partides en notació algebràica de figures.


Des de la versió v1.30, l'aplicació inclou un nou binari que permet crear un Pdf a partir d'un .pgn, amb dues opcions: aplicació d'interfície gràfica, o l'opció d'aplicació de línia de comandes, per a poder automatizar el procés.


A la versió v1.33 s'afegeix suport per a treballar amb Pdfs escanejats.

Pantalles

ChessPdfBrowser v1.0 (2016)

Descarregar

ChessPdfBrowser v1.1 (2019)

Descarregar

ChessPdfBrowser v1.11 (2019)

Descarregar

ChessPdfBrowser v1.20 (2020-2023)

Veure video
Descarregar

ChessPdfBrowser v1.26 (2023-2024)

Veure video
Descarregar

ChessPdfBrowser v1.27 (2024)

Veure video
Descarregar

ChessPdfBrowser v1.30 (2025)

Veure video
Descarregar

ChessPdfBrowser v1.33 (2025)

Veure video
Descarregar

ChessPdfBrowser v1.36 (2026)

Descarregar

Versions

image

La Chess PDF Browser és una aplicació programada en Java que permet navegar per llibres d'escacs en format PDF.

També permet treballar amb arxius de partides en format .pgn.

Mostra un taulell d'escacs on es pot navegar per les partides.

Permet obrir llibres d'escacs en PDF i extreure les seves partides, per a poder guardar-les en format .pgn

També es poden editar les variant de les partides que té a la memòria (bé llegides de .pgn, extretes d'un PDF, o bé creades directament movent les peces del taulell.

Hi ha un ampli manual on s'explica el funcionament de l'aplicació.

image

Amb la nova vesrió de l'aplicació, s'han corregit diversos errors, i s'han afegit algunes noves característiques:

  • Nou extractor de partides experimental.
  • Ara es poden marcar moviments com a novetats (Novelty).
  • S'afegeix suport per a l'idioma rus.

Hi ha ampli manual on s'explica el funcionament de l'aplicació.

image

Amb la nova vesrió de l'aplicació, s'han actualitzat els manuals d'usuari.

Hi ha ampli manual on s'explica el funcionament de l'aplicació.

image

Amb la nova versió de l'aplicació s'han afegit vàries noves característiques:

  • Es canvia l'extractor experimental de partides per un nou que té en compte els parèntesi y corxets.
  • S'ha habilitat un mecanisme per a extreure les dades de les partides (noms dels jugadors, ELOs, etc.)
  • S'afegeix la possibilitat de veure les partides en notació algebràica de figures.
  • S'afageix un ocr per a tractar de reconèixer les posicions dels taulells.
  • Ahora se pueden jugar partidas contra otra persona o contra un motor, o poner a jugar a dos motores entre sí.

  • Es pot connectar amb motors de tipus UCI:
    • És possible cnaviar la configuració dels motors (per exemple, per a disminuir el nivell, per a jugar contra un nivell inferior al màxim.)
    • Anàlisi de posicions.
    • Anàlisi de partides complertes.
    • Es pot fer servir un motor com a jugador d'una partida.
  • Opció de mode obscur

Hi ha ampli manual on s'explica el funcionament de l'aplicació.

image

La nova versió de l'aplicació apareix amb la necessitat d'extreure de partides de PDFs en notació algebraica de figures.

El que és nou en aquesta versió:

  • Ofereix una implementació de l'extracció de partides en notació algebraica de figures.
  • Millora el reconeixement de posicions de les imatges amb taulells (OCR)
  • Es corregeixen alguns bugs.

Hi ha ampli manual on s'explica el funcionament de l'aplicació.


Pots veure un video de la nova funcionalitat Video de demostració

image

La nova versió aporta millores a la detecció de posicions (imatge -> FEN)

image

Amb la nova versió s'inclou un nou binari que permet crear Pdfs a partir de Pgns

A aquest enllaç pots trobar un video de demostració de la nova funcionalitat

image

La nova versió afegeix l'opció de treballar amb Pdfs escanejats


Quan vaig programar el codi per a tractar amb Pdfs, l'opció era utilitzar pdfbox per a treballar amb els detalls dels Pdfs.

Però no m'agradaba la idea de que la lògica de negoci fes ús explícit d'aquesta dependència, pel que vaig decidir de crear una interfície de Pdfs que oferís la funcionalitat, i programar una implementació que fes ús de la llibreria de pdfbox


L'inconvenient, era que per a Pdfs escanejats purs (sense que ningú li haguès afegit els texts), la llibreria no podia tornar els texts associats a les pàgines escanejades.

Per tant, l'apliació no podia oferir la funcionalitat d'extreure partides de Pdfs escanejats.


Aquesta nova versió ja permet intentar extreuer partides de Pdfs escanejats.

Això ha sigut possible programant una nova implementació de la interfície de Pdfs, que intenta oferir una funcionalitat raonablement similar a la que hi havia amb els Pdfs "normals" amb la implementació existent amb pdfbox

Aquesta nova llibreria internament fa ús de pdfbox per a obtenir les imatges de les pàgines escanejades, i, per a cada pàgina, invoca a un OCR extern que està al núvol

Com treballar aixì en temps real seria lentíssim (la invocació a l'OCR per a cada pàgina porta entre 3 y 10 segons), el que fa la llibreria és invocar a l'OCR una sola vegada per a cada pàgina (que no és poc ...)

Un cop que s'ha invocat a l'OCR, es guarda el resultat al sistema d'arxius, i les properes vegades que l'aplicació les necessiti, ja es recuperen d'allà


El resultat és que la nova llibreria és equivalent i intercambiable amb la de pdfbox pura, oferint una funcionalitat equivalent per a Pdfs "normals" y per a Pdfs escanejats.

Però passa que el reconeixement de text oferit per l'OCR no és tan perfecte como el text extret dels Pdfs "normals"


Per a l'extracció de partides, l'aplicació ja oferia un mecanisme que permetia escollir canviar les "l" per "1", y les "S" per "5"

Per als Pdfs escanejats, a més s'han afegit algunes noves traduccions (canvien les "£" per "f") i aquestes traduccions són fixes, sense intervenció de l'usuari.

Amb aquestes transformacions de caracters es millora bastant l'extracció de moviments.

El resultat de l'extracció de partides no és perfecte, però s'aconsegueix extreure algunes seqüències de moviments, i editant les partides i amb una mica de paciència, es poden reensamblar les partides seccionades.


A aquest enllaç pots trobar un video de demostració de la nova funcionalitat

image

Aquesta versió de l'aplicació neix amb la voluntat de millorar l'aplicació per a extreure el millor possible les partides del Pdf d'escacs compartit per la Comunitat de Madrid


El primer intent d'extreure aquestes partides va ser una mica desastre, ja que el pdf tenia característiques que no estaven previstes a l'aplicació:

  • El pdf té partides amb moviments que no tenen la distinció de captura explícitament (és a dir, que les captures apareixen sense la "x". Per example: "ed4" enllloc de "exd4").
  • També hi ha una característica als digrames de finals, als que sembla que l'estil de les imatges de les figures és suficientment diferent als de la resta del Pdf, que feia que l'aplicació fallés a l'hora d'entrenar-se automàticament, o inclús intentant entrenar-lo manualment, ja que intentava incloure tots els exemples etiquetats al mateix model.
  • Els laoyuts de les pàgines amb diagrames no es detectaven correctament amb cap dels tipus de detectors de layouts existents a l'aplicació.

Tenint en ment aquests problemes, vaig intentar trobar-lis una solució:

  • Ara l'aplicació accepta els signes explícits de captura, però no confia cegament en ells. També es permet l'ausència d'aquests signes, i és durant la determinació de les caselles origen idestí del moviment quan s'acaba de saber si un moviment és de captura o no, escribint-lo de manera adequada al .pgn guardat.
  • També s'ha afegit l'opció de gestionar més detalls dels models del reconeixedor de posicions, permetent escollir un concret o crear un de nou per a entrenar manualment el reconeixedor amb una posició a la que va fallar el reconeixement. A més, ara és possible esborrar models o configurar més detalls d'ells a través d'una nova finestra per a gestionar-los.
  • S'afegeixen dos nous tipus de detectors de layout, creats especialment per a l'extracció de diagrames.

Amb la intenció de depurar l'extracció de partides del Pdf, vaig trobar alguns errors que havia fet en algun moment amb els últims canvis fets a l'aplicació.

(Ho sento, l'aplicació no té tests unitaris, i en aquestes condicions no és senzill del tot detectar quan es fa malbé alguna característica que funcionava anteriorment)


Els errors corregits tenen a veure amb la detecció de posicions (s'havia fet malbé el reconeixement automàtic de posicions).

També s'arregla un problema relacionat amb la detecció de (N) Novelties i d'altres diferents problemes per a millorar el funcionament d'altres detalls.

A més, ara s'ha intentat millorar la identificació de possibles imatges de posicions d'escacs per a detectors de layout que no eren de tipus GROWTN, ni OCR, igualant l'identificació de possibles imatges de posicions dels altres detectors de layout amb la d'aquestos.


La meva opinió és que aquesta última és la versió de l'aplicació més fina fins el moment.

Videos

Descargas