Πίνακας περιεχομένων:

Rock Paper Scissor AI: 11 Βήματα
Rock Paper Scissor AI: 11 Βήματα

Βίντεο: Rock Paper Scissor AI: 11 Βήματα

Βίντεο: Rock Paper Scissor AI: 11 Βήματα
Βίντεο: #spyxfamily daily cosplay anya 2024, Νοέμβριος
Anonim
Rock Paper Scissor AI
Rock Paper Scissor AI

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

Βήμα 1: Πράγματα που χρησιμοποιούνται σε αυτό το έργο

Συστατικά υλικού

  • Raspberry Pi 3 Μοντέλο B+ × 1
  • Μονάδα κάμερας Raspberry Pi V2 × 1
  • Μικρο-σερβοκινητήρας SG90 × 1

Εφαρμογές λογισμικού

  • Raspberry Pi Raspbian
  • OpenCV
  • TensorFlow

Βήμα 2: Ιδέα;

Image
Image

Αφού δούλεψα σε διάφορα έργα σε διαφορετικούς τομείς, σχεδίασα να κάνω ένα διασκεδαστικό έργο και αποφάσισα να φτιάξω ένα παιχνίδι ροκ-χαρτιού-ψαλιδιού:)

Σε αυτό το έργο, θα κάνουμε ένα διαδραστικό παιχνίδι και θα παίξουμε εναντίον του υπολογιστή που τροφοδοτείται από AI για τη λήψη αποφάσεων. Η AI χρησιμοποιεί την κάμερα που είναι συνδεδεμένη στο Raspberry Pi για να αναγνωρίσει τι κινεί ο χρήστης με το χέρι, να τους κατατάξει στην καλύτερη κατηγορία (ετικέτα) πέτρα, χαρτί ή ψαλίδι. Μόλις ο υπολογιστής κάνει την κίνησή του, ο βηματικός κινητήρας που συνδέεται με το Raspberry Pi δείχνει προς την κατεύθυνση με βάση την κίνησή του.

Κανόνες που πρέπει να ληφθούν υπόψη για αυτό το παιχνίδι:

  • Ο Ροκ αμβλύνει το ψαλίδι
  • Το χαρτί καλύπτει τον βράχο
  • Scαλίδι κομμένο χαρτί

Ο νικητής θα κριθεί βάσει των τριών παραπάνω προϋποθέσεων. Ας δούμε εδώ μια γρήγορη επίδειξη του έργου.

Βήμα 3: Ξεκινώντας;

Ξεκινώντας ?
Ξεκινώντας ?
Ξεκινώντας ?
Ξεκινώντας ?

Raspberry Pi

Έχω χρησιμοποιήσει ένα Raspberry Pi 3 Model B+ το οποίο έχει εξαιρετικές βελτιώσεις και είναι πιο ισχυρό από το προηγούμενο Raspberry Pi 3 Model B.

Το Raspberry Pi 3 B+ είναι ενσωματωμένο με τον τετραπύρηνο επεξεργαστή 1.4GHz 64-bit, ασύρματο LAN διπλής ζώνης, Bluetooth 4.2/BLE, ταχύτερο Ethernet και υποστήριξη Power-over-Ethernet (με ξεχωριστό PoE HAT).

Προδιαγραφές: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz, 1GB LPDDR2 SDRAM, 2.4GHz και 5GHz IEEE 802.11.b/g/n/ac ασύρματο LAN, Bluetooth 4.2, BLE, Gigabit Ethernet μέσω USB 2.0 (μέγιστη απόδοση 300 Mbps), η επεκταμένη κεφαλίδα GPIO 40 ακίδων, θύρες HDMI4 USB 2.0 πλήρους μεγέθους, θύρα κάμερας CSI για σύνδεση κάμερας Raspberry Pi, θύρα οθόνης DSI για σύνδεση οθόνης αφής Raspberry Pi 4-πόλων στερεοφωνική έξοδος και σύνθετη θύρα βίντεο, θύρα Micro SD για τη φόρτωση του λειτουργικού σας συστήματος και την αποθήκευση δεδομένων εισόδου ισχύος 5V/2.5A DC, υποστήριξη Power-over-Ethernet (PoE) (απαιτεί ξεχωριστό PoE HAT).

Βοηθητικό μοτέρ

Χρησιμοποιούμε έναν σερβοκινητήρα SG-90, έναν κινητήρα υψηλής ροπής που μπορεί να αντέξει το φορτίο έως 2,5kg (1cm).

Κάμερα USB

Μια κάμερα USB για να κάνει το παιχνίδι διαδραστικό με την επεξεργασία της εικόνας

Ορισμένα καλώδια Jumper χρησιμοποιούνται για την καλωδίωση του βηματικού κινητήρα και του Raspberry Pi.

Βήμα 4: Εγγραφή Raspbian στην κάρτα SD;

Εγγραφή Raspbian στην κάρτα SD
Εγγραφή Raspbian στην κάρτα SD
Εγγραφή Raspbian στην κάρτα SD
Εγγραφή Raspbian στην κάρτα SD
Εγγραφή Raspbian στην κάρτα SD
Εγγραφή Raspbian στην κάρτα SD

Το Raspbian είναι η διανομή επιλογής Linux που λειτουργεί στο Raspberry Pi. Σε αυτόν τον οδηγό, θα χρησιμοποιήσουμε την έκδοση Lite, αλλά η έκδοση Desktop (η οποία συνοδεύεται από γραφικό περιβάλλον) μπορεί επίσης να χρησιμοποιηθεί.

  • Κατεβάστε το Etcher και εγκαταστήστε το.
  • Συνδέστε μια συσκευή ανάγνωσης καρτών SD με την κάρτα SD που βρίσκεται μέσα.
  • Ανοίξτε το Etcher και επιλέξτε από το σκληρό σας δίσκο το αρχείο Raspberry Pi.img ή.zip που θέλετε να γράψετε στην κάρτα SD.
  • Επιλέξτε την κάρτα SD στην οποία θέλετε να γράψετε την εικόνα σας.
  • Ελέγξτε τις επιλογές σας και κάντε κλικ στο "Flash!" για να ξεκινήσετε την εγγραφή δεδομένων στην κάρτα SD.

Συνδέστε τη συσκευή στο δίκτυό σας

  • Ενεργοποιήστε την πρόσβαση SSH προσθέτοντας κενό αρχείο ssh, τοποθετημένο ξανά στη ρίζα του τόμου εκκίνησης στην κάρτα SD σας.
  • Τοποθετήστε την κάρτα SD στο Raspberry Pi. Θα ξεκινήσει σε περίπου 20 δευτερόλεπτα. Θα πρέπει τώρα να έχετε πρόσβαση SSH στο Raspberry Pi. Από προεπιλογή, το όνομα κεντρικού υπολογιστή του θα είναι raspberrypi.local. Στον υπολογιστή σας, ανοίξτε ένα παράθυρο τερματικού και πληκτρολογήστε τα εξής:

ssh [email protected]

Ο προεπιλεγμένος κωδικός πρόσβασης είναι βατόμουρο

Εδώ έχω χρησιμοποιήσει μια ξεχωριστή οθόνη για διασύνδεση με το Raspberry Pi.

Βήμα 5: Συλλογή συλλογής δεδομένων; ️

Συλλέξτε το σύνολο δεδομένων; ️
Συλλέξτε το σύνολο δεδομένων; ️
Συλλέξτε το σύνολο δεδομένων; ️
Συλλέξτε το σύνολο δεδομένων; ️

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

Εγκαθιστούμε αρκετές βιβλιοθήκες στο Raspberry Pi χρησιμοποιώντας pip install

εντολή.

sudo apt-get ενημέρωση && sudo apt-get αναβαθμίσειςudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev pip install opencv pip install numpy pip install scikit-learn pip install scikit-image pip install h5py pip install Keras pip εγκατάσταση tensorflow pip install Werkzeug pip install Keras-Applications pip install Keras-Preprocessing pip install keras-squeezenet pip install astor pip install tensorboard pip install tensorflow-εκτιμητής pip install mock pip install grpcio pip install absl-pypip install gast pip install joblib pip install Markdown pip install protobuf pip install PyYAML pip install six

Εάν αντιμετωπίζετε προβλήματα με το OpenCVpackage, συνιστώ ανεπιφύλακτα την εγκατάσταση αυτών των πακέτων.

sudo apt-get install libhdf5-dev

sudo apt-get install libhdf5-serial-dev sudo apt-get install libatlas-base-dev sudo apt-get install libjasper-dev sudo apt-get install libqtgui4 sudo apt-get install libqt4-test

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

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

roi = πλαίσιο [100: 500, 100: 500]

save_path = os.path.join (img_class_path, '{}.jpg'.format (count + 1)) cv2.imwrite (save_path, roi)

Η εικόνα καταγράφεται για κάθε ετικέτα (πέτρα, χαρτί, ψαλίδι και Καμία).

Βήμα 6: Σχεδιασμός NN & Εκπαίδευση του Μοντέλου ⚒️⚙️

Σχεδιασμός NN & Εκπαίδευση του Μοντέλου ⚒️⚙️
Σχεδιασμός NN & Εκπαίδευση του Μοντέλου ⚒️⚙️

Ο πυρήνας αυτού του έργου είναι ένας ταξινομητής εικόνας που ταξινομεί μία από τις τρεις κατηγορίες. Για να φτιάξουμε αυτόν τον ταξινομητή, χρησιμοποιούμε το προ-εκπαιδευμένο CNN (Convolutional Network) που ονομάζεται SqueezeNet.

Εδώ χρησιμοποιούμε το Keras και το TensorFlow για να δημιουργήσουμε το μοντέλο SqueezeNet που μπορεί να προσδιορίσει τη χειρονομία. Οι εικόνες που δημιουργήσαμε στο προηγούμενο βήμα χρησιμοποιούνται για την εκπαίδευση του μοντέλου. Το μοντέλο εκπαιδεύεται χρησιμοποιώντας το σύνολο δεδομένων που δημιουργήθηκε για καμία από τις περιόδους (κύκλους) που αναφέρονται.

Το μοντέλο έχει διαμορφωθεί με τις υπερπαραμέτρους όπως φαίνεται παρακάτω.

μοντέλο = Διαδοχικό ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Διακοπή (0,5), Convolution2D (NUM_CLASSES, (1, 1), padding = 'valid'), Ενεργοποίηση ('relu'), GlobalAveragePooling2D (), Ενεργοποίηση («softmax»)])

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

Χρειάστηκαν περίπου 2 ώρες για να δημιουργηθεί το μοντέλο με την υψηλότερη ακρίβεια μετά από 10 εποχές. Εάν αντιμετωπίζετε σφάλματα κατανομής μνήμης, κάντε τα ακόλουθα βήματα (Χάρη στον Adrian)

Για να αυξήσετε τον χώρο ανταλλαγής, ανοίξτε το αρχείο /etc /dphys-swapfile και, στη συνέχεια, επεξεργαστείτε τη μεταβλητή CONF_SWAPSIZE:

# CONF_SWAPSIZE = 100

CONF_SWAPSIZE = 1024

Παρατηρήστε ότι αυξάνω το swap από 100MB σε 1024MB. Από εκεί, επανεκκινήστε την υπηρεσία ανταλλαγής:

$ sudo /etc/init.d/dphys-swapfile stop

$ sudo /etc/init.d/dphys-swapfile έναρξη

Σημείωση:

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

Βήμα 7: Δοκιμή του μοντέλου

Δοκιμή του μοντέλου
Δοκιμή του μοντέλου
Δοκιμή του μοντέλου
Δοκιμή του μοντέλου
Δοκιμή του μοντέλου
Δοκιμή του μοντέλου

Μόλις δημιουργηθεί το μοντέλο, παράγει το αρχείο εξόδου "rock-paper-scissors-model.h5". Αυτό το αρχείο χρησιμοποιείται ως πηγή για να ελέγξει εάν το σύστημα μπορεί να εντοπίσει διαφορετικές χειρονομίες και να διαφοροποιήσει τις ενέργειες.

Το μοντέλο φορτώνεται στο σενάριο python ως εξής

μοντέλο = load_model ("rock-paper-scissors-model.h5")

Η κάμερα διαβάζει τη δοκιμαστική εικόνα και μετατρέπει το απαιτούμενο μοντέλο χρώματος και, στη συνέχεια, αλλάζει το μέγεθος της εικόνας σε 227 x 227 pixel (Το ίδιο μέγεθος χρησιμοποιείται για τη δημιουργία μοντέλου). Οι εικόνες που χρησιμοποιήθηκαν για την εκπαίδευση του μοντέλου μπορούν να χρησιμοποιηθούν για τον έλεγχο του παραγόμενου μοντέλου.

img = cv2.imread (διαδρομή αρχείου)

img = cv2.cvtColor (img, cv2. COLOR_BGR2RGB) img = cv2.resize (img, (227, 227))

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

pred = model.predict (np.array ())

move_code = np.argmax (προ [0]) move_name = mapper (move_code) εκτύπωση ("Προβλέπεται: {}". μορφή (move_name))

Εκτελέστε το σενάριο test.py για να δοκιμάσετε το μοντέλο με διάφορες δοκιμαστικές εικόνες.

python3 test.py

Τώρα το μοντέλο είναι έτοιμο να εντοπίσει και να κατανοήσει τις χειρονομίες.

Βήμα 8: Παιχνίδι Rock-Paper-ψαλίδι

Παιχνίδι ροκ-χαρτιού-ψαλιδιού
Παιχνίδι ροκ-χαρτιού-ψαλιδιού

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

cap = cv2. VideoCapture (0) # Για λήψη εικόνας από την κάμερα

Τώρα ας κάνουμε το παιχνίδι σε Κανονική λειτουργία όπου το σύστημα/ Raspberry Pi τραβάει την εικόνα του χεριού και αναλύει και προσδιορίζει την κίνηση του χεριού. Στη συνέχεια, χρησιμοποιώντας μια γεννήτρια τυχαίων αριθμών, παίζεται η κίνηση του υπολογιστή. Ο νικητής επιλέγεται με βάση τους κανόνες και στη συνέχεια εμφανίζεται στην οθόνη. Ξεκινήστε το παιχνίδι χρησιμοποιώντας την ακόλουθη εντολή.

python3 play.py

Βήμα 9: Ενσωμάτωση Servo Motor;

Τέλος, προσθέστε τον σερβοκινητήρα σε αυτό το έργο. Ο σερβοκινητήρας είναι ο ακροδέκτης GPIO 17 του Raspberry Pi, ο οποίος διαθέτει τη λειτουργία PWM για τον έλεγχο της γωνίας περιστροφής.

Το Servo Motor που χρησιμοποιείται σε αυτό το έργο είναι SG-90. Μπορεί να κάνει περιστροφές δεξιόστροφα και αριστερόστροφα έως 180 °

Οι Συνδέσεις δίνονται ως εξής.

Servo Motor - Raspberry Pi

Vcc - +5V

GND - GND

Σήμα - GPIO17

Οι βιβλιοθήκες όπως το RPi. GPIO και ο χρόνος χρησιμοποιούνται σε αυτό το έργο.

εισαγωγή RPi. GPIO ως GPIO

χρόνο εισαγωγής

Στη συνέχεια, ο ακροδέκτης GPIO διαμορφώνεται σε PWM χρησιμοποιώντας τις ακόλουθες γραμμές

servoPIN = 17

GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN, GPIO. OUT)

Το GPIO Pin 17 έχει ρυθμιστεί για χρήση ως PWM στη συχνότητα των 50Hz. Η γωνία του σερβοκινητήρα επιτυγχάνεται ρυθμίζοντας τον κύκλο λειτουργίας (Ton & Toff) του PWM

καθήκον = γωνία/18 + 2

GPIO.output (servoPIN, True) σελ. ChangeDutyCycle (καθήκον) time.sleep (1) GPIO.output (servoPIN, False) σελ. ChangeDutyCycle (0)

Αυτό θα παράγει την επιθυμητή γωνία βημάτων για κάθε παλμό, η οποία θα δώσει την επιθυμητή γωνία περιστροφής.

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

Βήμα 10: Εργασία του Έργου;

Image
Image

Και τώρα, είναι ώρα παιχνιδιού. Ας δούμε τη λειτουργία του έργου.

Αν αντιμετωπίσατε προβλήματα κατά την κατασκευή αυτού του έργου, μη διστάσετε να με ρωτήσετε. Παρακαλώ προτείνετε νέα έργα που θέλετε να κάνω στη συνέχεια.

Δώστε μπράβο αν πραγματικά σας βοήθησε και ακολουθήστε το κανάλι μου για ενδιαφέροντα έργα.:)

Μοιραστείτε αυτό το βίντεο αν σας αρέσει.

Χαίρομαι που εγγραφείτε:

Ευχαριστώ για την ανάγνωση!

Βήμα 11: Κωδικός - Project Repo

Ο κώδικας προστίθεται στο αποθετήριο GitHub το οποίο μπορείτε να βρείτε στην ενότητα κώδικα.

Rahul24-06/Rock-Paper-Scissors-https://github.com/Rahul24-06/Rock-Paper-Scissors

Συνιστάται: