Sådan løses Googles Semantris-spil ved hjælp af OpenCV og Word2Vec

Skrivning af et program til afspilning af Google Semantris

Automatisering er god, så længe du ved præcis, hvor du skal placere maskinen. - Eliyahu Goldratt Semantris er et sæt ordassociationsspil fra Google, der bruger semantisk søgning til at forudsige et relevant ord i spillet baseret på spillerens input.

Der er 2 tilstande tilgængelige i spillet.

ARCADE

Arcade-tilstand kræver, at afspilleren kommer med tilknyttede ord til bestemte ord. Du skal tænke og gå ind så hurtigt som muligt, før en stigende liste med ord fylder din skærm.

BLOKER

Blocks er en turbaseret spiltilstand. Du kan tage dig tid til at komme med forskellige typer spor og se, hvilke spil spillet forstår bedst.

Efter at have spillet et stykke tid, indså jeg, at begge spiltilstande bruger mønstergenkendelse som den vigtigste spil-mekanisme. Det var da jeg begyndte at spekulere på, om det kunne automatiseres.

Det viser sig, det kan være

Semantris-Solver bruger følgende procedure til at spille spillet:

  • Optag den aktuelle spiltilstand ved hjælp af computersynteknikker
  • Identificer det ord, der skal indtastes for højere belønning / længere gameplay
  • Find det tilknyttede ord ved hjælp af ordindlejringer

I de følgende sektioner skal vi dykke ned i arbejdet med Semantris-Solver for begge spiltilstande.

ARCADE

En menneskelig spiller bruger følgende træk til at spille arkadetilstand:

  • Find et eller flere fremhævede ord i spillet
  • Få disse ord i det fremhævede område ved at indtaste det tilknyttede ord for dem
  • Fortsæt med at gøre dette, før du løber tør for plads på din skærm til nye ord
Der er også tre typer temafarver i arkadetilstand.

Du vil indse, at temafarven ikke spiller nogen rolle her - spillemekanismen forbliver den samme, hvis vi ændrer temafarven. Hvad der ændrer sig er definitionen af ​​det fremhævede ord.

Et ord fremhæves, hvis det har en markørform tilbage af det (▶ Send ) i dette tilfælde.

Konvertering af farverum

ARCADE-tilstand af Semantris-Solver starter med at tage et skærmbillede af den bærbare computerskærm og konvertere det til et gråskalabillede, agnostisk for den faktiske farve.

Skabelon matching

Vores næste trin vil være at finde det fremhævede ord i det optagne billede. OpenCV giver en metode kaldet Template Matching til at søge og finde placeringen af ​​et skabelonbillede i et større billede.

Vi bruger en beskåret version af markørformen (▶) som et skabelonbillede for at finde dets placering på den fangede skærm.

Optisk karaktergenkendelse (OCR)

Baseret på markørens placering beskæres et afsnit lige ved siden af ​​det med det fremhævede ord.

Det beskårne billede konverteres til tekst ved hjælp af Tesseract OCR; i dette tilfælde vil det give os Ship .

I tilfælde af mere end et fremhævet ord indtastes de efter hinanden for at holde spillet i bevægelse.

Tilknyttet ordvalg (Brug af Word-indlejring)

Word2Vec, der er foruddannet på Google News Corpus, bruges som en ordindlejringsmodel for at finde de mest lignende ord (tilknyttet) for et givet ord.

I dette tilfælde returnerer det " fartøj" for at indtaste som et tilknyttet ord for " skib" ( efter fjernelse af morfologisk lignende ord ).

Programmet indtaster dette tilknyttede ord og fanger den opdaterede spilskærm for at fortsætte.

BLOKER

I denne tilstand er der ordblokke med fire mulige farver til et givet tema. Ordblokkene indeholder måske eller måske ikke et ord i dem.

Indtastning af det tilknyttede ord for en ordblok fjerner de samme farvede blokke, der er forbundet til det, som den gode gamle Tetris .

En menneskelig spiller bruger følgende træk til at spille arkadetilstand:

  • Indtast det tilknyttede ord for en ordblok, der er forbundet med de fleste farvede ordblokke (hvis muligt)
  • Fortsæt med at gøre dette, før du løber tør for plads på din skærm til nye ord

Du vil indse, at farven på en ordblok spiller en vigtig rolle denne gang. Du bliver nødt til at indtaste det tilknyttede ord for en ordblok forbundet med flere samme farvede blokke for at score højere point.

Oven i dette er der tre typer temafarver i bloktilstand.

Generering af farvepalette

Denne gang kan vi ikke konvertere det optagede billede til dets gråskalaversion. Vi har brug for at kende farveattributterne for at kunne skelne mellem forskellige ordblokke.

At køre K-middel klyngedannelse på pixels på den optagede skærm giver os alle de fremtrædende farver i billedet efter at have ekskluderet baggrundsfarver som hvid (tekstfarve), sort (baggrundsfarve) og grå (tekstinput).

Konturregistrering

Nu hvor vi har alle de fire farver i det aktuelle tema, skal vi vide, hvilken ordblok der skal vælges for at få maksimale point.

Med andre ord, hvis vi beregner arealet for hver tilknyttet ordblokgruppe ( ordblokke af samme farve forbundet til hinanden ) og vælger den med det maksimale areal, får vi den ønskede forbundne ordblok -gruppe.

Kontur er en kurve, der forbinder alle de kontinuerlige punkter langs en grænse med samme farve eller intensitet.

En ordblokgruppe kan betragtes som en kontur af den farve; hvis den er forbundet med flere blokke med samme farve, vil konturens område være summen af ​​de tilsluttede ordblokke.

Konturer beregnes (ved hjælp af OpenCVs findCountours-funktion) for alle ordblokfarverne separat, og den med det maksimale areal vælges.

Vi kan vælge den maksimale arealkontur ved at udføre en bitvis-og-operation mellem den optagne skærm og konturmasken.

Ordregistrering (ved hjælp af Tesseract og Word2Vec)

Konturbilledet konverteres til tekst ved hjælp af Tesseract OCR; i dette tilfælde vil det give os haven .

I lighed med arkadetilstanden bruger vi Word2Vec til at finde det mest lignende ord til det, hvilket vil være blomsterbed denne gang.

Forbedringer

I visse scenarier genkender den nuværende OCR-proces ordet ikke korrekt.

For eksempel ville det returnere " Eloctrlclty" til denne kontur i stedet for " Elektricitet" .

Da det er et ugyldigt ordforslag, vil Word2Vec-modellen ikke returnere noget lignende ord for det. I så fald indtastes det foreslåede ord i sig selv som et tilknyttet ord, bare for at holde spillet i bevægelse.

En stavekorrektionsmodel kan hjælpe her, korrigere Eloctrlclty til elektricitet. Jeg har oprettet et problem på GitHub-arkivet til det samme, er du velkommen til at bidrage, hvis du vil. ?

Kildekode

Semantris-Solver (GitHub)

Det er implementeret som et CLI-værktøj, der giver dig mulighed for at skifte mellem spiltilstande. Du kan kontrollere IPython-notesbøgerne, der implementerer begge tilstande.

  • ARCADE-tilstand
  • BLOKER-tilstand

Afhængigheder

Det var ikke muligt at opbygge Semantris-Solver uden følgende softwareværktøjer.

  • OpenCV
  • Word2Vec (gensim)
  • pyautogui (tager skærmbilledet og indtaster tilknyttede ord)
  • Tesseract (OCR)

Håber du kunne lide min weekendhakhistorie. Du er velkommen til at give din feedback.

Følg mig på Twitter Pravendra Singh eller tjek min personlige hjemmeside hackpravj.com.