Gestes virtuels de l'IA pour jouer à la bataille d'avion
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.
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.
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]
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.
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
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
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)
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')
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.
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)
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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.

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.

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

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.

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]

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.

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).

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
