Πίνακας περιεχομένων:
- Βήμα 1: Πράγματα που χρησιμοποιούνται σε αυτό το έργο
- Βήμα 2: Ιδέα;
- Βήμα 3: Ξεκινώντας;
- Βήμα 4: Εγγραφή Raspbian στην κάρτα SD;
- Βήμα 5: Συλλογή συλλογής δεδομένων; ️
- Βήμα 6: Σχεδιασμός NN & Εκπαίδευση του Μοντέλου ⚒️⚙️
- Βήμα 7: Δοκιμή του μοντέλου
- Βήμα 8: Παιχνίδι Rock-Paper-ψαλίδι
- Βήμα 9: Ενσωμάτωση Servo Motor;
- Βήμα 10: Εργασία του Έργου;
- Βήμα 11: Κωδικός - Project Repo
Βίντεο: Rock Paper Scissor AI: 11 Βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:34
Έχετε νιώσει ποτέ βαρεθεί μόνος; Ας παίξουμε ροκ, χαρτί και ψαλίδι ενάντια σε ένα διαδραστικό σύστημα που λειτουργεί με ευφυΐα.
Βήμα 1: Πράγματα που χρησιμοποιούνται σε αυτό το έργο
Συστατικά υλικού
- Raspberry Pi 3 Μοντέλο B+ × 1
- Μονάδα κάμερας Raspberry Pi V2 × 1
- Μικρο-σερβοκινητήρας SG90 × 1
Εφαρμογές λογισμικού
- Raspberry Pi Raspbian
- OpenCV
- TensorFlow
Βήμα 2: Ιδέα;
Αφού δούλεψα σε διάφορα έργα σε διαφορετικούς τομείς, σχεδίασα να κάνω ένα διασκεδαστικό έργο και αποφάσισα να φτιάξω ένα παιχνίδι ροκ-χαρτιού-ψαλιδιού:)
Σε αυτό το έργο, θα κάνουμε ένα διαδραστικό παιχνίδι και θα παίξουμε εναντίον του υπολογιστή που τροφοδοτείται από 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 είναι η διανομή επιλογής 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. Στον υπολογιστή σας, ανοίξτε ένα παράθυρο τερματικού και πληκτρολογήστε τα εξής:
Ο προεπιλεγμένος κωδικός πρόσβασης είναι βατόμουρο
Εδώ έχω χρησιμοποιήσει μια ξεχωριστή οθόνη για διασύνδεση με το 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 & Εκπαίδευση του Μοντέλου ⚒️⚙️
Ο πυρήνας αυτού του έργου είναι ένας ταξινομητής εικόνας που ταξινομεί μία από τις τρεις κατηγορίες. Για να φτιάξουμε αυτόν τον ταξινομητή, χρησιμοποιούμε το προ-εκπαιδευμένο 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: Εργασία του Έργου;
Και τώρα, είναι ώρα παιχνιδιού. Ας δούμε τη λειτουργία του έργου.
Αν αντιμετωπίσατε προβλήματα κατά την κατασκευή αυτού του έργου, μη διστάσετε να με ρωτήσετε. Παρακαλώ προτείνετε νέα έργα που θέλετε να κάνω στη συνέχεια.
Δώστε μπράβο αν πραγματικά σας βοήθησε και ακολουθήστε το κανάλι μου για ενδιαφέροντα έργα.:)
Μοιραστείτε αυτό το βίντεο αν σας αρέσει.
Χαίρομαι που εγγραφείτε:
Ευχαριστώ για την ανάγνωση!
Βήμα 11: Κωδικός - Project Repo
Ο κώδικας προστίθεται στο αποθετήριο GitHub το οποίο μπορείτε να βρείτε στην ενότητα κώδικα.
Rahul24-06/Rock-Paper-Scissors-https://github.com/Rahul24-06/Rock-Paper-Scissors
Συνιστάται:
Παιχνίδι Stone Paper Scissor: 6 Βήματα
Παιχνίδι Stone Paper Scissor: Αυτό είναι το πρώτο μου εκπαιδευτικό. Iθελα να γράψω ένα για πολύ καιρό, αλλά δεν είχα κανένα έργο στο χέρι που θα μπορούσα να δημοσιεύσω εδώ. Όταν λοιπόν μου ήρθε η ιδέα για αυτό το έργο, αποφάσισα ότι αυτό είναι το ένα. Έτσι, περιηγούμουν στον ιστότοπο του tensorflow.js
Γυρίστε X-box Rock Band Drums Into a Midi Stand Alone Electronic Drums .: 4 Βήματα (με Εικόνες)
Γυρίστε τα X-box Rock Band Drums Into a Midi Stand Alone Electronic Drums .: wasμουν τυχερός που πήρα ένα μεταχειρισμένο σετ τυμπάνων x-box, είναι σε λίγο τραχύ σχήμα και χωρίς κουπί, αλλά τίποτα που δεν μπορεί να διορθωθεί. μετατρέψτε το σε αυτόνομο σετ ηλεκτρικών τυμπάνων. Διαβάζοντας την αναλογική τιμή από τον αισθητήρα πίεζο και μετατρέψτε την σε ένδειξη MIDI
Robotics Remote Control Rock Crawler Arduino: 4 Βήματα
Robotics Remote Control Rock Crawler Arduino: Αυτό φαίνεται και είναι πολύ γυμνό. Θα συνιστούσα σε όποιον θέλει να κάνει αυτό το έργο να εξετάσει κάποιον τρόπο κάλυψης των ηλεκτρονικών για προστασία από το νερό και τη βρωμιά
Πώς να-ΜΟΝΑΔΑ ΟΘΟΝΗΣ E-PAPER E-PAPER-Μέρος 1: 6 Βήματα
Πώς να-ΜΟΝΑΔΑ ΟΘΟΝΗΣ ΗΛΕΚΤΡΙΚΟΥ ΧΑΡΤΙΟΥ-Μέρος 1: Σε αυτό το σεμινάριο, θα ήθελα να σας παρουσιάσω τη μονάδα εμφάνισης ηλεκτρονικού χαρτιού E-Ink που ανακάλυψα πρόσφατα. Είναι τόσο ωραίο! Αυτή η μονάδα οθόνης E-ink είναι ειδικά κατασκευασμένη για ανάπτυξη οθόνης E-ink. Δεν χρειάζεται να δημιουργήσετε κανένα επιπλέον κύκλωμα και
Πώς να-ΜΟΝΑΔΑ ΟΘΟΝΗΣ E-PAPER E-PAPER-Μέρος 3 - WiFi: 7 βήματα (με εικόνες)
Πώς να-ΜΟΝΑΔΑ ΟΘΟΝΗΣ E-PAPER E-PAPER-Μέρος 3 | WiFi: Σε αυτό το σεμινάριο για το Μέρος 3 του How to-E-INK E-PAPER DISPLAY MODULE, θα μοιραστώ μαζί σας πώς να συνδέσετε τη Μονάδα εμφάνισης E-Ink σε μια μονάδα WiFi που επιτρέπει την ενημέρωση των κειμένων μέσω WiFi. Δεν έχετε μονάδα εμφάνισης E-Ink; Μπορείτε να πάρετε μία ώρα