de Pravendra Singh

Cum se rezolvă jocul Google Semantris folosind OpenCV și Word2Vec

Scrierea unui program pentru redarea Google Semantris

Cum se rezolva jocul Google Semantris folosind OpenCV si Word2Vec

Automatizarea este bună, atâta timp cât știți exact unde să puneți mașina. – Eliyahu Goldratt

Semantris este un set de jocuri de asociere a cuvintelor de la Google care utilizează căutarea semantică pentru a prezice un cuvânt relevant din joc pe baza intrării jucătorului.

Există 2 moduri disponibile în joc.

ARCADĂ

Modul Arcade impune jucătorului să vină cu cuvinte asociate pentru anumite cuvinte. Trebuie să gândești și să intri cât de repede poți înainte ca o listă tot mai mare de cuvinte să îți umple ecranul.

Cum se rezolva jocul Google Semantris folosind OpenCV si Word2Vec
Modul Semantris ARCADE

BLOCURI

Blocks este un mod de joc bazat pe ture. Vă puteți lua timp pentru a veni cu diferite tipuri de indicii și pentru a vedea care dintre ele înțelege cel mai bine jocul.

1611954910 392 Cum se rezolva jocul Google Semantris folosind OpenCV si Word2Vec
Modul Semantris BLOCURI

După ce am jucat o vreme, mi-am dat seama că ambele moduri de joc sunt folosite recunoașterea modelelor ca principal mecanism de joc. Atunci am început să mă întreb dacă poate fi automatizat.

Se pare că se poate

Semantris-Solver folosește următoarea procedură pentru a juca jocul:

  • Capturați starea curentă a jocului folosind tehnici de viziune computerizată
  • Identificați cuvântul pe care trebuie să îl introduceți pentru un joc cu recompensă mai mare / mai lung
  • Găsiți cuvântul asociat folosind încorporări de cuvinte

În secțiunile următoare, ne vom scufunda în funcționarea Semantris-Solver pentru ambele moduri de joc.

ARCADĂ

Un jucător uman va folosi următoarele mișcări pentru a juca modul arcade:

  • Găsiți unul sau mai multe cuvinte evidențiate în joc
  • Obțineți aceste cuvinte în zona evidențiată introducând cuvântul asociat pentru acestea
  • Continuați să faceți acest lucru înainte de a rămâne fără spațiu pe ecran pentru cuvinte noi

De asemenea, există trei tipuri de culori de temă în modul arcade.

Cum se rezolva jocul Google Semantris folosind OpenCV si Word2Vec
Culorile temei Semantris ARCADE

Vă veți da seama că culoarea temei nu joacă niciun rol aici – mecanismul de joc va rămâne același dacă schimbăm culoarea temei. Ceea ce se schimbă este definiția cuvântului evidențiat.

Un cuvânt este evidențiat dacă are o formă de pointer lăsată, (▶ Navă) în acest caz.

Conversia spațiului de culoare

Modul ARCADE al Semantris-Solver începe cu capturarea unei capturi de ecran a ecranului laptopului și transformarea acestuia într-o imagine la scară de gri, agnostică a culorii reale.

Cum se rezolva jocul Google Semantris folosind OpenCV si Word2Vec
Modul Semantris ARCADE (scară de gri)

Potrivirea șabloanelor

Următorul nostru pas va fi să găsim cuvântul evidențiat în imaginea capturată. OpenCV oferă o metodă numită Potrivirea șabloanelor pentru căutarea și găsirea locației unei imagini șablon într-o imagine mai mare.

Vom folosi o versiune decupată a formei indicatorului (▶) ca imagine șablon, pentru a găsi locația sa în ecranul capturat.

1611954911 582 Cum se rezolva jocul Google Semantris folosind OpenCV si Word2Vec
Semantris ARCADE a evidențiat selectarea cuvintelor

Recunoașterea optică a caracterelor (OCR)

1611954912 178 Cum se rezolva jocul Google Semantris folosind OpenCV si Word2Vec
Imagine de cuvânt evidențiată

Pe baza locației indicatorului, o secțiune este decupată chiar lângă acesta, cu cuvântul evidențiat.

Imaginea decupată este convertită în text folosind Tesseract OCR; în acest caz, ne va da Navă.

În cazul mai multor cuvinte evidențiate, acestea sunt introduse una după alta pentru a menține jocul în mișcare.

Selectarea cuvintelor asociate (folosirea încorporărilor Word)

Word2Vec pre-instruit în corpusul Google News este folosit ca model de încorporare a cuvântului pentru a găsi cele mai asemănătoare cuvinte (asociate) pentru un cuvânt dat.

În acest caz, va reveni „navă” a introduce ca cuvânt asociat pentru „navă” (după înlăturarea cuvintelor morfologic similare).

Programul va introduce acest cuvânt asociat și va captura ecranul actualizat al jocului pentru a continua.

BLOCURI

În acest mod, există blocuri de cuvinte cu patru culori posibile pentru o temă dată. Blocurile de cuvinte pot conține sau nu un cuvânt în ele.

Introducerea cuvântului asociat pentru un bloc de cuvinte va elimina aceleași blocuri colorate conectate la acesta, ca vechiul bun Tetris.

Un jucător uman va folosi următoarele mișcări pentru a juca modul arcade:

  • Introduceți cuvântul asociat pentru un bloc de cuvinte, conectat cu majoritatea blocurilor de cuvinte de aceeași culoare (dacă este posibil)
  • Continuați să faceți acest lucru înainte de a rămâne fără spațiu pe ecran pentru cuvinte noi
1611954912 809 Cum se rezolva jocul Google Semantris folosind OpenCV si Word2Vec
Ecran capturat modul Semantris BLOCKS

Vă veți da seama că culoarea unui bloc de cuvinte joacă un rol semnificativ de data aceasta. Va trebui să introduceți cuvântul asociat pentru un bloc de cuvinte conectat cu mai multe blocuri de aceeași culoare pentru a înscrie puncte mai mari.

În plus, există trei tipuri de culori de temă în modul blocuri.

1611954912 774 Cum se rezolva jocul Google Semantris folosind OpenCV si Word2Vec
Semantris BLOCKS culori de temă

Generarea paletei de culori

De data aceasta nu putem converti imaginea capturată în versiunea sa la scară de gri. Trebuie să cunoaștem atributele de culoare pentru a putea distinge între diferite blocuri de cuvinte.

Alergare K-grupare medie pe pixelii ecranului capturat ne va oferi toate culorile proeminente din imagine după excluderea culorilor de fundal, cum ar fi alb (text-culoare), negru (fundal-culoare) și gri (text-introducere).

1611954913 151 Cum se rezolva jocul Google Semantris folosind OpenCV si Word2Vec
Paleta de culori a temei Semantris BLOCKS

Detectarea conturului

Acum că avem toate cele patru culori din tema curentă, trebuie să știm ce bloc de cuvinte să alegem pentru a obține maximum de puncte.

Cu alte cuvinte, dacă calculăm aria fiecărui grup de blocuri de cuvinte conectate (blocuri de cuvinte de aceeași culoare conectate între ele) și selectați-o pe cea cu suprafața maximă, vom obține grupul dorit conectat-cuvânt-bloc.

Contur este o curbă care unește toate punctele continue de-a lungul unei limite, având aceeași culoare sau intensitate.

Un grup de blocuri de cuvinte poate fi considerat un contur de acea culoare; dacă este conectat la mai multe blocuri cu aceeași culoare, aria conturului va fi suma blocurilor de cuvinte conectate.

1611954914 605 Cum se rezolva jocul Google Semantris folosind OpenCV si Word2Vec
Modul Semantris BLOCURI cu contur de suprafață maximă evidențiat

Contururile sunt calculate (folosind OpenCV’s findCountours funcție) pentru toate culorile blocului de cuvinte separat și este selectată cea cu aria maximă.

Putem selecta suprafața maximă a conturului făcând o acțiune în sensul bitului și operațiunea dintre ecranul capturat și masca de contur.

1611954914 133 Cum se rezolva jocul Google Semantris folosind OpenCV si Word2Vec
Conturul suprafeței maxime

Detectarea cuvintelor (folosind Tesseract și Word2Vec)

Imaginea conturului este convertită în text folosind Tesseract OCR; în acest caz, ne va da Grădină.

Similar modului arcade, vom folosi Word2Vec pentru a găsi cel mai similar cuvânt cu acesta, care va fi Paturi de flori de data asta.

Îmbunătățiri

1611954914 856 Cum se rezolva jocul Google Semantris folosind OpenCV si Word2Vec
Conturează cu OCR eșuat

În anumite scenarii, procesul curent OCR nu recunoaște cuvântul în mod corespunzător.

De exemplu, s-ar returna „Eloctrlclty ” pentru acest contur în loc de „Electricitate”.

Având în vedere că este o sugestie de cuvânt nevalidă, modelul Word2Vec nu va returna niciun cuvânt similar pentru acesta. În acest caz, cuvântul sugerat în sine este introdus ca un cuvânt asociat, doar pentru a menține jocul în mișcare.

Un model de corectare a ortografiei poate ajuta aici, corectând Eloctrlclty la Electricitate.

Am creat un problema în depozitul GitHub pentru același lucru, nu ezitați să contribuiți dacă doriți. ?

Cod sursa

Semantris-Solver (GitHub)

Este implementat ca un instrument CLI care vă permite să comutați între modurile de joc. Puteți verifica Caiete IPython implementând ambele moduri.

Dependențe

Nu a fost posibil să construim Semantris-Solver fără următoarele instrumente software.

  • OpenCV
  • Word2Vec (gensim)
  • pyautogui (realizarea capturii de ecran și introducerea cuvintelor asociate)
  • Tesseract (OCR)

Sper că ți-a plăcut povestea mea de hack de weekend. Simțiți-vă liber să ne oferiți feedback.

Urmăriți-mă pe Twitter Pravendra Singh sau verificați site-ul meu personal hackpravj.com.