Table des matières
1. Préparez le programme de guerre des avions
2. Reconnaître les gestes
3. Contrôle gestuel pour mettre le jeu en pause
4. Contrôle gestuel du mouvement de l'avion
Maison Périphériques technologiques IA Gestes virtuels de l'IA pour jouer à la bataille d'avion

Gestes virtuels de l'IA pour jouer à la bataille d'avion

May 17, 2023 am 11:34 AM
ai 计算 虚拟手势

Bonjour à tous.

Décomposons ce petit projet et vous emmenons le mettre en œuvre étape par étape. À la fin de l'article, nous obtiendrons le code source complet du projet.

1. Préparez le programme de guerre des avions

Trouvez une version Python du programme de guerre des avions sur Github, installez Pygame et exécutez-le.

Gestes virtuels de lIA pour jouer à la bataille davion

Le fonctionnement du jeu est simple. Dans le coin supérieur droit se trouve le bouton pause/démarrage du jeu, qui peut être actionné en cliquant avec la souris.

Les touches A, D, W et S du clavier sont utilisées pour contrôler la direction du mouvement de l'avion, correspondant respectivement à gauche, droite, haut et bas.

Notre programme d'IA doit donc remplir deux fonctions principales : premièrement, reconnaître les gestes ; deuxièmement, convertir les gestes en opérations de la souris et du clavier pour contrôler le jeu.

2. Reconnaître les gestes

Ici, nous utilisons opencv pour lire le flux vidéo de la caméra.

Envoyez chaque image du flux vidéo au modèle de détection de paume dans mediapipe pour identifier 21 points clés de la paume.

Gestes virtuels de lIA pour jouer à la bataille davion

Dans notre projet, seuls l'index et le majeur sont utilisés, qui sont les 8ème et 12ème points à gauche et à droite.

Le code de base est le suivant :

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]
Copier après la connexion

frame​ est chaque image du flux vidéo, et les mains sont le modèle de détection de la paume.

Les objets finger_axis_8 et finger_axis_12 analysés stockent respectivement les coordonnées x et y de l'index et du majeur.

3. Contrôle gestuel pour mettre le jeu en pause

Calculez la distance entre les coordonnées de l'index et du majeur Si elle est supérieure à un certain seuil, déplacez la souris et cliquez sur le bouton pause du jeu.

Gestes virtuels de lIA pour jouer à la bataille davion

Le jeu est en pause

Si la distance entre les coordonnées de l'index et du majeur est inférieure à un certain seuil, déplacez la souris et cliquez sur le bouton Démarrer le jeu

Gestes virtuels de lIA pour jouer à la bataille davion

Le jeu démarre

Le calcul de la distance est très simple, aucun code n'est posté ici. Maintenant, concentrons-nous sur Python contrôlant la souris.

J'utilise la bibliothèque PyUserInput, qui fournit deux classes, PyMouse et PyKeyboard, pour contrôler respectivement la souris et le clavier.

Lorsque nous voulons utiliser un programme Python pour contrôler la pause et le démarrage du jeu, il suffit de déplacer la souris sur le bouton et d'effectuer une opération de clic.

# 定义鼠标对象
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
Copier après la connexion

Le paramètre dist de la fonction pause_or_start_game​ est la distance entre l'index et le majeur.

Les coordonnées du bouton pause/démarrage sont (915, 125). Les coordonnées de chaque ordinateur sont différentes. Vous devez recalculer en fonction de votre situation réelle.

L'idée de calcul est très simple. La taille de la bordure du jeu est de (480, 700)​. Le jeu démarre au milieu de l'écran. Tant que la taille de l'écran est obtenue, les coordonnées des boutons peuvent être. approximativement estimé. Après avoir appelé la fonction move de PyMouse, vérifiez-la et affinez-la. La fonction move​ de

PyMouse est utilisée pour déplacer la position de la souris, et la fonction click est utilisée pour effectuer des opérations de clic de souris.

4. Contrôle gestuel du mouvement de l'avion

Ici, vous devez calculer la direction du mouvement et la distance des coordonnées x et y de l'index dans deux images adjacentes. Cela détermine sur lequel des claviers A, D, W et S vous appuyez.

De même, la direction et la distance de mouvement sont très simples et ne seront pas abordées ici. L'accent est mis sur le module PyKeyboard contrôlant les touches du clavier.

self.key_board = PyKeyboard()
# 按下按键
self.key_board.press_key(key)
# 停留一段时间
time.sleep(press_dwell)
# 释放按键
self.key_board.release_key(key)
Copier après la connexion

Entre les fonctions press_key et release_key, time.sleep(press_dwell) est appelé pour contrôler la durée de la touche Si la touche est enfoncée longtemps, la distance parcourue par l'avion sera longue, au contraire. la touche est enfoncée pendant un court instant, la distance parcourue par l'avion sera courte.

Donc, la difficulté ici est de savoir comment mapper la distance de mouvement de l'index à la durée de la pression sur la touche.

J'ai utilisé le code suivant pour le mesurer

for i in range(n):
kb.press_key('A')
time.sleep(0.05)
kb.release_key('A')
Copier après la connexion

La durée fixe de la clé est de 0,05 seconde, et l'avion de test se déplace du milieu vers l'extrême gauche, ce qui nécessite le plus petit n.

Gestes virtuels de lIA pour jouer à la bataille davion

L'avion se déplace du milieu vers l'extrême gauche et la distance de déplacement est de 240. Par conséquent, 240 / (n * 0,05) est la distance de déplacement de l'avion par seconde.

J'ai mesuré n=7​, donc la distance parcourue par l'avion par seconde est de 685,7142857.

Calculez simplement la distance de mouvement de l'index et divisez-la par 685,7142857 pour obtenir la durée des touches du clavier.

Le code complet pour le contrôle gestuel du mouvement des avions est :

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)
Copier après la connexion

La partie centrale du projet a été expliquée et le code complet a été trié. Si vous en avez besoin, laissez simplement un message dans la zone de commentaires.

Après avoir obtenu le code, regardez d'abord le fichier steps.txt en cours d'exécution.

Si vous pensez que cet article vous est utile, veuillez cliquer sur "Lire le" pour m'encourager. Je continuerai à partager d'excellents projets Python+AI à l'avenir.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

phpmyadmin crée un tableau de données phpmyadmin crée un tableau de données Apr 10, 2025 pm 11:00 PM

Pour créer un tableau de données à l'aide de PhpMyAdmin, les étapes suivantes sont essentielles: connectez-vous à la base de données et cliquez sur le nouvel onglet. Nommez le tableau et sélectionnez le moteur de stockage (InnODB recommandé). Ajouter les détails de la colonne en cliquant sur le bouton Ajouter une colonne, y compris le nom de la colonne, le type de données, s'il faut autoriser les valeurs nuls et d'autres propriétés. Sélectionnez une ou plusieurs colonnes comme clés principales. Cliquez sur le bouton Enregistrer pour créer des tables et des colonnes.

Comment créer une base de données Oracle Comment créer une base de données Oracle Comment créer une base de données Oracle Comment créer une base de données Oracle Apr 11, 2025 pm 02:33 PM

La création d'une base de données Oracle n'est pas facile, vous devez comprendre le mécanisme sous-jacent. 1. Vous devez comprendre les concepts de la base de données et des SGBD Oracle; 2. Master les concepts de base tels que SID, CDB (base de données de conteneurs), PDB (base de données enfichable); 3. Utilisez SQL * Plus pour créer CDB, puis créer PDB, vous devez spécifier des paramètres tels que la taille, le nombre de fichiers de données et les chemins; 4. Les applications avancées doivent ajuster le jeu de caractères, la mémoire et d'autres paramètres et effectuer un réglage des performances; 5. Faites attention à l'espace disque, aux autorisations et aux paramètres des paramètres, et surveillez et optimisez en continu les performances de la base de données. Ce n'est qu'en le maîtrisant habilement une pratique continue que vous pouvez vraiment comprendre la création et la gestion des bases de données Oracle.

Comment créer une base de données Oracle Comment créer une base de données Oracle Comment créer une base de données Oracle Comment créer une base de données Oracle Apr 11, 2025 pm 02:36 PM

Pour créer une base de données Oracle, la méthode commune consiste à utiliser l'outil graphique DBCA. Les étapes sont les suivantes: 1. Utilisez l'outil DBCA pour définir le nom DBN pour spécifier le nom de la base de données; 2. Définissez Syspassword et SystemPassword sur des mots de passe forts; 3. Définir les caractères et NationalCharacterset à Al32Utf8; 4. Définissez la taille de mémoire et les espaces de table pour s'ajuster en fonction des besoins réels; 5. Spécifiez le chemin du fichier log. Les méthodes avancées sont créées manuellement à l'aide de commandes SQL, mais sont plus complexes et sujets aux erreurs. Faites attention à la force du mot de passe, à la sélection du jeu de caractères, à la taille et à la mémoire de l'espace de table

Comment rédiger des instructions de base de données Oracle Comment rédiger des instructions de base de données Oracle Apr 11, 2025 pm 02:42 PM

Le cœur des instructions Oracle SQL est sélectionné, insérer, mettre à jour et supprimer, ainsi que l'application flexible de diverses clauses. Il est crucial de comprendre le mécanisme d'exécution derrière l'instruction, tel que l'optimisation de l'indice. Les usages avancés comprennent des sous-requêtes, des requêtes de connexion, des fonctions d'analyse et PL / SQL. Les erreurs courantes incluent les erreurs de syntaxe, les problèmes de performances et les problèmes de cohérence des données. Les meilleures pratiques d'optimisation des performances impliquent d'utiliser des index appropriés, d'éviter la sélection *, d'optimiser les clauses et d'utiliser des variables liées. La maîtrise d'Oracle SQL nécessite de la pratique, y compris l'écriture de code, le débogage, la réflexion et la compréhension des mécanismes sous-jacents.

Comment ajouter, modifier et supprimer le guide de fonctionnement du champ de table de données MySQL Comment ajouter, modifier et supprimer le guide de fonctionnement du champ de table de données MySQL Apr 11, 2025 pm 05:42 PM

Guide de fonctionnement du champ dans MySQL: Ajouter, modifier et supprimer les champs. Ajouter un champ: alter table table_name Ajouter Column_name data_type [pas null] [Default default_value] [Clé primaire] [Auto_increment] Modifier le champ: alter table table_name modifie Column_name data_type [pas null] [default default_value] [clé primaire]

Quelles sont les contraintes d'intégrité des tables de base de données Oracle? Quelles sont les contraintes d'intégrité des tables de base de données Oracle? Apr 11, 2025 pm 03:42 PM

Les contraintes d'intégrité des bases de données Oracle peuvent garantir la précision des données, notamment: Not Null: les valeurs nulles sont interdites; Unique: garantie l'unicité, permettant une seule valeur nulle; Clé primaire: contrainte de clé primaire, renforcer unique et interdire les valeurs nulles; Clé étrangère: maintenir les relations entre les tableaux, les clés étrangères se réfèrent aux clés primaires primaires; Vérifiez: limitez les valeurs de colonne en fonction des conditions.

Explication détaillée des instances de requête imbriquées dans la base de données MySQL Explication détaillée des instances de requête imbriquées dans la base de données MySQL Apr 11, 2025 pm 05:48 PM

Les requêtes imbriquées sont un moyen d'inclure une autre requête dans une requête. Ils sont principalement utilisés pour récupérer des données qui remplissent des conditions complexes, associer plusieurs tables et calculer des valeurs de résumé ou des informations statistiques. Les exemples incluent la recherche de salaires supérieurs aux employés, la recherche de commandes pour une catégorie spécifique et le calcul du volume des commandes totales pour chaque produit. Lorsque vous écrivez des requêtes imbriquées, vous devez suivre: écrire des sous-requêtes, écrire leurs résultats sur les requêtes extérieures (référencées avec des alias ou en tant que clauses) et optimiser les performances de la requête (en utilisant des index).

Que fait Oracle Que fait Oracle Apr 11, 2025 pm 06:06 PM

Oracle est la plus grande société de logiciels de gestion de base de données au monde (SGBD). Ses principaux produits incluent les fonctions suivantes: Outils de développement du système de gestion de la base de données relationnels (Oracle Database) (Oracle Apex, Oracle Visual Builder) Middleware (Oracle Weblogic Server, Oracle Soa Suite) Cloud Service (Oracle Cloud Infrastructure) Analyse et Oracle Blockchain Pla Intelligence (Oracle Analytic

See all articles