Kuinka ratkaista Googlen Semantris-peli OpenCV: n ja Word2Vec: n avulla

Ohjelman kirjoittaminen Google Semantriksen toistamista varten

Automaatio on hyvää, kunhan tiedät tarkalleen, mihin kone laitetaan. - Eliyahu GoldrattSemantris on joukko Googlen sanayhdistelmäpelejä, jotka käyttävät semanttista hakua ennustamaan peliin liittyvän sanan pelaajan syötteen perusteella.

Pelissä on 2 tilaa.

ARKADE

Pelihallitila vaatii pelaajan keksimään liitettyjä sanoja tietyille sanoille. Sinun pitäisi ajatella ja kirjoittaa niin nopeasti kuin pystyt, ennen kuin kasvava sanaluettelo täyttää näytön.

BLOKIT

Blocks on vuoropohjainen pelitila. Voit käyttää aikaa keksimään erityyppisiä vihjeitä ja nähdä, mitkä pelistä ymmärretään parhaiten.

Pelattuani jonkin aikaa tajusin, että molemmat pelitilat käyttävät kuvion tunnistusta pääpelimekanismina. Silloin aloin miettiä, voisiko se automatisoida.

Osoittautuu, se voi olla

Semantris-Solver käyttää seuraavaa peliä pelatessaan:

  • Tallenna nykyinen pelitila tietokonenäkötekniikoilla
  • Tunnista sana, jonka haluat syöttää korkeammalle palkkiolle / pidemmälle pelattavuudelle
  • Etsi liittyvä sana sanojen upotusten avulla

Seuraavissa osioissa aiomme sukeltaa Semantris-Solverin toimintaan molemmissa pelitiloissa.

ARKADE

Ihmispelaaja käyttää seuraavia liikkeitä pelatessaan pelitilaa:

  • Etsi yksi tai useampi korostettu sana pelistä
  • Hae nämä sanat korostetulle alueelle kirjoittamalla niihin liittyvä sana
  • Tee näin, ennen kuin näytölläsi on tilaa uusien sanojen saamiseksi
Pelihallitilassa on myös kolmen tyyppisiä teemavärejä.

Huomaat, että teemavärillä ei ole mitään roolia tässä - pelin mekanismi pysyy samana, jos muutamme teeman väriä. Mitä muutoksia on korostetun sanan määritelmä.

Sana korostetaan, jos siitä on jäljellä osoittimen muoto, (▶ Toimita ) tässä tapauksessa.

Väriavaruuden muunnos

Semantris-Solverin ARCADE-tila alkaa kaapata kuvakaappaus kannettavan tietokoneen näytöstä ja muuntaa se harmaasävykuvaksi, joka on todellisen värin agnostinen.

Mallien haku

Seuraava askel on löytää korostettu sana otetusta kuvasta. OpenCV tarjoaa Template Matching -nimisen menetelmän mallikuvan sijainnin etsimiseen ja etsimiseen suuremmasta kuvasta.

Käytämme osoittimen muodon rajattua versiota (▶) mallikuvana, jotta löydämme sen sijainnin kaapatussa näytössä.

Optinen merkintunnistus (OCR)

Osoittimen sijainnin perusteella osa rajataan sen viereen korostetulla sanalla.

Rajattu kuva muunnetaan tekstiksi Tesseract OCR: llä; tässä tapauksessa se antaa meille laivan .

Jos kyseessä on useampi kuin yksi korostettu sana, ne syötetään peräkkäin pitääkseen pelin liikkeessä.

Liitetty sanavalinta (Word-upotusten avulla)

Google News -korpusiin valmiiksi koulutettua Word2Veciä käytetään sanojen upotusmallina etsimään tietylle sanalle eniten samankaltaisia ​​sanoja.

Tällöin se palauttaa sanan " alus" syötettäväksi sanana " alus" ( sen jälkeen kun se on poistanut morfologisesti samanlaiset sanat ).

Ohjelma kirjoittaa tämän liittyvän sanan ja tallentaa päivitetyn pelinäytön jatkaaksesi.

BLOKIT

Tässä tilassa on sanalohkoja, joissa on neljä mahdollista väriä tietylle teemalle. Sanalohkot saattavat sisältää tai olla sisältämättä sanaa niihin.

Syötä liitetty sana sanalohkoon poistaa samat värilliset lohkot, jotka on liitetty siihen, kuten vanha hyvä Tetris .

Ihmispelaaja käyttää seuraavia liikkeitä pelatessaan pelitilaa:

  • Syötä sanalohkoon liittyvä sana, joka on yhdistetty useimpiin samanvärisiin sanalohkoihin (jos mahdollista)
  • Tee näin, ennen kuin näytölläsi on tilaa uusien sanojen saamiseksi

Huomaat, että sanalohkon värillä on tällä kertaa merkittävä rooli. Sinun on annettava liittyvä sana sanalohkolle, joka on yhdistetty useampiin samanvärisiin lohkoihin saadaksesi korkeammat pisteet.

Tämän lisäksi lohkotilassa on kolmen tyyppisiä teemavärejä.

Väripaletin luominen

Tällä kertaa emme voi muuntaa siepattua kuvaa harmaasävyiseksi versioksi. Meidän on tiedettävä väriominaisuudet, jotta voimme erottaa eri sanalohkot.

Juoksu K-keskiarvon klusterointi pikseleille kaapatun ruudun antaa meille kaikki näkyvä kuvan värit jälkeen ilman taustan värejä, kuten valkoista (teksti-väri), musta (background-color), ja harmaa (teksti-input).

Muotojen tunnistus

Nyt kun meillä on kaikki nykyisen teeman neljä väriä, meidän on tiedettävä, mikä sanalohko valitaan, jotta saat maksimipisteitä.

Toisin sanoen, jos laskemme jokaisen yhdistetyn sanalohkoryhmän pinta-alan ( samanväriset sanalohkot liitettyinä toisiinsa ) ja valitsemme yhden, jolla on enimmäispinta-ala, saadaan haluttu yhdistetty sanalohko -ryhmä.

Muoto on käyrä, joka yhdistää kaikki jatkuvat pisteet rajaa pitkin ja jolla on sama väri tai voimakkuus.

Sanalohkoryhmää voidaan pitää kyseisen värin ääriviivana; jos se on yhdistetty useampaan samanväriseen lohkoon, muodon pinta-ala on yhdistettyjen sanalohkojen summa.

Muotot lasketaan (käyttäen OpenCV: n findCountours-toimintoa) kaikille sanalohkojen väreille erikseen ja valitaan väri, jolla on enimmäispinta-ala.

Voimme valita suurimman ääriviivan muodon tekemällä bittiä ja toimintaa kaapatun näytön ja ääriviivan välillä.

Sanan tunnistus (Tesseractin ja Word2Vecin avulla)

Muotokuva muunnetaan tekstiksi Tesseract OCR: llä; tässä tapauksessa se antaa meille puutarhan .

Samoin kuin pelihallitilassa, käytämme Word2Veciä löytämään vastaavimman sanan, joka on kukkapenkit tällä kertaa.

Parannuksia

Tietyissä tilanteissa nykyinen OCR-prosessi ei tunnista sanaa kunnolla.

Esimerkiksi se palauttaisi tälle muodolle arvon " Eloctrlclty" eikä " Sähkö" .

Koska kyseessä on virheellinen sanaehdotus, Word2Vec-malli ei palauta sille vastaavaa sanaa. Siinä tapauksessa ehdotettu sana itse kirjoitetaan liitettyyn sanaan pelin liikkeellepanemiseksi.

Oikeinkirjoituksen korjauksen malli auttaa tässä, korjaaminen Eloctrlclty että sähköä. Olen luonut saman ongelman GitHub-arkistoon. Voit vapaasti kirjoittaa, jos haluat. ?

Lähdekoodi

Semantris-Solver (GitHub)

Se on toteutettu CLI-työkaluna, jonka avulla voit vaihtaa pelitilojen välillä. Voit tarkistaa IPython-kannettavat, jotka toteuttavat molemmat tilat.

  • ARCADE-tila
  • BLOCK-tila

Riippuvuudet

Semantris-Solveria ei ollut mahdollista rakentaa ilman seuraavia ohjelmistotyökaluja.

  • OpenCV
  • Word2Vec (gensim)
  • pyautogui (kuvakaappauksen ottaminen ja siihen liittyvien sanojen kirjoittaminen)
  • Tesseract (OCR)

Toivottavasti pidit viikonlopun hakkerointitarinastani. Anna palautetta.

Seuraa minua Twitterissä Pravendra Singh tai tarkista henkilökohtainen verkkosivustoni hackpravj.com.