Pisanje programa za igranje Google Semantrisa

U igri su dostupna 2 načina.
ARKADA
Arkadni način zahtijeva da igrač smisli pridružene riječi za određene riječi. Trebali biste razmišljati i ući što brže možete prije nego što vam se sve veći popis riječi ispuni zaslon.

BLOKOVI
Blocks je način igre zasnovan na potezu. Možete si uzeti vremena da smislite različite vrste tragova i vidite koje igra najbolje razumije.

Nakon nekog vremena igranja, shvatio sam da oba načina igre koriste prepoznavanje uzoraka kao glavni mehanizam igranja. Tada sam se počeo pitati može li se to automatizirati.
Ispada, može biti
Semantris-Solver koristi sljedeći postupak za igranje igre:
- Snimite trenutno stanje igre pomoću tehnika računalnog vida
- Odredite riječ koju ćete unijeti za igranje s većom nagradom / duljim igranjem
- Pronađite povezanu riječ pomoću ugrađenih riječi
U sljedećim odjeljcima zaronit ćemo u rad Semantris-Solvera za oba načina igre.
ARKADA
Ljudski igrač će za igranje arkadnog načina koristiti sljedeće poteze:
- Pronađite jednu ili više istaknutih riječi u igri
- Dođite do ovih riječi na istaknuto područje tako što ćete za njih unijeti povezanu riječ
- Nastavite to raditi prije nego što vam ponestane prostora na zaslonu za nove riječi

Shvatit ćete da boja teme ovdje ne igra nikakvu ulogu - mehanizam igranja igara ostat će isti ako promijenimo boju teme. Ono što se mijenja je definicija istaknute riječi.
Riječ je istaknuta ako ima lijevi oblik pokazivača, (▶ Ship ) u ovom slučaju.Pretvorba prostora boja
Način ARCADE programa Semantris-Solver započinje snimanjem snimke zaslona zaslona prijenosnog računala i pretvaranjem u sivu sliku, agnostičnu za stvarnu boju.

Podudaranje predloška
Sljedeći će nam korak biti pronalazak istaknute riječi na snimljenoj slici. OpenCV nudi metodu koja se naziva Template Matching za traženje i pronalaženje mjesta slike predloška na većoj slici.
Izrezanu inačicu pokazivača (▶) upotrijebit ćemo kao sliku predloška kako bismo pronašli njezino mjesto na snimljenom zaslonu.

Optičko prepoznavanje znakova (OCR)

Na temelju mjesta pokazivača, odjeljak se obrezuje neposredno uz njega, s istaknutom riječju.
Izrezana slika pretvara se u tekst pomoću Tesseract OCR-a; u ovom slučaju dat će nam brod .
U slučaju više od jedne istaknute riječi, unose se jedna za drugom kako bi se igra nastavila.Pridruženi odabir riječi (pomoću ugrađenih riječi)
Word2Vec prethodno obučen u korpusu Google News koristi se kao model ugrađivanja riječi za pronalaženje najsličnijih riječi (povezanih) za datu riječ.
U ovom slučaju, vratit će " plovilo" da uđe kao pridružena riječ za " brod" ( nakon uklanjanja morfološki sličnih riječi ).
Program će unijeti ovu povezanu riječ i snimiti ažurirani zaslon igre za nastavak.BLOKOVI
U ovom načinu rada postoje blokovi riječi s četiri moguće boje za datu temu. Blokovi riječi mogu u njima sadržavati ili ne sadržavati riječ.
Unošenjem pridružene riječi za blok riječi uklonit će se blokovi iste boje koji su s njim povezani, poput dobrog starog Tetrisa .
Ljudski igrač će za igranje arkadnog načina koristiti sljedeće poteze:
- Unesite povezanu riječ za blok riječi, povezan s većinom blokova riječi u istoj boji (ako je moguće)
- Nastavite to raditi prije nego što vam ponestane prostora na zaslonu za nove riječi

Shvatit ćete da boja bloka riječi ovaj put igra značajnu ulogu. Morat ćete unijeti povezanu riječ za blok riječi povezan s više blokova iste boje da biste postigli više bodove.
Povrh svega, postoje tri vrste boja tema u načinu blokova.
Generacija paleta boja
Ovog puta snimljenu sliku ne možemo pretvoriti u njezinu verziju sive skale. Moramo znati atribute boje da bismo mogli razlikovati različite blokove riječi.
Pokretanje grupiranja K-srednjih vrijednosti na pikselima snimljenog zaslona dobit će sve istaknute boje na slici nakon izuzimanja pozadinskih boja poput bijele (boja teksta), crne (boja pozadine) i sive (unos teksta).

Otkrivanje kontura
Sad kad imamo sve četiri boje u trenutnoj temi, moramo znati koji blok riječi odabrati da bismo dobili maksimalni broj bodova.
Drugim riječima, ako izračunamo površinu svake grupe blokova povezane riječi ( blokovi riječi iste boje međusobno povezane ) i odaberemo onu s maksimalnom površinom, dobit ćemo željeni blok povezane riječi -skupina.
Kontura je krivulja koja spaja sve kontinuirane točke duž granice, iste boje ili intenziteta.Skupina blokova riječi može se smatrati konturom te boje; ako je povezan s više blokova iste boje, područje konture bit će zbroj povezanih blokova riječi.

Konture se izračunavaju (koristeći OpenCV-ovu funkciju findCountours) za sve boje bloka riječi odvojeno i odabire se ona s maksimalnom površinom.
Možemo odabrati maksimalnu konturu područja vršeći bitne postupke i rad između snimljenog zaslona i maske konture.

Otkrivanje riječi (pomoću Tesseract i Word2Vec)
Konturna slika pretvara se u tekst pomoću Tesseract OCR-a; u ovom slučaju dat će nam vrt .
Slično kao u arkadnom načinu, i Word2Vec ćemo pronaći kako bismo mu pronašli najsličniju riječ, koja će ovaj put biti Cvjetni kreveti .
Poboljšanja

U određenim scenarijima trenutni postupak prepoznavanja riječi ne prepoznaje ispravno riječ.
Na primjer, vratilo bi " Eloctrlclty" za ovu konturu umjesto " Electricity" .
S obzirom na to da je riječ o nevaljanom prijedlogu riječi, model Word2Vec za njega neće vratiti nijednu sličnu riječ. U tom se slučaju sama predložena riječ unosi kao pridružena riječ, samo da bi se igra nastavila.
Ovdje vam može pomoći model korekcije pravopisa, koji ispravlja Eloctrlclty na električnu energiju. Stvorio sam izdanje na spremištu GitHub za isto, slobodno dodajte ako želite. ?Izvorni kod
Rješavanje Semantrisa (GitHub)
Implementiran je kao CLI alat koji vam omogućuje prebacivanje između načina igre. Možete provjeriti IPython prijenosna računala koja implementiraju oba načina.
- ARKADNI način
- BLOKOVI način
Ovisnosti
Nije bilo moguće izgraditi Semantris-Solver bez sljedećih softverskih alata.
- OpenCV
- Word2Vec (gensim)
- pyautogui (snimanje snimke zaslona i unos pridruženih riječi)
- Tesseract (OCR)
Nadam se da vam se svidjela moja vikend hack priča. Slobodno pošaljite svoje povratne informacije.
Slijedite me na Twitteru Pravendra Singh ili provjerite moju osobnu web stranicu hackpravj.com.