Ako vyriešiť hru Semantris spoločnosti Google pomocou OpenCV a Word2Vec

Písanie programu pre hru Google Semantris

Automatizácia je dobrá, pokiaľ viete, kam presne stroj umiestniť. - Eliyahu GoldrattSemantris je sada slovných asociačných hier od spoločnosti Google, ktoré pomocou sémantického vyhľadávania predpovedajú relevantné slovo v hre na základe hráčových vstupov.

V hre sú k dispozícii 2 režimy.

ARCADE

Arkádový režim vyžaduje, aby hráč pre určité slová prišiel s pridruženými slovami. Mali by ste premýšľať a zadávať čo najrýchlejšie, ako sa na obrazovke vyplní čoraz väčší počet slov.

BLOKY

Blocks je ťahový herný režim. Môžete si nájsť čas a vymyslieť rôzne typy indícií a zistiť, ktorým z nich hra najlepšie rozumie.

Po chvíli hrania som si uvedomil, že oba herné režimy používajú rozpoznávanie vzorov ako hlavný mechanizmus hrania. Vtedy som začal uvažovať, či by sa to dalo automatizovať.

Ukázalo sa, že môže byť

Semantris-Solver používa na hranie hry tento postup:

  • Zachyťte aktuálny stav hry pomocou techník počítačového videnia
  • Identifikujte slovo, ktoré chcete zadať, aby ste dosiahli vyššiu odmenu / dlhšiu hru
  • Vyhľadajte príslušné slovo pomocou vkladania slov

V nasledujúcich častiach sa ponoríme do práce programu Semantris-Solver pre oba herné režimy.

ARCADE

Ľudský hráč použije na arkádový režim nasledujúce ťahy:

  • Nájdite v hre jedno alebo viac zvýraznených slov
  • Získajte tieto slová vo zvýraznenej oblasti zadaním súvisiaceho slova pre ne
  • Stále to robte, kým vám na obrazovke nedôjde miesto pre nové slová
V arkádovom režime existujú aj tri typy farieb motívov.

Uvedomíte si, že farba motívu tu nehrá žiadnu rolu - mechanizmus zmeny hry zostane rovnaký, ak zmeníme farbu motívu. Čo sa zmení, je definícia zvýrazneného slova.

Slovo je zvýraznené, ak má vľavo od neho tvar ukazovateľa, (▶ Odoslať ), v tomto prípade.

Konverzia farebného priestoru

Režim ARCADE v Semantris-Solver začína zachytením snímky obrazovky obrazovky prenosného počítača a jeho konverziou do obrazu v šedej škále, ktorý je agnostický voči skutočnej farbe.

Zhoda šablón

Naším ďalším krokom bude nájsť zvýraznené slovo na nasnímanom obrázku. OpenCV poskytuje metódu nazvanú Matching šablón na vyhľadávanie a hľadanie umiestnenia obrázka šablóny na väčšom obrázku.

Ako obrázok šablóny použijeme orezanú verziu tvaru ukazovateľa (▶), aby sme našli jeho polohu na nasnímanej obrazovke.

Optické rozpoznávanie znakov (OCR)

Na základe umiestnenia ukazovateľa sa časť orezá hneď vedľa neho so zvýrazneným slovom.

Orezaný obrázok sa prevedie do textu pomocou OCR Tesseract; v takom prípade nám dá Loď .

V prípade viac ako jedného zvýrazneného slova sa vkladajú jeden po druhom, aby sa hra udržala v pohybe.

Priradený výber slov (pomocou vkladania slov)

Word2Vec vyškolený v korpuse Správ Google sa používa ako model vkladania slov na vyhľadanie najpodobnejších slov (asociovaných) pre dané slovo.

V takom prípade vráti výraz „ plavidlo“, aby zadal ako súvisiace slovo pre výraz „ loď“ ( po odstránení morfologicky podobných slov ).

Program vstúpi do tohto pridruženého slova a pre pokračovanie zachytí aktualizovanú obrazovku hry.

BLOKY

V tomto režime existujú bloky slov so štyrmi možnými farbami pre danú tému. Bloky slov môžu alebo nemusia obsahovať slovo.

Zadaním súvisiaceho slova pre blok slov sa odstránia rovnako farebné bloky, ktoré sú s ním spojené, ako napríklad starý dobrý Tetris .

Ľudský hráč použije na arkádový režim nasledujúce ťahy:

  • Zadajte príslušné slovo pre blok slov, spojené s väčšinou rovnako farebných blokov slov (ak je to možné)
  • Stále to robte, kým vám na obrazovke nedôjde miesto pre nové slová

Uvedomíte si, že farba slovného bloku tentoraz hrá významnú úlohu. Budete musieť zadať príslušné slovo pre blok slov spojený s viac rovnako sfarbenými blokmi, aby ste dosiahli vyššie body.

Okrem toho existujú v režime blokov tri typy farieb motívov.

Generovanie farebnej palety

Tentokrát nemôžeme previesť zachytený obrázok do verzie sivej. Potrebujeme poznať farebné atribúty, aby sme dokázali rozlíšiť rôzne slovné bloky.

Spustenie zoskupenia K-mean na pixeloch nasnímanej obrazovky nám poskytne všetky výrazné farby na obrázku po vylúčení farieb pozadia, ako je biela (farba textu), čierna (farba pozadia) a šedá (zadávanie textu).

Detekcia kontúr

Teraz, keď máme v aktuálnej téme všetky štyri farby, musíme vedieť, ktorý blok slov zvoliť, aby sme získali maximum bodov.

Inými slovami, ak vypočítame plochu každej skupiny pripojených slovných blokov ( slovné bloky rovnakej farby navzájom spojených ) a vyberieme tú s maximálnou plochou, dostaneme požadovaný blok pripojených slovných blokov -skupina.

Obrys je krivka spájajúca všetky súvislé body pozdĺž hranice, ktorá má rovnakú farbu alebo intenzitu.

Skupinu slovných blokov možno považovať za obrys tejto farby; ak je spojené s viacerými blokmi rovnakej farby, bude plocha obrysu súčtom spojených slovných blokov.

Obrysy sa počítajú (pomocou funkcie findCountours v OpenCV) pre všetky farby bloku slov zvlášť a vyberie sa farba s maximálnou plochou.

Maximálnym obrysom oblasti môžeme zvoliť bitové operácie medzi snímanou obrazovkou a obrysovou maskou.

Detekcia slov (pomocou Tesseract a Word2Vec)

Obrysový obrázok sa prevedie do textu pomocou Tesseract OCR; v takom prípade nám to dá Garden .

Podobne ako v arkádovom režime, pomocou Word2Vec nájdeme najpodobnejšie slovo, ktorým budú kvetinové záhony .

Vylepšenia

V určitých scenároch súčasný proces OCR slovo nerozpozná správne.

Napríklad vráti „ Eloctrlclty“ pre tento obrys namiesto „ Electricity“ .

Vzhľadom na to, že ide o návrh neplatného slova, model Word2Vec zaň nevráti žiadne podobné slovo. V takom prípade sa samotné navrhované slovo zadá ako pridružené slovo, aby sa hra udržala v pohybe.

Tu môže pomôcť model korekcie pravopisu, ktorý opraví Eloctrlclty na elektrinu. Pre rovnaké som vytvoril problém v úložisku GitHub. Ak máte záujem, neváhajte prispieť. ?

Zdrojový kód

Semantris-Solver (GitHub)

Je implementovaný ako nástroj CLI, ktorý umožňuje prepínať medzi režimami hry. Môžete skontrolovať notebooky IPython implementujúce oba režimy.

  • ARCADE režim
  • Režim BLOKY

Závislosti

Bez nasledujúcich softvérových nástrojov nebolo možné vytvoriť Semantris-Solver.

  • OpenCV
  • Word2Vec (gensim)
  • pyautogui (vytvorenie snímky obrazovky a zadanie súvisiacich slov)
  • Tesseract (OCR)

Dúfam, že sa vám môj víkendový hackovací príbeh páčil. Neváhajte a poskytnite nám spätnú väzbu.

Sledujte ma na Twitteri Pravendra Singh alebo si pozrite moje osobné webové stránky hackpravj.com.