Narzędzia do automatycznego zapisu: film z kamery do PGN


14

Czasami w trakcie błyskawicznych gier planszowych lub w zeitnot bardzo trudno jest je zanotować.

Widziałem kilka programów / sprzętu, które pomagają w pisaniu notacji, nawet takie, które są zatwierdzone przez FIDE ; wymagają one powtórzenia ruchów na urządzeniu. Nie szybsze niż papier i długopis, tak samo podatne na błędy, a dodatkowo ryzykujesz wpisanie niewłaściwego ruchu i marnowanie jeszcze więcej czasu.

DGT tworzy planszę , która zrobi to automatycznie, ale będzie działać tylko z jej pionkami i zaczyna od 400 €, dwukrotnie więcej niż w przypadku plansz turniejowych . Niektóre niezależne projekty są dostępne, takie jak USB szachownicy 101 lub głosowych kontrolowane szachowych robotów , Chess kroku deska sekwencera . Dodatkowo dostępne są niektóre otwarte projekty, które nawet przenoszą pionki (lub gigantyczne pionki ).

Dzisiaj wieczorem mam play-off, a zasady turnieju określają coraz krótsze mecze, dopóki nie zostanie zwycięzca. Dlatego pomyślałem o kręceniu filmu z planszy, gdybyśmy stracili trop. Ale potem zaczęło się moje programowanie i pomyślałem: „musi być jakieś oprogramowanie, które może przetworzyć film i napisać PGN”.

Szukałem wszędzie i nic nie znalazłem.

  1. Czy istnieje coś takiego (konwerter kamery / wideo na PNG)? Może prototyp?
  2. Czy ktoś próbował takiego wyczynu i podzielił się swoimi badaniami?
  3. Czy istnieją oczywiste ograniczenia, które uniemożliwiają powodzenie tego projektu?
  4. Czy kupiłbyś go, gdyby istniał?

2
byłby to interesujący projekt w zakresie wizji komputerowej / uczenia maszynowego!
Memming

Myślę, że planszę trzeba sfilmować z góry na dół, aby uzyskać obraz „2D”. W przeciwnym razie istnieje dodatkowy problem z przeniesieniem widoku 3D na widok 2D i różne kąty 3D muszą być traktowane osobno.
Rauan Sagit

w rzeczywistości jest to po prostu liniowa transformacja polegająca na „rozciąganiu” planszy i wyrównaniu wszystkich jej kwadratów. głównym problemem jest rozpoznanie kwadratu, z którego element jest przesuwany, jeśli kąt jest taki, że elementy mogą ustawiać się jeden za drugim.
Piotr

Może moglibyśmy zrobić coś w rodzaju crowdsourcingu dla tego projektu. Myślę, że to bardzo interesujące. Założę się, że niektórzy studenci mogą to zrobić dla starszych projektów. Musimy znaleźć sposób na przekazanie pomysłu profesorom. Może przy dwóch kamerach umieszczonych w dwóch różnych lokalizacjach można to zrobić niezawodnie. Byłbym zainteresowany podejściem 3D, a nie 2D z góry. Montaż górnej kamery jest zbyt niepraktyczny. Chciałbym być także zainteresowany oprogramowaniem, które zajęłoby wejść z kilku różnych kamer strzelanie kilka gier jednocześnie grał na długim stole i notacji produktu - dla

Biorąc pod uwagę, że kickstarter.com/projects/infivention/… był już udany, projekt finansowania społecznościowego wydaje się rzeczywiście wykonalny. Zwłaszcza, że ​​koszt dla użytkowników końcowych byłby bardzo niski.
Wolfgang Fahl

Odpowiedzi:


4

Wyraźnie interesujące i istotne jest automatyczne zapisywanie szachów (tablice na żywo w mniejszym lub większym stopniu rozwiązują ten sam problem). O ile mi wiadomo, obecnie nie istnieje oprogramowanie do tego celu. Aby rozwiązać ten problem, uważam, że „prosty” przypadek powinien wyglądać następująco.

  1. Szachownica powinna być filmowana z góry na dół, aby uzyskać dwuwymiarowy widok. (Motywacja: filmowanie w widoku trójwymiarowym spowodowałoby problemy z powodu przekrzywionego widoku i elementów, które będą blokować widok dla innych elementów za nimi. Możliwe są również różne widoki 3D, które przeciwdziałałyby czystej procedurze.)
  2. Film należy ręcznie edytować, aby uchwycić momenty „czystej planszy” i usunąć momenty, w których dłonie lub głowy dwóch graczy blokują widok.
  3. Algorytm przetwarzania obrazu po stronie oprogramowania powinien wykrywać zmiany na płycie i rejestrować je jako ruchy. Powinien także automatycznie obracać i przekształcać obraz, aby wykryć orientację płytki, a tym samym współrzędne.
  4. Oprogramowanie powinno użyć pozycji początkowej do „zapamiętania” każdego rodzaju elementu, a następnie użyć ich do rozpoznania obrazu podczas gry. Prawdopodobnie można napisać kilka sprytnych sztuczek, aby w inteligentny sposób rozwiązać problem rozpoznawania elementów.

Szybkie wyszukiwanie w Google za pomocą ciągu wyszukiwania

przetwarzanie obrazów w szachach

zwrócił ten interesujący artykuł

Reasumując, oprogramowanie tego typu powinno być realistyczne. Jednak wykonywanie tej samej pracy przez człowieka może być tańsze (przenoszenie ruchów z klipu wideo do komputera).


Zajęło mi trochę czasu, aby przejść przez badanie GDIlleperuma, które połączyłeś, jest to najbardziej interesujące. Wyklucza to jednak a priori możliwość opracowania przekrzywionych obrazów 3D. Dziękuję bardzo ciekawy artykuł.
Riccardo Zorn,

@RiccardoZorn nie ma za co! Muszę przyznać, że nie widzę sensu obsługi przekrzywionych obrazów 3D. Sytuacja jest taka, że ​​jeśli człowiek ma problemy z dokumentowaniem ruchów z nagrania wideo, oprogramowanie do przetwarzania obrazu będzie miało jeszcze większe trudności.
Rauan Sagit

Ustawienie pionowej kamery wymaga dużo miejsca, jest inwazyjne i potrzebujesz niestandardowego wsparcia / stojaka. To sprawia, że ​​jest to niepraktyczne :-(
Riccardo Zorn

W takim przypadku lepszym rozwiązaniem może być prostsza i tania technologia „live board”. Opcjonalnie można filmować z rozsądnego kąta 3D i pozwolić człowiekowi wyodrębnić zapis szachowy z nagrania wideo.
Rauan Sagit

plik researchgate.net/publication/… już nie istnieje. czy ktoś ma kopię?
Piotr

6

W celu,

1) Nie według mojej wiedzy

2) Nie według mojej wiedzy

3) Jest kilka rzeczy, które sprawiają, że tego rodzaju projekt nie jest trywialny, a nawet trudny. Nie mniej ważne jest śledzenie utworu, na przykład odróżnienie go od gestu ręki. Określenie, kiedy ruch został zatrzymany, byłoby ciekawym pytaniem do rozwiązania dla wizji komputerowej. Tego rodzaju problemy zostały rozwiązane w innych sytuacjach, ale nie ze 100% dokładnością, a na pewno nie po cenach, które są nawet bliskie konkurowania z zarządem DGT.

Następnie pojawia się pytanie, gdzie można ustawić kamerę. Bezpośrednio nad głową byłby najlepszy widok planszy, ułatwiając precyzyjne określenie kwadratu. Ale gdziekolwiek kamera zostanie umieszczona, istnieje wyraźne prawdopodobieństwo, że jej widok zostanie zasłonięty przez jednego z graczy, albo pochylając się nad tablicą, sięgając po zegar, albo po prostu gestykulując.

4) Nie, chyba że było naprawdę tanie. I nie oczekuję, że tak będzie. Moje rozumowanie jest proste. W miarę skracania się czasu jakość gry spada do tego stopnia, że ​​nie jest już dla mnie interesująca


Świetnie nadajesz się do punktu 4: jakość jest rzeczywiście słaba. Nie warto instalować aparatu, a tym bardziej spędzić miesiąc na pisaniu oprogramowania. Właśnie wygrałem play-off, ale wstydzę się tego, jak źle grałem.
Riccardo Zorn,

5

To byłoby dość złożone zadanie. Być może rozsądnym pierwszym krokiem jest przyjrzenie się rozpoznaniu pozycji FEN na podstawie jednego obrazu - dla którego istnieje więcej zasobów, na przykład:


Wspaniale, dziękuję. Przeczytałem oba i są naprawdę interesujące. Chessgrabber to najnowszy projekt i zdecydowanie bardziej pasuje, skontaktowałem się z deweloperem.
Riccardo Zorn,

Myślę, że od tego pierwszego kroku konwersja wideo do PGN nie byłaby zbyt trudna - rób zdjęcia co kilka milisekund, analizuj je, a jeśli pozycja zmieniła się w legalny sposób, dodaj nową pozycję do pliku.
rlms

Aktualizacja: programista odpowiedział, że nigdy nie będzie działać w przypadku przekrzywionych obrazów 3D z nakładającymi się elementami. Szkoda, bez tego jako podstawy projekt nigdy się nie rozpocznie.
Riccardo Zorn

rozpoznanie nieruchomego obrazu jest w rzeczywistości trudniejsze niż doprowadzenie do niego filmu wideo, ponieważ ten ostatni eliminuje problem konieczności rozpoznawania fragmentów.
Piotr

5

Jest teraz 2019-12 i 5 lat po pierwotnym pytaniu.

  1. Czy istnieje coś takiego (konwerter kamery / wideo na PNG)? Może prototyp?

    widzieć

  2. Czy ktoś próbował takiego wyczynu i podzielił się swoimi badaniami?

    Tak - do tej pory znalazłem około 35 prac naukowych i 10 rozwiązań typu open source oraz jedną ofertę komercyjną

    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 to kolejny projekt mający na celu osiągnięcie określonych przez ciebie celów. Projekt rozpoczął się 15.10.2019 i za kilka godzin znalazłem już wiele zasobów, np. To pytanie. Dwa miesiące później zaktualizowałem swoją odpowiedź (patrz linki powyżej)

  3. Czy istnieją oczywiste ograniczenia, które uniemożliwiają powodzenie tego projektu? Mogę tylko odpowiedzieć z własnego doświadczenia z podobnym projektem, który zrobiłem 31 lat temu, patrz http://wiki.bitplan.com/index.php/MagneticSensorChessBoard1987 . W tym czasie próbowałem stworzyć szachownicę, która wykrywa ruchy. Użyłem magnesów w drewnianych elementach i kontaktronach. Kluczem do sukcesu było zastosowanie silnika szachowego, który wprowadził nowe „zasady”, aby móc skoncentrować się na samych ruchach i nie musieć wykrywać poszczególnych elementów. Jak wskazano w odpowiedzi powyżej, promocje na elementy inne niż królowa mogą być trudnymi przypadkami użycia krawędzi. Wykrywanie ruchu elementów za pomocą różnic obrazu jest dobrze zrozumiałym problemem.

    Silniki szachowe i interfejsy GUI kompatybilne z UCI są obecnie dostępne. Problem jest więc bardziej problemem związanym z integracją niż rozwiązywaniem poszczególnych problemów szczegółowych.

    Główną przeszkodą jest różnica między „prototypem” a produktem. Patrz np. Http://www.nandanbanerjee.com/files/ICCVR-08AUG12-011%20paper.pdf

    papier, który jest nawet starszy od tego pytania, ale daleki od produktu, który można kupić za rozsądną cenę.

  4. Czy kupiłbyś go, gdyby istniał?

    Tak. Kiedy kilka dni temu kupiłem nową szachownicę, szukałem takiej, która mogłaby rejestrować ruchy i nadal wynosiła około 500 EUR. Wygląda na to, że koszt sprzętu wyniesie obecnie znacznie poniżej 150 EUR, w tym przyzwoitą szachownicę i elementy.

    Oprogramowanie może wkrótce zostać otwarte i bezpłatne (jak w darmowym piwie). Zaktualizuję odpowiednio tę odpowiedź.


1
Dziękuję, nie mogę się doczekać waszych postępów
Riccardo Zorn


3

Pracowałem nad projektem śledzenia szachów 8x8cam w ramach kursu przetwarzania obrazu w 2013 roku w FING UdelaR.

Następnie w 2014 roku inni studenci stworzyli lepszą wersję dla Androida o nazwie chesstrack . W jego sieci można znaleźć filmy i link do kodu, którego używali.

Bardzo chciałbym zobaczyć sfinalizowaną aplikację tego pomysłu na projekt, który miałem od lat. Więc jeśli są jakieś wiadomości na ten temat, proszę zostawić komentarz.

Odpowiedzi na wskazane pytania:

  1. Czy istnieje coś takiego (konwerter kamery / wideo na PNG? Może prototyp?


    Oprócz mojego projektu 8x8cam i chesstrack , niedawno znalazłem projekt o nazwie ChessCam . Wszystkie te projekty są typu Open Source i należy je nazwać jako zasób, jeśli utworzysz z nich nowy projekt.

  2. Czy ktoś próbował takiego wyczynu i podzielił się swoimi badaniami?


    Tak. Możesz to zobaczyć na odpowiedzi na poprzednie pytanie.

  3. Czy istnieją oczywiste ograniczenia, które uniemożliwiają powodzenie tego projektu?


    Moim zdaniem najtrudniejsze jest sprawienie, by oprogramowanie działało bez względu na położenie aparatu i niezależnie od oświetlenia. A także do pracy w szybkich grach i pracy z okluzjami rąk podczas gry, aby poprawnie wykryć wykonany ruch.

  4. Czy kupiłbyś go, gdyby istniał?


    Zdecydowanie tak.


1

Nie będę odpowiadać na pytanie, ponieważ nie wiem, czy jest tam jakieś oprogramowanie. Mówię tylko, jak myślę, jak to zrobić, nie wiem na pewno, więc ...


Dobrze, najpierw upewnij się, że wideo jest nagrywane z oprogramowania szachowego, a nie z turnieju na żywo, tylko po to, aby ułatwić ci pracę.

Musisz przekonwertować film na obrazy

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

To było łatwe, teraz najtrudniejsza część, musisz zacząć przetwarzać obrazy, ponieważ najmocniejszy jest OpenCV.

W tym celu istnieje kilka technik, podam ci linki, abyś mógł je przeczytać.

Jest to skomplikowane, ale prostsze niż myślisz, ponieważ musisz tylko wiedzieć, jaka jest pozycja początkowa, przejrzeć wszystkie obrazy i zobaczyć różnicę. Spójrz na dokumenty OpenCV, znajdziesz mnóstwo materiałów na ten temat.


A tak przy okazji, to, o co prosisz, zostało już zrobione, ale o ile wiem, nie używam oprogramowania, jest stary projekt, który został zakodowany za pomocą Pascala, kamery umieszczone na płycie, roboty przetwarzają obraz i wykonują ruch. Obecnie wiele robotów gra w szachy.

Możesz kupić Arduino uno, a jego lekki cenzor wykryje białe i czarne kawałki, trochę kodowania i zagra w szachy. :)


1

Edycja: awans na coś innego niż królowa sprawi, że wszystko wybuchnie. Bardzo trudno będzie to wesprzeć (mój program dla części 2 obsługuje niedostateczną promocję, ale przechowywanie informacji o części 1 wyłącznie przez odczytywanie pikseli jest koszmarem).

Edycja2: Właśnie zauważyłem, że masz na myśli prawdziwe szachy planszowe dla PGN, więc to wszystko jest bezużyteczne i najprawdopodobniej usunę moją odpowiedź.

Część 1: przechowywanie kwadratów za pomocą czytników pikseli

Jest to całkowicie możliwe, potrzebne kroki to:

  1. zmień układ planszy, aby podświetlał ostatni ruch (najlepiej nie tylko granicę)
  2. napisz program, który odczytuje podane piksele (x, y)
  3. spraw, aby odczytał co najmniej 5 pikseli na każdym kwadracie (więc kursor / kawałek nie może pokryć wszystkich pikseli do odczytania)
  4. przekonwertować HEX na RBG, a następnie podać zakres akceptowanych wartości tego, co uważamy za zbliżone do koloru „ostatniego ruchu”
  5. zapisz ruchy w tablicy z formatem ["h1-h8", "e4-e5", ...] tylko kwadratów początkowych i końcowych (kolejność nieważna )

Uwaga: stąd naprawdę nie wiemy, z którego kwadratu była pozycja początkowa / końcowa, ale są tylko 2 możliwości i tylko 1 z nich jest legalna.

Napisałem proste makra / boty oparte na pikselach do gier RPG w C #, mogę zagwarantować, że nie jest to takie trudne, biorąc pod uwagę, że:

  1. kamera jest statyczna (więc wartości x, y się nie psują)
  2. wcześniej znasz kolor tła lub możesz go ustawić przed rozpoczęciem gry

Zasadniczo najlepiej jest, jeśli gra jest rozgrywana online i nagrywasz bezpośrednio z ekranu.

Przepraszamy, brak programu dla części nr 1


Część 2: eksport tej listy do PGN

Aby przekształcić tę listę w prawdziwy PGN, możesz użyć programu, który napisałem w JavaScript, który rejestruje ruchy, i jedną z funkcji, moveCaller()które przekazujesz o dwa kwadraty i przeszukuje final_poslegalne ruchy, initial_posa jeśli jest dopasowanie, to wywołuje makeMove(). Możemy więc zadzwonić dwa razy e5 to e4i e4 to e5gwarantuję, że zignoruje to nielegalne.

  1. pobierz projekt (bezpośredni link .zip )
  2. rozpakuj .zip
  3. zmień JavaScript index.htmlpliku za pomocą:

$(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. skopiuj listę przenoszenia i dodaj nad nią nagłówki PGN, takie jak [WhiteElo "2400"]itp.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.