Hallo zusammen.
Lassen Sie uns dieses kleine Projekt aufschlüsseln und Sie Schritt für Schritt bei der Umsetzung begleiten. Am Ende des Artikels erhalten wir den vollständigen Quellcode des Projekts.
Suchen Sie eine Python-Version des Flugzeugkriegsprogramms auf Github, installieren Sie Pygame und führen Sie es aus.
Die Spielbedienung ist einfach. In der oberen rechten Ecke befindet sich die Spielpause/Start-Taste, die durch Klicken mit der Maus bedient werden kann.
Mit den Tasten A, D, W und S auf der Tastatur steuern Sie die Bewegungsrichtung des Flugzeugs, entsprechend links, rechts, oben und unten.
Unser KI-Programm muss also zwei Kernfunktionen erfüllen: Erstens: Gesten erkennen; zweitens: Gesten in Maus- und Tastaturoperationen umwandeln, um das Spiel zu steuern.
Hier verwenden wir opencv, um den Videostream von der Kamera zu lesen.
Senden Sie jeden Frame im Videostream an das Handflächenerkennungsmodell in Mediapipe, um 21 Schlüsselpunkte der Handfläche zu identifizieren.
In unserem Projekt werden nur der Zeigefinger und der Mittelfinger verwendet, das sind der 8. und 12. Punkt links und rechts.
Der Kerncode lautet wie folgt:
ret, frame = cap.read() results = hands.process(frame[:, :, ::-1]) if results.multi_hand_landmarks: # 遍历每个手掌 for hand_landmarks in results.multi_hand_landmarks: finger_axis_8 = hand_landmarks.landmark[8] finger_axis_12 = hand_landmarks.landmark[12]
Frame ist jedes Bild im Videostream und Hände ist das Handflächenerkennungsmodell.
Die analysierten Objekte finger_axis_8 und finger_axis_12 speichern die x- und y-Koordinaten des Zeigefingers bzw. des Mittelfingers.
Berechnen Sie den Abstand zwischen den Koordinaten des Zeigefingers und des Mittelfingers. Wenn er größer als ein bestimmter Schwellenwert ist, bewegen Sie die Maus und klicken Sie auf die Schaltfläche „Spiel anhalten“.
Das Spiel ist pausiert
Wenn der Abstand zwischen den Koordinaten des Zeigefingers und des Mittelfingers einen bestimmten Schwellenwert unterschreitet, bewegen Sie die Maus und klicken Sie auf die Schaltfläche „Spiel starten“
Das Spiel beginnt
Die Entfernungsberechnung ist sehr einfach, hier wird kein Code gepostet. Konzentrieren wir uns nun auf die Steuerung der Maus durch Python.
Ich verwende die PyUserInput-Bibliothek, die zwei Klassen, PyMouse und PyKeyboard, zur Steuerung der Maus bzw. der Tastatur bereitstellt.
Wenn wir ein Python-Programm verwenden möchten, um die Pause und den Start des Spiels zu steuern, müssen wir nur die Maus über die Schaltfläche bewegen und einen Klickvorgang ausführen.
# 定义鼠标对象 self.mouse = PyMouse() def pause_or_start_game(self, dist): """ 判断是否需要暂停(开始)游戏 :param dist: :return: """ if (not self.is_pause and dist > 80) or (self.is_pause and dist < 80): self.mouse.move(915, 125) self.mouse.click(915, 125) self.is_pause = not self.is_pause
Der Parameter dist der Funktion pause_or_start_game ist der Abstand zwischen Zeigefinger und Mittelfinger.
Die Koordinaten der Pause/Start-Taste sind (915, 125). Die Koordinaten jedes Computers sind unterschiedlich. Sie müssen entsprechend Ihrer tatsächlichen Situation neu berechnen.
Die Berechnungsidee ist sehr einfach. Das Spiel wird in der Mitte des Bildschirms gestartet grob geschätzt. Nachdem Sie die Verschiebungsfunktion von PyMouse aufgerufen haben, überprüfen Sie sie und optimieren Sie sie. Die Bewegungsfunktion von
PyMouse wird zum Verschieben der Mausposition verwendet, und die Klickfunktion wird zum Ausführen von Mausklickvorgängen verwendet.
Hier müssen Sie die Bewegungsrichtung und den Abstand der x- und y-Koordinaten des Zeigefingers in zwei benachbarten Frames berechnen. Dadurch wird bestimmt, welche der Tastaturen A, D, W und S gedrückt wird.
Ebenso sind die Richtung und Entfernung der Bewegung sehr einfach und werden hier nicht besprochen. Der Schwerpunkt liegt auf dem PyKeyboard-Modul, das die Tastaturtasten steuert.
self.key_board = PyKeyboard() # 按下按键 self.key_board.press_key(key) # 停留一段时间 time.sleep(press_dwell) # 释放按键 self.key_board.release_key(key)
Zwischen den Funktionen press_key und release_key wird time.sleep(press_dwell) aufgerufen, um die Dauer der Taste zu steuern. Wenn die Taste lange gedrückt wird, ist die Distanz, die das Flugzeug zurücklegt, lang Wird die Taste kurz gedrückt, ist die Distanz, die das Flugzeug zurücklegt, kurz.
Die Schwierigkeit besteht hier also darin, die Bewegungsdistanz des Zeigefingers auf die Dauer des Tastendrucks abzubilden.
Ich habe den folgenden Code verwendet, um es zu messen
for i in range(n): kb.press_key('A') time.sleep(0.05) kb.release_key('A')
Die feste Tastendauer beträgt 0,05 Sekunden, und das Testflugzeug bewegt sich von der Mitte nach ganz links, was das kleinste n erfordert.
Das Flugzeug bewegt sich von der Mitte nach ganz links und die Bewegungsdistanz beträgt 240. Daher ist 240 / (n * 0,05) die Bewegungsdistanz des Flugzeugs pro Sekunde.
Ich habe n=7 gemessen, daher beträgt die Distanz, die das Flugzeug pro Sekunde zurücklegt, 685,7142857.
Berechnen Sie einfach die Bewegungsdistanz des Zeigefingers und teilen Sie sie durch 685,7142857, um die Tastendauer der Tastatur zu erhalten.
Der vollständige Code für die Gestensteuerung von Flugzeugbewegungen lautet:
def press_key_board(self, direction, move_dist): """ 将手指移动距离,换算为按键间隔,并执行按键操作 :param direction:移动方向 :param move_dist:移动距离 :return: """ dist_per_sec = 685.7142857 if direction == 'x': key = 'A' if move_dist < 0 else 'D' elif direction == 'y': key = 'W' if move_dist < 0 else 'S' else: return press_dwell = math.fabs(move_dist / dist_per_sec) self.key_board.press_key(key) time.sleep(press_dwell) self.key_board.release_key(key)
Der Kernteil des Projekts wurde erklärt und der vollständige Code wurde aussortiert. Wenn Sie ihn benötigen, hinterlassen Sie einfach eine Nachricht im Kommentarbereich.
Nachdem Sie den Code erhalten haben, schauen Sie sich zunächst die laufende Datei „steps.txt“ an.
Wenn Sie glauben, dass dieser Artikel für Sie nützlich ist, klicken Sie bitte auf „Lesen“, um mich zu ermutigen, auch in Zukunft hervorragende Python+KI-Projekte zu teilen.
Das obige ist der detaillierte Inhalt vonVirtuelle KI-Gesten zum Spielen von Flugzeugkämpfen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!