Hogyan lehet megoldani a Google Semantris játékát az OpenCV és a Word2Vec segítségével

Program írása a Google Semantris lejátszására

Az automatizálás jó, amennyiben pontosan tudja, hova tegye a gépet. - Az Eliyahu GoldrattSemantris a Google olyan szavak társulási játékai, amelyek szemantikus kereséssel jósolják meg a játék releváns szavát a játékos bemenete alapján.

2 mód áll rendelkezésre a játékban.

ÁRKÁD

Az Arcade mód megköveteli, hogy a játékos bizonyos szavakhoz társított szavakat állítson elő. Állítólag a lehető leggyorsabban kell gondolkodnia és belépnie, mielőtt az egyre növekvő szavak listája kitöltené a képernyőt.

BLOKKOK

A Blocks körön alapuló játékmód. Szánhat rá időt, hogy különböző típusú nyomokkal álljon elő, és lássa, melyiket érti a játék a legjobban.

Egy ideig játszva rájöttem, hogy mindkét játékmód a mintafelismerést használja a fő játék-játék mechanizmusként. Ekkor kezdtem azon gondolkodni, hogy lehet-e automatizálni.

Kiderült, lehet

A Semantris-Solver a következő eljárást használja a játék lejátszásához:

  • Rögzítse a játék jelenlegi állapotát számítógépes látási technikák segítségével
  • Határozza meg a magasabb jutalom / hosszabb játékmenet beírására szolgáló szót
  • A beágyazások segítségével keresse meg a társított szót

A következő szakaszokban elmélyülünk a Semantris-Solver működésében mindkét játékmód esetében.

ÁRKÁD

Egy emberi játékos a következő lépéseket fogja használni az arcade mód lejátszásához:

  • Keressen egy vagy több kiemelt szót a játékban
  • Vigye ezeket a szavakat a kijelölt területre úgy, hogy beírja a hozzájuk tartozó szót
  • Addig folytassa ezt, mielőtt elfogyna a képernyőn az új szavak helye
Az arcade módban háromféle típusú téma is létezik.

Rájössz, hogy a téma színe itt nem játszik szerepet - a játék mechanizmusa ugyanaz marad, ha megváltoztatjuk a téma színét. Mi változik a kiemelt szó meghatározása.

Egy szó akkor kerül kiemelésre, ha mutató alakja van belőle ( ebben az esetben a ( Hajó )).

Színtér átalakítás

A Semantris-Solver ARCADE módja azzal kezdődik, hogy rögzít egy képernyőképet a laptop képernyőjéről és szürkeárnyalatos képpé alakítja, amely a tényleges szín agnosztikus.

Sablonillesztés

Következő lépésünk az lesz, hogy megtaláljuk a kiemelt szót a rögzített képen. Az OpenCV a Template Matching nevű módszert biztosítja a sablonkép helyének megkeresésére és megkeresésére egy nagyobb képen.

A mutató alakjának (▶) kivágott változatát sablonképként fogjuk használni, hogy megtalálja a helyét a rögzített képernyőn.

Optikai karakterfelismerés (OCR)

A mutató helye alapján egy szakasz levágásra kerül mellette, a kiemelt szóval.

A kivágott képet a Tesseract OCR segítségével szöveggé konvertálja; ebben az esetben ez megadja nekünk a Hajót .

Több kiemelt szó esetén egymás után írják be, hogy a játék mozogjon.

Társított szó kiválasztása (Word beágyazások használata)

A Google News korpuszon előre kiképzett Word2Vec szót beágyazási modellként használják az adott szóhoz leginkább hasonló szavak (társított) megtalálásához.

Ebben az esetben visszatér az „ edény” szóhoz, hogy társított szóként írja be a „ hajó” szót ( morfológiailag hasonló szavak eltávolítása után ).

A program a folytatáshoz beírja ezt a társított szót, és rögzíti a frissített játék képernyőt.

BLOKKOK

Ebben a módban négyféle színű szóblokk található az adott témához. A szóblokkok tartalmazhatnak vagy nem tartalmazhatnak szót.

A szóblokkhoz tartozó szó beírásával ugyanazok a színes blokkok kerülnek eltávolításra, mint a jó öreg Tetris .

Egy emberi játékos a következő lépéseket fogja használni az arcade mód lejátszásához:

  • Írja be a szótömb társított szavát, amely a legtöbb azonos színű szótömbhöz kapcsolódik (ha lehetséges)
  • Addig folytassa ezt, mielőtt elfogyna a képernyőn az új szavak helye

Rájössz, hogy a szóblokk színe ezúttal jelentős szerepet játszik. A magasabb pontok megszerzéséhez meg kell adnia a társított szót egy ugyanolyan színű blokkokkal összekötött szótömbhöz.

Ezen felül blokk módban háromféle színtéma létezik.

Színpaletta generálása

Ezúttal nem tudjuk átalakítani a rögzített képet szürkeárnyalatos verzióvá. Ismernünk kell a színattribútumokat, hogy meg tudjuk különböztetni a különböző szótömböket.

A K-középű csoportosítás futtatása a rögzített képernyő képpontjain a kép összes kiemelkedő színét megkapja számunkra, miután kizárjuk a háttérszíneket, mint például a fehér (szöveg-szín), a fekete (háttér-szín) és a szürke (szöveg-bevitel).

Kontúrészlelés

Most, hogy mind a négy szín megvan az aktuális témában, tudnunk kell, melyik szóblokkot választjuk a maximális pontok megszerzéséhez.

Más szavakkal, ha kiszámoljuk minden összekapcsolt szóblokk-csoport ( azonos színű, egymással összekapcsolt színű szóblokkok ) területét, és kiválasztjuk a maximális területet, akkor megkapjuk a kívánt összekapcsolt-szóblokkot -csoport.

A kontúr egy görbe, amely a határ mentén az összes folytonos pontot összeköti, azonos színnel vagy intenzitással.

A szóblokk csoport az adott szín kontúrjának tekinthető; ha több azonos színű blokkhoz csatlakozik, akkor a kontúr területe az összekapcsolt szóblokkok összege lesz.

A kontúrokat (az OpenCV findCountours függvényével) kiszámoljuk az összes szóblokk-színre külön-külön, és a maximális területet választja.

Kiválaszthatjuk a maximális terület kontúrját bitrészes művelettel és a rögzített képernyő és a kontúrmaszk között.

Szófelismerés (a Tesseract és a Word2Vec használatával)

A kontúrképet szöveggé alakítja a Tesseract OCR segítségével; ebben az esetben kertet ad nekünk .

Az arcade módhoz hasonlóan a Word2Vec segítségével fogjuk megtalálni a hozzá leginkább hasonlító szót, amely ezúttal Virágágyak lesz .

Fejlesztések

Bizonyos esetekben a jelenlegi OCR folyamat nem ismeri fel megfelelően a szót.

Például erre a kontúrra az „ Elektromosság” helyett az „ Eloctrlclty” értéket adja vissza .

Tekintettel arra, hogy érvénytelen szójavaslat, a Word2Vec modell nem ad vissza hasonló szót. Ebben az esetben maga a javasolt szó társított szóként kerül megadásra, csak a játék mozgása érdekében.

Ebben segíthet egy helyesírás-korrekciós modell, amely az Eloctrlclty- t korrigálja a villamos energiává . Létrehoztam egy problémát a GitHub adattárban ugyanezzel kapcsolatban, bátran járuljon hozzá, ha úgy tetszik. ?

Forráskód

Semantris-Solver (GitHub)

CLI eszközként valósítják meg, amely lehetővé teszi a játékmódok közötti váltást. Ellenőrizheti az IPython notebookokat, amelyek mindkét módot megvalósítják.

  • ÁRKÁD mód
  • BLOKKOK mód

Függőségek

A Semantris-Solver nem építhető fel a következő szoftvereszközök nélkül.

  • OpenCV
  • Word2Vec (gensim)
  • pyautogui (képernyőkép készítése és társított szavak beírása)
  • Tesseract (OCR)

Remélem tetszett a hétvégi hack történetem. Nyugodtan adjon visszajelzést.

Kövess engem a Twitteren Pravendra Singh, vagy nézd meg a hackpravj.com webhelyemet.