Otomatik gösterim için araçlar: web kamerası filmi PGN için


14

Bazen tahtadaki yıldırım oyunlarında veya zeitnot'ta, onlara açıklama eklemek çok zorlaşır.

Notasyonu yazmanıza yardımcı olacak birkaç yazılım / donanım gördüm, FIDE onaylı bile olsa ; bunlar cihazdaki hareketleri tekrarlamanızı gerektirir. Kalemlere ve kağıtlara göre neredeyse daha hızlı, tıpkı hatalara eğilimli olduğu gibi, yanlış hamleyi yazıp daha fazla zaman kaybetme riskiyle karşı karşıyasınız.

DGT bunu otomatik olarak yapacak bir tahta yapar , ancak sadece parçaları ile çalışır ve 400 € 'dan başlar, turnuva panolarının iki katıdır . Usb satranç tahtası 101 veya ses kontrollü satranç robotları , Satranç tahtası adım sıralayıcısı gibi bazı bağımsız projeler mevcuttur . Ek olarak , parçaları (veya devasa parçaları ) bile hareket ettiren bazı açık projeler mevcuttur .

Bu gece bir playoffum var ve turnuva kuralları kazanan olana kadar daha kısa ve daha kısa maçlar gerektiriyor. Bu yüzden parkuru kaybetmemiz halinde tahtadan bir film çekmeyi düşündüm. Ama sonra programlama geçmişim başladı ve "Bir filmi işleyebilen ve PGN yazabilen bir yazılım olmalı" diye düşündüm.

Her yerde aradım ve hiçbir şey bulamadım.

  1. Böyle bir şey var mı (web kamerası / videodan pgn'ye dönüştürücü)? Belki bir prototip?
  2. Herkes böyle bir başarıya çalıştı ve araştırmalarını paylaştı mı?
  3. Bu projenin başarılı olma ihtimalini azaltan bariz sınırlamalar var mı?
  4. Varsa satın alır mıydınız?

2
ilginç bir bilgisayar görme / makine öğrenme projesi olurdu!
Memming

Bence "2D" görüntü üretmek için tahta yukarıdan aşağıya çekilmelidir. Aksi takdirde, 3B görünümü 2B görünümüne aktarmanın ek bir sorunu vardır ve farklı 3B açıları ayrı ayrı ele alınmalıdır.
Rauan Sagit

aslında bu basit bir şekilde, kurulu "sökmek" ve tüm karelerini kare yapmak için doğrusal bir dönüşüm. asıl sorun, açı, parçalar birbirinin arkasına hizalanabilecek şekildeyse parçanın taşındığı kareyi tanımaktır.
peter

Belki bu proje için bir çeşit kitle kaynak kullanımı yapabiliriz. Bence çok ilginç. Bahse girerim bazı üniversite öğrencileri bunu kıdemli projeler için yapabilir. Fikri profesörlere iletmenin bir yolunu bulmalıyız. Belki iki farklı yere yerleştirilmiş iki kamera ile bu güvenilir bir şekilde yapılabilir. 3D yaklaşımıyla ilgilenirim, tepeden 2D değil. Tepegöz kamera montajı çok pratik değildir. Ayrıca, aynı anda uzun bir masada oynanan birkaç oyun çekim birkaç farklı kameradan girdi alacak ve notation - for

Kickstarter.com/projects/infivention/… ' in zaten başarılı olduğu göz önüne alındığında, bir crowdfunding projesi gerçekten mümkün görünüyor. Özellikle son kullanıcılar için maliyet çok düşük olacağı için.
Wolfgang Fahl

Yanıtlar:


4

Satranç oyunlarını otomatik olarak kaydetmek açıkça ilginç ve önemlidir (canlı kartlar aşağı yukarı aynı problemle uğraşır). Bildiğim kadarıyla, bu amaç için bugün var olan bir yazılım yok. Bu sorunu çözmek için, "basit" davanın aşağıdaki gibi olması gerektiğini düşünüyorum.

  1. Satranç tahtası, iki boyutlu bir görünüm elde etmek için yukarıdan aşağıya çekilmelidir. (Motivasyon: Üç boyutlu bir görünümde çekim yapmak, çarpık bir görünüm ve arkasındaki diğer parçalar için görünümü engelleyecek parçalar nedeniyle sorunlara neden olabilir. Ayrıca, temiz bir prosedürü engelleyecek farklı 3D görüntüler de mümkündür.)
  2. Film, "temiz tahta" anlarını yakalamak ve iki oyuncunun elleri veya kafaları görüşü engellediğinde anları kaldırmak için manuel olarak düzenlenmelidir.
  3. Yazılım tarafındaki görüntü işleme algoritması, karttaki değişiklikleri algılamalı ve bunları hamle olarak kaydetmelidir. Ayrıca pano yönünü ve böylece koordinatları algılamak için görüntüyü otomatik olarak döndürmeli ve dönüştürmelidir.
  4. Yazılım başlangıç ​​konumunu her parça tipini "ezberlemek" için kullanmalı ve daha sonra bunları oyun sırasında görüntü tanıma için kullanmalıdır. Muhtemelen, parça tanıma sorununu akıllı bir şekilde çözmek için bazı akıllı hileler yazılabilir.

Arama dizesiyle hızlı bir Google araması

satranç oyunu görüntü işleme

bu ilginç makaleyi döndürdü

Sonuçta, bu tür yazılımları uygulamak gerçekçi olmalıdır. Yine de bir insanın aynı işi yapması daha ucuz olabilir (video klipten bilgisayara aktarım).


Bağladığınız GDIlleperuma'nın çalışmasından geçmek biraz zaman aldı, en ilginç olanı. Ancak bu, a priori'yi 3D çarpık görüntülerin detaylandırılması olasılığını dışlar . Teşekkür ederim, çok ilginç bir makale.
Riccardo Zorn

@RiccardoZorn bekliyoruz! 3D çarpık görüntüleri ele alma noktasını görmediğimi itiraf etmeliyim. Durum şu ki, bir insan bir video kaydından hareketleri belgelemekte sorun yaşıyorsa, bir görüntü işleme yazılımı daha da zorlaşacaktır.
Rauan Sagit

Dikey kamera kurmak çok yer gerektirir, invazivdir ve özel bir desteğe / standa ihtiyacınız vardır. Bu pratik değildir :-(
Riccardo Zorn

Daha basit ve ucuz bir "canlı kart" teknolojisi bu durumda gitmenin daha iyi bir yolu olabilir. İsteğe bağlı olarak, makul bir 3D açıdan film çekin ve bir insanın satranç notasyonunu video kaydından çıkarmasına izin verin.
Rauan Sagit

Researchgate.net/publication/… dosyası artık mevcut değil. herhangi birinin bir kopyası var mı?
peter

6

Sırayla,

1) Bildiğim kadarıyla değil

2) Bildiğim kadarıyla değil

3) Bu tür bir projeyi önemsiz, hatta zor hale getiren birkaç şey vardır. Örneğin, bir el hareketinden farklı olan parçayı takip eden en az değil. Ayrıca, hareketin ne zaman durduğunu belirlemek, bilgisayar vizyonunun çözülmesi için ilginç bir soru olacaktır. Bu tür sorunlar diğer durumlarda çözüldü, ancak% 100 doğrulukla değil, kesinlikle DGT kurulu ile rekabet etmeye bile yakın fiyatlarda değil.

Sonra kameranın nereye yerleştirilebileceği sorusu var. Doğrudan tepegöz, tahtanın en iyi görünümünü sunarak kareyi hassas bir şekilde belirlemeyi kolaylaştırır. Ancak kamera nereye yerleştirilirse yerleştirilsin, oyunculardan biri, ya tahtaya yaslanan, saate ulaşan ya da sadece hayat veren bir kişi tarafından görüşünün engelleneceği belirgin bir olasılık var.

4) Gerçekten ucuz olmadığı sürece değil. Ve olmasını beklemiyorum. Akıl yürütmem basit. Zaman kontrolleri kısaldıkça, oyunun kalitesi artık benim için ilginç olmadığı noktaya kadar azalır


4'te harika bir noktaya değindin: kalite gerçekten kötü. Bir kamera kurma zahmetine değmez, yazılımı yazmak için bir aydan daha az harcama. Playoff'u yeni kazandım, ancak ne kadar kötü oynadığımdan utanıyorum.
Riccardo Zorn

5

Bu oldukça karmaşık bir iş olurdu. Belki de makul bir ilk adım, daha fazla kaynağın bulunduğu tek bir görüntüden FEN konumunu tanımaktır, örneğin:


Harika teşekürler. İkisini de okudum ve gerçekten ilginçler. Chessgrabber yeni bir proje ve kesinlikle daha uygun, geliştiriciyle iletişime geçtim.
Riccardo Zorn

Bu ilk adımdan itibaren bir videoyu PGN'ye dönüştürmenin çok zor olmayacağını düşünürüm - birkaç milisaniyede bir resim çekin, bunları analiz edin ve konum yasal bir şekilde değiştiyse dosyaya yeni konumu ekleyin.
rl

Güncelleme: geliştirici cevap verdi, üst üste binen parçalarla 3 boyutlu çarpık görüntüler için asla çalışmayacak. Çok kötü, temel olmadan bu proje asla başlamayacak.
Riccardo Zorn

bir hareketsiz görüntüyü tanımak aslında videonun kendisine yönlendirilmesinden daha zordur, çünkü ikincisi parçaları tanımlayabilmek sorununu ortadan kaldırır.
peter

5

Orijinal sorunun 2019-12 şimdi ve 5 yıl sonra.

  1. Böyle bir şey var mı (web kamerası / videodan pgn'ye dönüştürücü)? Belki bir prototip?

    görmek

  2. Herkes böyle bir başarıya çalıştı ve araştırmalarını paylaştı mı?

    Evet - şu ana kadar 35 araştırma makalesi, 10 açık kaynak çözüm ve bir ticari teklif buldum

    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 , belirttiğiniz hedefleri hedefleyen başka bir projedir. Proje 2019-10-15'te başladı ve birkaç saat içinde zaten çok fazla kaynak buldum, örneğin bu Soru Birkaç ay sonra cevabımı güncelledim (yukarıdaki bağlantılara bakın)

  3. Bu projenin başarılı olma ihtimalini azaltan bariz sınırlamalar var mı? Sadece 31 yıl önce yaptığım benzer bir projeyle ilgili kendi deneyimlerimden cevap verebilirim bkz http://wiki.bitplan.com/index.php/MagneticSensorChessBoard1987 . O zaman hamleleri algılayacak bir satranç tahtası oluşturmaya çalıştım. Tahta parçalarda ve kamışlarda mıknatıs kullandım. Başarının anahtarı, sadece hareketlere konsantre olabilmek ve münferit parçaları tespit etmek zorunda kalmamak için yeni "kuralların" satranç motorunu kullanmaktı. Yukarıdaki yanıtta da belirtildiği gibi, kraliçe olmayan parçalara yönelik promosyonlar zor olan kenar kullanımlarından biri olabilir. Parçaların hareketini resim farklılıklarıyla tespit etmek iyi anlaşılmış bir sorundur.

    Satranç motorları ve UCI uyumlu GUI'ler de bugünlerde mevcuttur. Bu yüzden sorun, günümüzde bireysel detay sorunlarını çözen bir entegrasyon problemidir.

    En büyük engel "prototip" ile ürün arasındaki farktır. Bkz. Örneğin http://www.nandanbanerjee.com/files/ICCVR-08AUG12-011%20paper.pdf

    bu sorudan bile daha eski ancak makul bir fiyata satın alabileceğiniz bir üründen uzak bir kağıt.

  4. Varsa satın alır mıydınız?

    Evet. Birkaç gün önce yeni bir satranç tahtası satın aldığımda, hareketleri kaydedebilecek bir tane arıyorum ve hala 500 EUR civarındaydı. Görünüşe göre, donanım maliyeti iyi bir satranç tahtası ve parçaları da dahil olmak üzere bugünlerde 150 EUR'nun çok altında olacak.

    Yazılım yakında açık kaynak kodlu ve ücretsiz (ücretsiz birada olduğu gibi) olabilir. Bu cevabı buna göre güncelleyeceğim.


1
Teşekkürler, ilerlemenizi görmek için sabırsızlanıyorum
Riccardo Zorn


3

2013 yılında FING UdelaR'da görüntü işleme kursu olan 8x8cam satranç izleme projesinde çalıştım.

Daha sonra 2014'te diğer öğrenciler Android için chesstrack adında daha iyi bir sürüm oluşturdu . Web'in altında videoları bulabilir ve kullandıkları koda bağlantı oluşturabilirsiniz.

Yıllardır sahip olduğum bu proje fikrinin nihai bir uygulamasını görmek isterim. Bu konuda bazı haberler varsa lütfen bir yorum bırakın.

Sivri sorularınızı cevaplamak:

  1. Böyle bir şey var mı (web kamerası / video pgn dönüştürücü? Bir prototip belki?


    Dışında benim proje arasından 8x8cam ve chesstrack , son zamanlarda adında bir proje bulduk ChessCam . Bu projelerin tümü Açık Kaynak'tır ve bunlardan yalnızca yeni bir proje oluşturursanız kaynak olarak adlandırılması gerekir.

  2. Herkes böyle bir başarıya çalıştı ve araştırmalarını paylaştı mı?


    Evet. Bunu bir önceki sorunun cevabında görebilirsiniz.

  3. Bu projenin başarılı olma ihtimalini azaltan bariz sınırlamalar var mı?


    İnandığım en zor kısım, kameranın nasıl yerleştirildiğine bakılmaksızın ve aydınlatmadan bağımsız olarak yazılımı çalıştırmaktır. Ve ayrıca hızlı tempolu oyunlar üzerinde çalışmak ve oyun oynarken el oklüzyonları ile çalışmak, yapılan hareketi doğru bir şekilde tespit etmek için.

  4. Varsa satın alır mıydınız?


    Kesinlikle evet.


1

Soruyu cevaplamayacağım, çünkü orada bir yazılım olup olmadığını bilmiyorum. Sadece bunu nasıl yapacağımı düşünüyorum, emin değilim, yani ...


Tamam, önce işinizi kolaylaştırmak için videonun canlı bir turnuvadan değil bir satranç yazılımından kaydedildiğinden emin olmanız gerekir.

Filmi görüntülere dönüştürmeniz gerekiyor

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

Bu kolaydı, şimdi zor kısmı, görüntü alayı yapmaya başlamanız gerekiyor, bunun için en güçlü olanı OpenCV.

Bunun için birkaç teknik var, bunları okuyabilmeniz için size linkleri vereceğim.

Bu karmaşık ama düşündüğünüzden daha basit, çünkü sadece başlangıç ​​pozisyonunun ne olduğunu bilmeniz, tüm görüntüler arasında dolaşmanız ve farkı görmeniz gerekiyor. Bu konuda tonlarca materyal bulacağınız OpenCV belgelerine bir göz atın.


Bu arada, istediğin şey zaten yapıldı, ancak bildiğim kadarıyla yazılım kullanmıyor, Pascal kullanılarak kodlanan eski bir proje var, tahtaların üzerine yerleştirilen kameralar, robotlar görüntü işleme yapıyor ve hareket ediyor. Günümüzde birçok robot satranç oynamaktadır.

Bir Arduino uno ve hafif sansür satın alabilirsiniz, beyaz parçaları ve siyah parçaları, bazı kodlamaları tespit edecek ve satranç oynayacak. :)


1

Düzenleme: kraliçe farklı bir şey teşvik her şeyi patlatacak yapacak. Bunu desteklemek de çok zor olacaktır (2. Bölüm programım yetersiz tanıtımları desteklemektedir, ancak 1. Bölüm bilgisini yalnızca pikselleri okuyarak saklamak bir kabustur).

Edit2: Sadece PGN için gerçek tahta satranç demek istediğini fark ettim, bu yüzden bu tamamen işe yaramaz ve büyük olasılıkla cevabımı sileceğim.

Bölüm 1: Piksel Okuyucular Kullanarak Kareleri Kaydetme

Tamamen mümkündür, gereken adımlar:

  1. pano kurulumunu son hamleyi vurgulayacak şekilde değiştirin (tercihen sadece sınırı değil )
  2. verilen pikselleri okuyan bir program yaz (x, y)
  3. her karede yaklaşık 5+ piksel okumasını sağlayın (böylece imlecin / parçanın okunacak tüm pikselleri kapsaması imkansızdır)
  4. HEX'i RBG'ye dönüştürün, sonra "son hareket" rengine yakın olarak kabul gördüğümüz bir dizi kabul edilen değer verin
  5. hamleleri ["h1-h8", "e4-e5", ...] yalnızca ilk ve bitiş kareleri biçimindeki bir diziye kaydedin ( önemsiz sipariş edin )

Not: Buradan hangi meydanın başlangıç ​​/ bitiş konumu olduğunu gerçekten bilemeyiz, ancak sadece 2 olasılık var ve bunlardan sadece biri yasal.

C # RPG oyunları için basit piksel tabanlı makrolar / botlar yazdım, bunu göz önüne alarak bu kadar zor olmadığını garanti edebilirim :

  1. kam statiktir (bu nedenle x, y değerleri bozulmaz)
  2. daha önce arka plan rengini biliyorsunuz veya oynatmadan önce ayarlayabilirsiniz

Temel olarak, oyun çevrimiçi oynanıyorsa ve doğrudan ekrandan kayıt yapıyorsanız en iyisidir.

Üzgünüz, 1. bölüm için program yok


Bölüm 2: Bu listeyi PGN'ye aktarma

Bu listeyi gerçek bir PGN'ye dönüştürmek için , JavaScript'te yazdığım bir programı hareketleri kaydeden bir program kullanabilirsiniz ve moveCaller()iki kare konumunu ilettiğiniz işlevlerden biri final_posve yasal hamlelerde arama yapar initial_posve bir eşleşme varsa o zaman çağırır makeMove(). Bu yüzden iki kez çağırabilir e5 to e4ve e4 to e5ben yasadışı bir yok sayacaktır garanti.

  1. projeyi indirin (doğrudan bağlantı .zip )
  2. sıkıştırmak .zip
  3. index.htmlbununla dosyanın JavaScript'ini değiştirin :

'

$(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();
});

0,4. taşıma listesini kopyalayın ve üstüne PGN başlıkları ekleyin [WhiteElo "2400"].


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.