Inhaltsverzeichnis:

Steinpapierschere AI - Gunook
Steinpapierschere AI - Gunook

Video: Steinpapierschere AI - Gunook

Video: Steinpapierschere AI - Gunook
Video: Аква против Beeyu | Ракетная лига, серия 1 на 1 с бай-ином $50 2024, November
Anonim
Stein-Papier-Schere AI
Stein-Papier-Schere AI

Haben Sie sich jemals allein gelangweilt? Lassen Sie uns Stein, Papier und Schere gegen ein interaktives System spielen, das mit Intelligenz ausgestattet ist.

Schritt 1: Dinge, die in diesem Projekt verwendet werden

Hardware-Komponenten

  • Raspberry Pi 3 Modell B+ × 1
  • Raspberry Pi Kameramodul V2 × 1
  • SG90 Micro-Servomotor × 1

Software-Apps

  • Raspberry Pi Raspbian
  • OpenCV
  • TensorFlow

Schritt 2: Idee?

Image
Image

Nachdem ich an verschiedenen Projekten in verschiedenen Bereichen gearbeitet hatte, wollte ich ein lustiges Projekt machen und beschloss, ein Stein-Papier-Schere-Spiel zu machen:)

In diesem Projekt werden wir ein interaktives Spiel machen und gegen den Computer spielen, der von KI angetrieben wird, um Entscheidungen zu treffen. AI verwendet die mit dem Raspberry Pi verbundene Kamera, um zu erkennen, was der Benutzer mit der Hand bewegt, und klassifizieren sie in die beste Kategorie (Etikett) Stein, Papier oder Schere. Sobald der Computer seine Bewegung macht, zeigt der mit dem Raspberry Pi verbundene Schrittmotor in die Richtung, die auf seiner Bewegung basiert.

Regeln die bei diesem Spiel zu beachten sind:

  • Rock macht die Schere stumpf
  • Papier bedeckt den Felsen
  • Schere schneidet Papier

Der Gewinner wird auf der Grundlage der oben genannten drei Bedingungen ermittelt. Sehen wir uns hier eine kurze Demo des Projekts an.

Schritt 3: Erste Schritte?

Einstieg ?
Einstieg ?
Einstieg ?
Einstieg ?

Himbeer-Pi

Ich habe einen Raspberry Pi 3 Model B+ verwendet, der großartige Verbesserungen aufweist und leistungsstärker ist als der frühere Raspberry Pi 3 Model B.

Raspberry Pi 3 B+ ist mit dem 1,4-GHz-64-Bit-Quad-Core-Prozessor, Dualband-WLAN, Bluetooth 4.2/BLE, schnellerem Ethernet und Power-over-Ethernet-Unterstützung (mit separatem PoE-HAT) integriert.

Spezifikationen: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-Bit SoC @ 1,4 GHz, 1 GB LPDDR2 SDRAM, 2,4 GHz und 5 GHz IEEE 802.11.b/g/n/ac Wireless LAN, Bluetooth 4.2, BLE, Gigabit Ethernet über USB 2.0 (maximaler Durchsatz von 300 Mbit/s), Der erweiterte 40-Pin-GPIO-Header, HDMI4 USB 2.0-Anschlüsse in voller Größe, CSI-Kameraanschluss zum Anschluss einer Raspberry Pi-Kamera, DSI-Displayanschluss zum Anschluss eines Raspberry Pi-Touchscreen-Displays4-poliger Stereoausgang und Composite Video-Port, Micro-SD-Port zum Laden Ihres Betriebssystems und Speichern von Daten5V/2,5A DC-Stromeingang, Power-over-Ethernet (PoE)-Unterstützung (erfordert separaten PoE-HAT).

Servomotor

Wir verwenden einen SG-90-Servomotor, einen Motor mit hohem Drehmoment, der eine Last von bis zu 2,5 kg (1 cm) bewältigen kann.

USB-Kamera

Eine USB-Kamera, um das Spiel mit der Bildverarbeitung interaktiv zu machen

Einige Jumper-Kabel werden verwendet, um den Schrittmotor und den Raspberry Pi zu verdrahten.

Schritt 4: Raspbian auf die SD-Karte brennen?

Raspbian auf die SD-Karte brennen?
Raspbian auf die SD-Karte brennen?
Raspbian auf die SD-Karte brennen?
Raspbian auf die SD-Karte brennen?
Raspbian auf die SD-Karte brennen?
Raspbian auf die SD-Karte brennen?

Raspbian ist die Linux-Distribution der Wahl, die auf dem Raspberry Pi läuft. In diesem Handbuch verwenden wir die Lite-Version, aber die Desktop-Version (die mit einer grafischen Umgebung geliefert wird) kann ebenfalls verwendet werden.

  • Laden Sie Etcher herunter und installieren Sie es.
  • Verbinden Sie einen SD-Kartenleser mit der darin befindlichen SD-Karte.
  • Öffnen Sie Etcher und wählen Sie von Ihrer Festplatte die Raspberry Pi.img- oder.zip-Datei aus, die Sie auf die SD-Karte schreiben möchten.
  • Wählen Sie die SD-Karte aus, auf die Sie Ihr Bild schreiben möchten.
  • Überprüfen Sie Ihre Auswahl und klicken Sie auf „Flash!“. um mit dem Schreiben von Daten auf die SD-Karte zu beginnen.

Verbinden Sie das Gerät mit Ihrem Netzwerk

  • Aktivieren Sie den SSH-Zugriff, indem Sie eine leere Datei ssh hinzufügen, die sich wiederum im Stammverzeichnis des Boot-Volumes auf Ihrer SD-Karte befindet.
  • Stecken Sie die SD-Karte in den Raspberry Pi. Es bootet in etwa 20 Sekunden. Sie sollten nun über SSH-Zugriff auf Ihren Raspberry Pi verfügen. Standardmäßig lautet der Hostname raspberrypi.local. Öffnen Sie auf Ihrem Computer ein Terminalfenster und geben Sie Folgendes ein:

ssh [email protected]

Das Standardpasswort ist Himbeere

Hier habe ich einen separaten Monitor verwendet, um mit dem Raspberry Pi zu kommunizieren.

Schritt 5: Sammeln des Datensatzes ?️

Erhebung des Datensatzes ?️
Erhebung des Datensatzes ?️
Erhebung des Datensatzes ?️
Erhebung des Datensatzes ?️

Der erste Schritt in diesem Projekt ist die Datenerhebung. Das System muss die Handbewegung erkennen und die Aktion erkennen und entsprechend bewegen.

Wir installieren mehrere Bibliotheken auf dem Raspberry Pi mit pip install

Befehl.

sudo apt-get update && sudo apt-get upgradesudo 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 install 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-estimator 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 sechs

Wenn Sie Probleme mit dem OpenCV-Paket haben, empfehle ich dringend, diese Pakete zu installieren.

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

Wir haben alle erforderlichen Abhängigkeiten für dieses Projekt installiert. Der Datensatz erfolgt durch Sammlungen und Anordnungen der Bilder unter dem entsprechenden Label.

Hier erstellen wir die Datensatzbilder für das Label Stein, Papier und Schere mit folgendem Ausschnitt.

roi = Rahmen[100:500, 100:500]

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

Das Bild wird für jedes Etikett erfasst (Stein, Papier, Schere und Keine).

Schritt 6: Entwerfen einer NN & Trainieren des Modells ⚒️⚙️

Entwerfen einer NN & Trainieren des Modells ⚒️⚙️
Entwerfen einer NN & Trainieren des Modells ⚒️⚙️

Der Kern dieses Projekts ist ein Bildklassifikator, der eine von drei Kategorien klassifiziert. Um diesen Klassifikator zu erstellen, verwenden wir das vortrainierte CNN (Convolutional Network) namens SqueezeNet.

Hier verwenden wir Keras und TensorFlow, um das SqueezeNet-Modell zu generieren, das die Geste identifizieren kann. Die Bilder, die wir im vorherigen Schritt erzeugt haben, werden verwendet, um das Modell zu trainieren. Das Modell wird unter Verwendung des Datensatzes trainiert, der für keine der genannten Epochen (Zyklen) generiert wurde.

Das Modell wird mit den Hyperparametern wie unten gezeigt konfiguriert.

Modell = Sequentiell([SqueezeNet(input_shape=(227, 227, 3), include_top=False), Ausfall (0.5), Convolution2D(NUM_CLASSES, (1, 1), padding='gültig'), Aktivierung('relu'), GlobalAveragePooling2D(), Aktivierung('softmax')])

Während das Modell trainiert, können Sie den Verlust und die Genauigkeit des Modells für jede Epoche feststellen und die Genauigkeit erhöht sich irgendwann nach einigen Epochen.

Es dauerte ungefähr 2 Stunden, um das Modell nach 10 Epochen mit der höchsten Genauigkeit zu generieren. Wenn Sie auf Fehler bei der Speicherzuordnung stoßen, führen Sie die folgenden Schritte aus (Danke an Adrian)

Um Ihren Auslagerungsspeicher zu vergrößern, öffnen Sie /etc/dphys-swapfile und bearbeiten Sie dann die Variable CONF_SWAPSIZE:

# CONF_SWAPSIZE=100

CONF_SWAPSIZE=1024

Beachten Sie, dass ich den Swap von 100 MB auf 1024 MB erhöhe. Starten Sie von dort aus den Swap-Dienst neu:

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

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

Notiz:

Das Erhöhen der Swap-Größe ist eine großartige Möglichkeit, Ihre Speicherkarte auszubrennen, also stellen Sie sicher, dass Sie diese Änderung rückgängig machen und den Swap-Dienst neu starten, wenn Sie fertig sind. Sie können hier mehr über große Größen lesen, die Speicherkarten beschädigen.

Schritt 7: Testen des Modells ✅

Testen des Modells ✅
Testen des Modells ✅
Testen des Modells ✅
Testen des Modells ✅
Testen des Modells ✅
Testen des Modells ✅

Sobald das Modell generiert ist, erzeugt es die Ausgabedatei "rock-paper-scissors-model.h5". Diese Datei wird als Quelle verwendet, um zu testen, ob das System verschiedene Handgesten erkennen und die Aktionen unterscheiden kann.

Das Modell wird wie folgt in das Python-Skript geladen

model = load_model("Stein-Papier-Schere-Modell.h5")

Die Kamera liest das Testbild und transformiert das erforderliche Farbmodell und ändert dann die Größe des Bildes auf 227 x 227 Pixel (gleiche Größe, die für die Modellgenerierung verwendet wird). Die Bilder, die zum Trainieren des Modells verwendet wurden, können verwendet werden, um das generierte Modell zu testen.

img = cv2.imread(Dateipfad)

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

Sobald das Modell geladen und das Bild von der Kamera erfasst wurde, sagt das Modell das aufgenommene Bild mit dem geladenen SqueezeNet-Modell voraus und trifft die Vorhersage für die Bewegungen des Benutzers.

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

move_code = np.argmax(pred[0]) move_name = mapper(move_code) print("Vorhergesagt: {}".format(move_name))

Führen Sie das Skript test.py aus, um das Modell mit verschiedenen Testbildern zu testen.

python3 test.py

Jetzt ist das Modell bereit, die Handgesten zu erkennen und zu verstehen.

Schritt 8: Stein-Papier-Schere-Spiel

Stein-Papier-Schere-Spiel
Stein-Papier-Schere-Spiel

Das Spiel verwendet eine Zufallszahlengenerierungsfunktion, um den Zug des Computers zu entscheiden. Es folgt den oben genannten Regeln, um den Gewinner zu ermitteln. Das Spiel ist mit zwei Modi ausgestattet: Normaler Modus und Intelligenter Modus, bei dem der intelligente Modus die Bewegung des Benutzers kontert, d. h. der Computer gewinnt alle Bewegungen gegen den Benutzer.

cap = cv2. VideoCapture(0) # Um ein Bild von der Kamera aufzunehmen

Jetzt machen wir das Spiel im Normalmodus, in dem das System / Raspberry Pi das Bild der Hand aufnimmt und die Handgeste analysiert und identifiziert. Dann wird mit einem Zufallszahlengenerator der Computerzug gespielt. Der Gewinner wird anhand der Regeln ermittelt und dann auf dem Bildschirm angezeigt. Starten Sie das Spiel mit dem folgenden Befehl.

python3 play.py

Schritt 9: Servomotorintegration?

Schließlich fügen Sie den Servomotor zu diesem Projekt hinzu. Servomotor ist der GPIO-Pin 17 des Raspberry Pi, der über die PWM-Funktion zur Steuerung des Drehwinkels verfügt.

Der in diesem Projekt verwendete Servomotor ist SG-90. Es kann Drehungen im Uhrzeigersinn und gegen den Uhrzeigersinn bis zu 180 °. ausführen

Die Anschlüsse sind wie folgt angegeben.

Servomotor - Raspberry Pi

Vcc - +5V

Masse - Masse

Signal - GPIO17

Die Bibliotheken wie RPi. GPIO und time werden in diesem Projekt verwendet.

RPi. GPIO als GPIO importieren

Importzeit

Der GPIO-Pin wird dann mit den folgenden Zeilen auf PWM konfiguriert

ServoPIN = 17

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

GPIO Pin 17 ist für die Verwendung als PWM mit einer Frequenz von 50 Hz konfiguriert. Der Winkel des Servomotors wird durch Einstellen des Tastverhältnisses (Ton & Toff) des PWM erreicht

Einschaltdauer = Winkel/18 + 2

GPIO.output(servoPIN, True) p. ChangeDutyCycle(duty) time.sleep(1) GPIO.output(servoPIN, False) p. ChangeDutyCycle(0)

Dadurch wird für jeden Impuls der gewünschte Schrittwinkel erzeugt, der den gewünschten Drehwinkel ergeben würde.

Jetzt habe ich das Diagramm genommen und es in drei Abschnitte unterteilt, für Stein, Papier und Schere. Der Servomotor ist in der Mitte des Diagramms befestigt. Der Zeiger/Klappe ist mit der Welle des Servomotors verbunden. Diese Welle zeigt gemäß der im Skript berechneten Logik auf die Bewegung des Computers.

Schritt 10: Arbeiten des Projekts ?

Image
Image

Und jetzt ist Spielzeit. Sehen wir uns die Arbeit des Projekts an.

Wenn Sie Probleme beim Bau dieses Projekts hatten, können Sie mich gerne fragen. Bitte schlagen Sie neue Projekte vor, die ich als nächstes tun soll.

Gebt einen Daumen hoch, wenn es euch wirklich geholfen hat und folgt meinem Kanal für interessante Projekte.:)

Teile dieses Video, wenn du magst.

Schön, dass du dich abonniert hast:

Danke fürs Lesen!

Schritt 11: Code - Projekt-Repo

Der Code wird dem GitHub-Repository hinzugefügt, das im Codeabschnitt zu finden ist.

Rahul24-06 / Stein-Papier-Schere -