Πώς να λύσετε το παιχνίδι Semantris της Google χρησιμοποιώντας OpenCV και Word2Vec

Γράφοντας ένα πρόγραμμα για να παίξετε το Google Semantris

Ο αυτοματισμός είναι καλός, αρκεί να γνωρίζετε ακριβώς πού να τοποθετήσετε το μηχάνημα. - Το Eliyahu GoldrattSemantris είναι ένα σύνολο παιχνιδιών συσχέτισης λέξεων από την Google που χρησιμοποιούν σημασιολογική αναζήτηση για να προβλέψουν μια σχετική λέξη στο παιχνίδι με βάση την είσοδο του παίκτη.

Υπάρχουν 2 τρόποι διαθέσιμοι στο παιχνίδι.

ΣΤΟΑ

Η λειτουργία Arcade απαιτεί από τον παίκτη να βρει σχετικές λέξεις για συγκεκριμένες λέξεις. Υποτίθεται ότι πρέπει να σκεφτείτε και να εισαγάγετε όσο πιο γρήγορα μπορείτε πριν από μια αυξανόμενη λίστα λέξεων γεμίσει την οθόνη σας.

Μπλοκ

Το Blocks είναι μια λειτουργία παιχνιδιού με βάση τη σειρά. Μπορείτε να αφιερώσετε το χρόνο σας για να βρείτε διαφορετικούς τύπους ενδείξεων και να δείτε ποιες είναι αυτές που το παιχνίδι κατανοεί καλύτερα.

Αφού έπαιξα για λίγο, συνειδητοποίησα ότι και οι δύο τρόποι παιχνιδιού χρησιμοποιούν την αναγνώριση προτύπων ως τον κύριο μηχανισμό παιχνιδιού. Τότε άρχισα να αναρωτιέμαι αν θα μπορούσε να αυτοματοποιηθεί.

Αποδεικνύεται, μπορεί να είναι

Το Semantris-Solver χρησιμοποιεί την ακόλουθη διαδικασία για να παίξει το παιχνίδι:

  • Καταγράψτε την τρέχουσα κατάσταση παιχνιδιού χρησιμοποιώντας τεχνικές όρασης υπολογιστή
  • Προσδιορίστε τη λέξη που θέλετε να εισαγάγετε για παιχνίδι υψηλότερης ανταμοιβής / μεγαλύτερης διάρκειας
  • Βρείτε τη σχετική λέξη χρησιμοποιώντας ενσωματώσεις λέξεων

Στις ακόλουθες ενότητες, θα βρούμε τη λειτουργία του Semantris-Solver και για τους δύο τρόπους παιχνιδιού.

ΣΤΟΑ

Ένας ανθρώπινος παίκτης θα χρησιμοποιήσει τις ακόλουθες κινήσεις για να παίξει τη λειτουργία arcade:

  • Βρείτε μία ή περισσότερες επισημασμένες λέξεις στο παιχνίδι
  • Λάβετε αυτές τις λέξεις στην επισημασμένη περιοχή εισάγοντας τη σχετική λέξη για αυτές
  • Συνεχίστε να το κάνετε προτού εξαντληθεί ο χώρος στην οθόνη σας για νέες λέξεις
Επίσης, υπάρχουν τρεις τύποι χρωμάτων θέματος σε λειτουργία arcade.

Θα συνειδητοποιήσετε ότι το χρώμα του θέματος δεν παίζει ρόλο εδώ - ο μηχανισμός παιχνιδιού θα παραμείνει ο ίδιος αν αλλάξουμε το χρώμα του θέματος. Αυτό που αλλάζει είναι ο ορισμός της επισημασμένης λέξης.

Μια λέξη επισημαίνεται εάν έχει αριστερό σχήμα δείκτη, (▶ Αποστολή ) σε αυτήν την περίπτωση.

Μετατροπή χρωματικού χώρου

Η λειτουργία ARCADE του Semantris-Solver ξεκινά με τη λήψη ενός στιγμιότυπου οθόνης της οθόνης του φορητού υπολογιστή και τη μετατροπή του σε μια εικόνα γκρι κλίμακας, αγνωστικιστική του πραγματικού χρώματος.

Αντιστοίχιση προτύπου

Το επόμενο βήμα μας θα είναι να βρούμε την επισημασμένη λέξη στην καταγεγραμμένη εικόνα. Το OpenCV παρέχει μια μέθοδο που ονομάζεται Template Matching για αναζήτηση και εύρεση της θέσης μιας εικόνας προτύπου σε μια μεγαλύτερη εικόνα.

Θα χρησιμοποιήσουμε μια περικομμένη έκδοση του σχήματος δείκτη (▶) ως εικόνα προτύπου, για να βρούμε τη θέση της στην καταγεγραμμένη οθόνη.

Οπτική αναγνώριση χαρακτήρων (OCR)

Με βάση την τοποθεσία του δείκτη, μια ενότητα περικόπτεται ακριβώς δίπλα του, με την επισημασμένη λέξη.

Η περικομμένη εικόνα μετατρέπεται σε κείμενο χρησιμοποιώντας Tesseract OCR. σε αυτή την περίπτωση, θα μας στείλει .

Σε περίπτωση που υπάρχουν περισσότερες από μία επισημασμένες λέξεις, εισάγονται το ένα μετά το άλλο για να διατηρήσουν το παιχνίδι σε κίνηση.

Συσχετισμένη επιλογή λέξεων (Χρήση ενσωματώσεων Word)

Το Word2Vec προ-εκπαιδευμένο στις Ειδήσεις Google χρησιμοποιείται ως μοντέλο ενσωμάτωσης λέξεων για να βρει τις πιο παρόμοιες λέξεις (συσχετιζόμενες) για μια δεδομένη λέξη.

Σε αυτήν την περίπτωση, θα επιστρέψει το « πλοίο» για να εισαχθεί ως συσχετισμένη λέξη για το « πλοίο» ( μετά την αφαίρεση μορφολογικά παρόμοιων λέξεων ).

Το πρόγραμμα θα εισαγάγει αυτήν τη σχετική λέξη και θα καταγράψει την ενημερωμένη οθόνη παιχνιδιού για να συνεχίσει.

Μπλοκ

Σε αυτήν τη λειτουργία, υπάρχουν μπλοκ λέξεων με τέσσερα πιθανά χρώματα για ένα συγκεκριμένο θέμα. Τα μπλοκ λέξεων μπορεί να περιέχουν ή να μην περιέχουν λέξη σε αυτά.

Η εισαγωγή της σχετικής λέξης για ένα μπλοκ λέξεων θα αφαιρέσει τα ίδια χρωματισμένα μπλοκ που είναι συνδεδεμένα σε αυτήν, όπως το παλιό καλό Tetris .

Ένας ανθρώπινος παίκτης θα χρησιμοποιήσει τις ακόλουθες κινήσεις για να παίξει τη λειτουργία arcade:

  • Εισαγάγετε τη σχετική λέξη για ένα μπλοκ λέξεων, συνδεδεμένο με τα περισσότερα ίδια μπλοκ λέξεων (εάν είναι δυνατόν)
  • Συνεχίστε να το κάνετε προτού εξαντληθεί ο χώρος στην οθόνη σας για νέες λέξεις

Θα συνειδητοποιήσετε ότι το χρώμα ενός μπλοκ λέξεων παίζει σημαντικό ρόλο αυτή τη φορά. Θα πρέπει να εισαγάγετε τη σχετική λέξη για ένα μπλοκ λέξεων που συνδέεται με πιο ίδια χρωματισμένα μπλοκ για να κερδίσετε υψηλότερους πόντους.

Επιπλέον, υπάρχουν τρεις τύποι χρωμάτων θέματος σε λειτουργία μπλοκ.

Δημιουργία παλέτας χρωμάτων

Αυτή τη φορά δεν μπορούμε να μετατρέψουμε την καταγεγραμμένη εικόνα σε έκδοση γκρι κλίμακας. Πρέπει να γνωρίζουμε τα χαρακτηριστικά χρώματος για να μπορούμε να κάνουμε διάκριση μεταξύ διαφορετικών μπλοκ λέξεων.

Η εκτέλεση ομαδοποίησης K-mean στα pixel της συλλαμβανόμενης οθόνης θα μας δώσει όλα τα εμφανή χρώματα στην εικόνα αφού εξαιρέσουμε τα χρώματα φόντου όπως το λευκό (χρώμα κειμένου), το μαύρο (χρώμα φόντου) και το γκρι (εισαγωγή κειμένου).

Ανίχνευση περιγράμματος

Τώρα που έχουμε και τα τέσσερα χρώματα στο τρέχον θέμα, πρέπει να γνωρίζουμε ποιο μπλοκ λέξεων να επιλέξουμε για να λάβουμε τους μέγιστους βαθμούς.

Με άλλα λόγια, εάν υπολογίσουμε την περιοχή κάθε ομάδας συνδεδεμένης λέξης-μπλοκ ( μπλοκ λέξεων του ίδιου χρώματος που συνδέονται μεταξύ τους ) και επιλέξουμε αυτήν με τη μέγιστη περιοχή, θα λάβουμε το επιθυμητό μπλοκ συνδεδεμένης λέξης -ομάδα.

Το περίγραμμα είναι μια καμπύλη που ενώνει όλα τα συνεχή σημεία κατά μήκος ενός ορίου, με το ίδιο χρώμα ή ένταση.

Μια ομάδα μπλοκ λέξεων μπορεί να θεωρηθεί περίγραμμα αυτού του χρώματος. εάν είναι συνδεδεμένο σε περισσότερα μπλοκ με το ίδιο χρώμα, η περιοχή του περιγράμματος θα είναι το άθροισμα των συνδεδεμένων μπλοκ λέξεων.

Τα περιγράμματα υπολογίζονται (χρησιμοποιώντας τη λειτουργία findCountours του OpenCV) για όλα τα χρώματα μπλοκ λέξεων ξεχωριστά και επιλέγεται αυτό με τη μέγιστη περιοχή.

Μπορούμε να επιλέξουμε το μέγιστο περίγραμμα της περιοχής κάνοντας ένα δεξιόστροφο και λειτουργία ανάμεσα στην καταγεγραμμένη οθόνη και τη μάσκα περιγράμματος.

Ανίχνευση λέξεων (Χρήση Tesseract και Word2Vec)

Η εικόνα του περιγράμματος μετατρέπεται σε κείμενο χρησιμοποιώντας το Tesseract OCR. σε αυτήν την περίπτωση, θα μας δώσει τον Κήπο .

Παρόμοια με τη λειτουργία arcade, θα χρησιμοποιήσουμε το Word2Vec για να βρούμε την πιο παρόμοια λέξη με αυτήν, η οποία θα είναι παρτέρια αυτή τη φορά.

Βελτιώσεις

Σε ορισμένα σενάρια, η τρέχουσα διαδικασία OCR δεν αναγνωρίζει σωστά τη λέξη.

Για παράδειγμα, θα επέστρεφε " Eloctrlclty" για αυτό το περίγραμμα αντί για " Ηλεκτρική ενέργεια" .

Δεδομένου ότι πρόκειται για μη έγκυρη πρόταση λέξεων, το μοντέλο Word2Vec δεν θα επιστρέψει παρόμοια λέξη για αυτό. Σε αυτήν την περίπτωση, η ίδια η προτεινόμενη λέξη εισάγεται ως συσχετισμένη λέξη, για να συνεχίσει το παιχνίδι να κινείται.

Ένα μοντέλο ορθογραφικής διόρθωσης μπορεί να βοηθήσει εδώ, διορθώνοντας το Eloctrlclty σε Ηλεκτρικό. Έχω δημιουργήσει ένα ζήτημα στο αποθετήριο GitHub για το ίδιο, μη διστάσετε να συνεισφέρετε αν θέλετε. ;

Πηγαίος κώδικας

Semantris-Solver (GitHub)

Εφαρμόζεται ως εργαλείο CLI που σας επιτρέπει να κάνετε εναλλαγή μεταξύ των τρόπων παιχνιδιού. Μπορείτε να ελέγξετε τους φορητούς υπολογιστές IPython που εφαρμόζουν και τις δύο λειτουργίες.

  • Λειτουργία ARCADE
  • Λειτουργία μπλοκ

Εξαρτήσεις

Δεν ήταν δυνατή η κατασκευή Semantris-Solver χωρίς τα ακόλουθα εργαλεία λογισμικού.

  • OpenCV
  • Word2Vec (gensim)
  • pyautogui (λήψη του στιγμιότυπου οθόνης και εισαγωγή σχετικών λέξεων)
  • Tesseract (OCR)

Ελπίζω να σας άρεσε η ιστορία μου για το σαββατοκύριακο. Μη διστάσετε να δώσετε τα σχόλιά σας.

Ακολουθήστε με στο Twitter Pravendra Singh ή ελέγξτε τον προσωπικό μου ιστότοπο hackpravj.com.