Ferramentas para notação automatizada: filme na webcam para PGN

14

Às vezes, durante jogos de blitz no tabuleiro, ou quando no zeitnot, fica muito difícil anotá-los.

Eu já vi vários softwares / hardwares para ajudar a escrever a notação, mesmo que seja aprovada pela FIDE ; isso exige que você repita os movimentos no dispositivo. Dificilmente mais rápido que a caneta e o papel, tão propenso a erros, quanto mais você corre o risco de digitar o movimento errado e perder ainda mais tempo.

A DGT cria um tabuleiro que fará isso automaticamente, mas ele só funciona com suas peças, e começa a partir de 400 €, o dobro dos tabuleiros de torneios . Alguns projetos independentes estão disponíveis, como o tabuleiro de xadrez usb 101 ou robôs de xadrez controlados por voz , sequenciador de passos do tabuleiro de xadrez . Além disso , estão disponíveis alguns projetos abertos que movem peças (ou peças gigantes ).

Hoje tenho um playoff e as regras do torneio determinam jogos cada vez mais curtos até que haja um vencedor. Por isso, pensei em gravar um filme do tabuleiro, se perdermos a noção. Mas então minha formação em programação entrou em cena e pensei "deve haver algum software que possa processar um filme e escrever o PGN".

Eu procurei em todos os lugares e não encontrei nada.

  1. Existe algo assim (webcam / vídeo para conversor pgn)? Um protótipo, talvez?
  2. Alguém tentou tal feito e compartilhou sua pesquisa?
  3. Existem limitações óbvias que tornam improvável que esse projeto seja bem-sucedido?
  4. Você compraria se existisse?
Riccardo Zorn
fonte
2
seria um projeto interessante de visão computacional / aprendizado de máquina!
Memming
Eu acho que o quadro precisa ser filmado de cima para baixo para produzir uma imagem "2D". Caso contrário, há um problema adicional de transpor uma visualização 3D para uma visualização 2D e diferentes ângulos 3D devem ser tratados separadamente.
Rauan Sagit
na verdade, é simplesmente uma transformação linear para "esticar" o tabuleiro e deixar todos os seus quadrados quadrados. o principal problema é reconhecer o quadrado do qual a peça é movida se o ângulo for tal que as peças possam se alinhar atrás uma da outra.
peter
Talvez possamos fazer algum tipo de crowdsourcing para este projeto. Eu acho muito interessante. Aposto que alguns estudantes universitários poderiam fazer isso em projetos seniores. Precisamos encontrar uma maneira de comunicar a ideia aos professores. Talvez com duas câmeras colocadas em dois locais diferentes, isso possa ser feito com segurança. Eu estaria interessado na abordagem 3D, não 2D por cima. Montar uma câmera aérea é muito impraticável. Eu também estaria interessado em software que levaria entradas de algumas câmeras diferentes que disparam vários jogos em simultâneo jogado em uma mesa longa e notação de produtos - para
Dado que kickstarter.com/projects/infivention/… já teve sucesso, um projeto de crowdfunding parece realmente viável. Especialmente porque o custo para os usuários finais seria muito baixo.
Wolfgang Fahl

Respostas:

4

É claramente interessante e relevante registrar automaticamente jogos de xadrez (os tabuleiros ao vivo estão mais ou menos enfrentando o mesmo problema). Até onde eu sei, não existe software para esse fim que exista hoje. Para resolver esse problema, acho que o caso "simples" deve ser o seguinte.

  1. O tabuleiro de xadrez deve ser filmado de cima para baixo para obter uma visão bidimensional. (Motivação: filmar em uma vista tridimensional causaria problemas devido a uma vista distorcida e peças que bloqueariam a vista de outras peças atrás delas. Além disso, são possíveis diferentes vistas em 3D que contrariam um procedimento limpo.)
  2. O filme deve ser editado manualmente para capturar momentos de "quadro limpo" e remover momentos em que as mãos ou cabeças dos dois jogadores estão bloqueando a exibição.
  3. O algoritmo de processamento de imagem no lado do software deve detectar alterações no quadro e registrá-las como movimentos. Também deve girar e transformar automaticamente a imagem para detectar a orientação da placa e, assim, as coordenadas.
  4. O software deve usar a posição inicial para "memorizar" cada tipo de peça e depois usá-las para o reconhecimento de imagens durante o jogo. Provavelmente, alguns truques inteligentes podem ser escritos para resolver o problema do reconhecimento de peças de maneira inteligente.

Uma pesquisa rápida no Google com a string de pesquisa

processamento de imagem de jogo de xadrez

retornou este artigo interessante

Em suma, deve ser realista implementar esse tipo de software. No entanto, pode ser mais barato para um ser humano fazer o mesmo trabalho (a transferência é transferida de um videoclipe para um computador).

Rauan Sagit
fonte
Levei um tempo para estudar o GDIlleperuma que você vinculou, é o mais interessante. Mas exclui, a priori, a possibilidade de elaborar imagens distorcidas em 3D. Obrigado, um artigo muito interessante.
Riccardo Zorn
@RiccardoZorn você é bem-vindo! Devo admitir que não vejo o ponto de lidar com imagens distorcidas em 3D. A situação é que, se um humano tiver problemas para documentar os movimentos de uma gravação de vídeo, um software de processamento de imagem terá ainda mais dificuldade.
Rauan Sagit 16/02
A configuração de uma câmera vertical requer muito espaço, é invasiva e você precisa de um suporte / suporte personalizado. Isso torna impraticável :-(
Riccardo Zorn
Uma tecnologia "live board" mais simples e barata pode ser o melhor caminho a seguir nesse caso. Opcionalmente, filme a partir de um ângulo 3D razoável e permita que um ser humano extraia a notação de xadrez da gravação de vídeo.
Rauan Sagit 16/02
o arquivo researchgate.net/publication/… parece não existir mais. alguém tem uma cópia?
Peter
6

Em ordem,

1) Não é do meu conhecimento

2) Não é do meu conhecimento

3) Existem várias coisas que tornam esse tipo de projeto não trivial e até difícil. Não menos importante é seguir a peça, diferenciando-a de um gesto com a mão, por exemplo. Também determinar quando a mudança foi interrompida seria uma questão interessante para a visão computacional resolver. Esses tipos de problemas foram resolvidos em outras situações, mas não com 100% de precisão, e certamente não a preços que estão perto de serem competitivos com o conselho da DGT.

Depois, há a questão de onde a câmera pode ser posicionada. A sobrecarga direta ofereceria a melhor visualização do quadro, facilitando a determinação do quadrado com precisão. Mas onde quer que a câmera seja colocada, há uma probabilidade distinta de que sua visão seja obstruída por um dos jogadores, inclinando-se sobre o tabuleiro, alcançando o relógio ou simplesmente gesticulando.

4) Não, a menos que fosse muito barato. E não espero que seja. Meu raciocínio é simples. À medida que os controles do tempo diminuem, a qualidade do jogo diminui, a ponto de não ser mais interessante para mim

Arlen
fonte
Você faz um ótimo ponto em 4: a qualidade é realmente ruim. Não vale o trabalho de montar uma câmera, muito menos gastar um mês para escrever o software. Acabei de vencer o playoff, mas tenho vergonha de como joguei mal.
Riccardo Zorn
5

Essa seria uma tarefa bastante complexa. Talvez um primeiro passo razoável seja procurar reconhecer a posição FEN a partir de uma única imagem - para a qual existem mais recursos, por exemplo:

Tihomir Georgiev
fonte
Excelente obrigado. Eu li os dois e eles são realmente interessantes. O Chessgrabber é um projeto recente e definitivamente mais adequado, entrei em contato com o desenvolvedor.
Riccardo Zorn
Eu acho que, desde o primeiro passo, não seria muito difícil converter um vídeo para PGN - tire fotos a cada poucos milissegundos, analise-as e, se a posição tiver mudado de maneira legal, adicione a nova posição ao arquivo.
Rlms
Atualização: o desenvolvedor respondeu, nunca funcionará para imagens inclinadas em 3-D com partes sobrepostas. Pena que, sem isso como base, o projeto nunca será iniciado.
Riccardo Zorn
reconhecer uma imagem estática é realmente mais difícil do que ter o vídeo anterior, uma vez que esta elimina o problema de ser capaz de identificar as peças.
peter
4

É 2019-12 agora e 5 anos após a pergunta original.

  1. Existe algo assim (webcam / vídeo para conversor pgn)? Um protótipo, talvez?

    Vejo

  2. Alguém tentou tal feito e compartilhou sua pesquisa?

    Sim - até agora encontrei 35 documentos de pesquisa e 10 soluções de código aberto e uma 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 é outro projeto que visa as metas estabelecidas por você. O projeto foi iniciado em 2019-10-15 e em poucas horas eu já encontrei muitos recursos, por exemplo, esta pergunta Alguns meses depois, atualizei minha resposta (veja os links acima)

  3. Existem limitações óbvias que dificultam a execução desse projeto? Só posso responder de minha própria experiência com um projeto semelhante que fiz 31 anos atrás, http://wiki.bitplan.com/index.php/MagneticSensorChessBoard1987 . Naquela época, tentei criar um tabuleiro de xadrez que detectasse movimentos. Usei ímãs nas peças de madeira e contatos de palheta. A chave para o sucesso era usar um mecanismo de xadrez com novas "regras" para poder se concentrar apenas nos movimentos e não ter que detectar peças individuais. Conforme descrito em uma resposta acima, promoções para peças que não sejam dama podem ser um dos casos de ponta que são difíceis. Detectar o movimento das peças através das diferenças de imagem é um problema bem compreendido.

    Os mecanismos de xadrez e as GUIs compatíveis com UCI também estão disponíveis atualmente. Portanto, hoje em dia, o problema é mais um problema de integração do que resolver os problemas de detalhes individuais.

    Um grande obstáculo é a diferença entre um "protótipo" e um produto. Veja, por exemplo, http://www.nandanbanerjee.com/files/ICCVR-08AUG12-011%20paper.pdf

    um artigo ainda mais antigo que essa pergunta, mas longe de ser um produto que você possa comprar a um preço razoável.

  4. Você compraria se existisse?

    Sim. Quando comprei um novo tabuleiro de xadrez, há alguns dias, estava procurando por um que pudesse registrar jogadas e ele ainda estivesse em torno de 500 euros. Parece que o custo do hardware estará bem abaixo de 150 euros atualmente, incluindo um tabuleiro de xadrez decente e peças.

    O software pode muito bem ser de código aberto e gratuito (como em cerveja grátis) em breve. Vou atualizar esta resposta de acordo.

Wolfgang Fahl
fonte
1
Obrigado, eu estou ansioso para ver o seu progresso
Riccardo Zorn
3

Eu escrevi este software. Ele contém a AI da webcam para reconhecimento de movimento, conectada à Arena GUI.

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

Marius
fonte
Marius muito impressionante, parabéns! O alfa já está disponível para teste? Você pode expor as mudanças por meio de um serviço, para uso em outro software?
Riccardo Zorn
3

Trabalhei no projeto de rastreamento de xadrez 8x8cam no curso de processamento de imagens em 2013 na FING UdelaR.

Então, em 2014, outros alunos criaram uma versão melhor para o Android chamada chesstrack . Na web, você encontra vídeos e links para o código que eles usaram.

Eu adoraria ver um aplicativo finalizado dessa ideia de projeto que tive durante anos. Portanto, se houver alguma notícia sobre isso, deixe um comentário.

Respondendo às suas perguntas pontuais:

  1. Existe alguma coisa assim (webcam / vídeo para conversor pgn? Um protótipo, talvez?


    Além do meu projeto 8x8cam e chesstrack , encontrei recentemente um projeto chamado ChessCam . Todos esses projetos são de código aberto e só precisam ser nomeados como recurso se você criar um novo projeto a partir deles.

  2. Alguém tentou tal feito e compartilhou sua pesquisa?


    Sim. Você pode ver isso na resposta da pergunta anterior.

  3. Existem limitações óbvias que tornam improvável que esse projeto seja bem-sucedido?


    A parte mais difícil, acredito, é fazer com que o software funcione, independentemente da posição da câmera e independentemente da iluminação. E também para trabalhar em jogos rápidos e trabalhar com as oclusões das mãos quando o jogo está sendo jogado, a fim de detectar corretamente o movimento realizado.

  4. Você compraria se existisse?


    Definitivamente sim.

Cedric Zoppolo
fonte
1

Não responderei à pergunta, porque não sei se existe algum software por aí. Só estou dizendo como acho que é assim, não sei ao certo, então ...


Ok, primeiro você precisa garantir que o vídeo seja gravado em um software de xadrez, não em um torneio ao vivo, apenas para facilitar seu trabalho.

Você precisa converter o filme em imagens

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

Isso foi fácil, agora a parte difícil, você precisa começar a processar imagens, para isso, o mais poderoso é o OpenCV.

Para isso, existem várias técnicas, darei os links para que você possa lê-los.

É complicado, mas mais simples do que você pensa, porque você só precisa saber qual é a posição inicial, percorrer todas as imagens e ver a diferença. Dê uma olhada nos documentos do OpenCV e você encontrará toneladas de materiais sobre esse assunto.


Ah, a propósito, o que você está pedindo já está feito, mas não usando software, até onde eu sei, há um projeto antigo que foi codificado usando Pascal, câmeras colocadas sobre a mesa, robôs executam o processamento de imagens e agem. Atualmente, muitos robôs jogam xadrez.

Você pode comprar um Arduino uno e seu censor de luz, ele detectará as peças brancas e as pretas, algumas codificadas e jogará xadrez. :)

Lynob
fonte
1

Edit: promover a algo diferente de rainha fará tudo explodir. Também será muito difícil apoiar isso (meu programa para a Parte 2 suporta subpromoção, mas armazenar as informações da Parte 1 apenas pela leitura de pixels é um pesadelo).

Edit2: Acabei de perceber que você quer dizer xadrez de tabuleiro real para o PGN, então tudo isso é inútil e provavelmente vou excluir minha resposta.

Parte 1: armazenando os quadrados usando leitores de pixel

É totalmente possível, as etapas necessárias seriam:

  1. altere a configuração do quadro para destacar o último movimento (de preferência não apenas a borda)
  2. escreva um programa que leia pixels em determinado (x, y)
  3. faça ler mais de 5 pixels em cada quadrado (para que o cursor / peça não cubra todos os pixels a serem lidos)
  4. converta o HEX em RBG e, em seguida, forneça uma gama de valores aceitos que consideramos próximos da cor do "último movimento"
  5. salve os movimentos em uma matriz com um formato ["h1-h8", "e4-e5", ...] apenas os quadrados inicial e final (ordem sem importância )

Nota: a partir daqui, não podemos realmente saber de qual quadrado era a posição inicial / final, mas existem apenas 2 possibilidades e apenas 1 delas é legal.

Eu escrevi simples baseadas em pixel macros / bots para jogos de RPGs em C #, posso garantir isso não é que difícil, dado que:

  1. a câmera é estática (para que os valores x, y não fiquem confusos)
  2. você já conhece a cor de fundo ou pode configurá-la antes de reproduzir

Basicamente, é melhor se o jogo for jogado online e você estiver gravando diretamente na tela.

Desculpe, nenhum programa disponível para a parte # 1


Parte 2: exportando essa lista para PGN

Para transformar essa lista em um PGN real, você pode usar um programa que escrevi em JavaScript que registra movimentos, e uma das funções em que moveCaller()você passa por duas posições de quadrados e pesquisa final_posnos movimentos legais de initial_pose, se houver uma correspondência, ele chama makeMove(). Então, podemos chamá-lo duas vezes e5 to e4e e4 to e5garanto que ele ignorará o ilegal.

  1. faça o download do projeto (link direto .zip )
  2. descompacte o .zip
  3. altere o JavaScript do index.htmlarquivo com este:

"

$(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 a lista de movimentação e adicione alguns cabeçalhos PGN acima, como [WhiteElo "2400"]etc.

ajax333221
fonte
-1

Eu uso o Monroi Chess Notation Device para todos os meus jogos de xadrez e é basicamente um tabuleiro eletrônico.

Cferrel
fonte
4
Mas isso não responde à pergunta do OP.
Dag Oskar Madsen
você pode usar um apresentador digital para gravar um jogo, uma câmera logo acima da mesa. então você pode simplesmente escrever um aplicativo rastreando os objetos em uma grade.
Cferrel 23/02