ホームページ テクノロジー周辺機器 AI AI 仮想ジェスチャーで飛行機戦闘をプレイ

AI 仮想ジェスチャーで飛行機戦闘をプレイ

May 17, 2023 am 11:34 AM
ai 計算する 仮想ジェスチャー

###こんにちは、みんな。

この小さなプロジェクトを分解して、実装を段階的に説明していきます。記事の最後に、プロジェクトの完全なソース コードを入手します。

1. 航空機戦争プログラムの準備

Github で航空機戦争プログラムの Python バージョンを見つけ、Pygame をインストールして実行します。

AI 仮想ジェスチャーで飛行機戦闘をプレイ

ゲームの操作は簡単で、右上にゲームの一時停止/開始ボタンがあり、マウスでクリックすることで操作できます。

キーボードの A、D、W、S キーは、それぞれ左、右、上、下に対応し、航空機の移動方向を制御するために使用されます。

したがって、AI プログラムは 2 つのコア機能を完了する必要があります。1 つはジェスチャーを認識することであり、2 つ目はジェスチャーをマウスとキーボードの操作に変換してゲームを制御することです。

2. ジェスチャを認識する

ここでは、opencv を使用してカメラからビデオ ストリームを読み取ります。

ビデオ ストリームの各フレームをメディアパイプの手のひら検出モデルに送信して、手のひらの 21 のキー ポイントを識別します。

AI 仮想ジェスチャーで飛行機戦闘をプレイ

私たちのプロジェクトでは、左右の 8 番目と 12 番目のポイントである人差し指と中指のみを使用します。

コア コードは次のとおりです。

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 はビデオ ストリーム内の各フレームで、hands は手のひら検出モデルです。

解析された Finger_axis_8 オブジェクトと Finger_axis_12 オブジェクトには、人差し指と中指の x 座標と y 座標がそれぞれ保存されます。

3. ゲームを一時停止するジェスチャー コントロール

人差し指と中指の座標間の距離を計算し、それが一定のしきい値より大きい場合は、マウスを移動して一時停止をクリックします。ゲームボタン。

AI 仮想ジェスチャーで飛行機戦闘をプレイ

ゲーム一時停止

人差し指と中指の座標間の距離が一定のしきい値未満の場合、マウスを移動して開始をクリックします。ゲーム ボタン

AI 仮想ジェスチャーで飛行機戦闘をプレイ

ゲーム スタート

距離の計算は非常に簡単です。コードはここには投稿しません。焦点は Python によるマウス制御です。

私は PyUserInput ライブラリを使用します。このライブラリには、マウスとキーボードをそれぞれ制御するための 2 つのクラス PyMouse と PyKeyboard が用意されています。

Python プログラムを使用してゲームの一時停止と開始を制御するには、マウスをボタンの位置に移動してクリック操作を行うだけです。

# 定义鼠标对象
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
ログイン後にコピー

pause_or_start_game 関数のパラメータ dist は、人差し指と中指の間の距離です。

一時停止/開始ボタンの座標は (915, 125) です。各コンピュータの座標は異なります。実際の状況に応じて再計算する必要があります。

計算の考え方は非常に単純です。ゲームの境界サイズは (480, 700) で、ゲームは画面の中央から開始されます。画面のサイズが得られれば、座標はボタンの数は大まかに見積もることができます。 PyMouse の move 関数を呼び出した後、確認して微調整します。

PyMouse の move 関数はマウスの位置を移動するために使用され、click 関数はマウスのクリック操作を実行するために使用されます。

4. 航空機の動きのジェスチャー制御

ここでは、隣接する 2 つのフレームにおける人差し指の x 座標と y 座標の移動方向と距離を計算する必要があります。これにより、キーボード A、D、W、S のどれが押されたかが決まります。

同様に、移動の方向と距離も非常に単純なのでここでは説明しませんが、焦点は PyKeyboard モジュールによるキーボードのキーの制御にあります。

self.key_board = PyKeyboard()
# 按下按键
self.key_board.press_key(key)
# 停留一段时间
time.sleep(press_dwell)
# 释放按键
self.key_board.release_key(key)
ログイン後にコピー

press_key 関数と release_key 関数の間で、キーの持続時間を制御するために time.sleep(press_dwell) が呼び出されます。キーを長く押すと、機体の移動距離が長くなります。逆に、キー時間が短い場合、航空機の移動距離は短くなります。

したがって、ここでの困難は、人差し指の移動距離をキーを押している時間にどのようにマッピングするかということです。

次のコードを使用して測定しました

for i in range(n):
kb.press_key('A')
time.sleep(0.05)
kb.release_key('A')
ログイン後にコピー

固定キーの継続時間は 0.05 秒で、テスト航空機は中央から左端に移動します。これには最小の n が必要です。

AI 仮想ジェスチャーで飛行機戦闘をプレイ

機体は中央から左端に移動し、移動距離は 240 です。したがって、1 回あたりの機体の移動距離は 240 / (n * 0.05) となります。 2番。

n=7 を測定したため、航空機の 1 秒あたりの移動距離は 685.7142857 となります。

人差し指の移動距離を計算して 685.7142857 で割れば、キーボードのキーの長さを求めることができます。

航空機の動きのジェスチャー制御の完全なコードは次のとおりです:

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)
ログイン後にコピー

プロジェクトの中核部分は説明され、完全なコードは整理されました。必要な場合は、そのままにしておいてください。コメント欄にメッセージを。

コードを取得したら、まず実行中のsteps.txtを確認します。

この記事が役に立ったと思われる場合は、「読む」をクリックして励みにしてください。今後も優れた Python AI プロジェクトを共有していきます。

以上がAI 仮想ジェスチャーで飛行機戦闘をプレイの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Laravelの地理空間:インタラクティブマップと大量のデータの最適化 Laravelの地理空間:インタラクティブマップと大量のデータの最適化 Apr 08, 2025 pm 12:24 PM

700万のレコードを効率的に処理し、地理空間技術を使用したインタラクティブマップを作成します。この記事では、LaravelとMySQLを使用して700万を超えるレコードを効率的に処理し、それらをインタラクティブなマップの視覚化に変換する方法について説明します。最初の課題プロジェクトの要件:MySQLデータベースに700万のレコードを使用して貴重な洞察を抽出します。多くの人は最初に言語をプログラミングすることを検討しますが、データベース自体を無視します。ニーズを満たすことができますか?データ移行または構造調​​整は必要ですか? MySQLはこのような大きなデータ負荷に耐えることができますか?予備分析:キーフィルターとプロパティを特定する必要があります。分析後、ソリューションに関連している属性はわずかであることがわかりました。フィルターの実現可能性を確認し、検索を最適化するためにいくつかの制限を設定しました。都市に基づくマップ検索

MySQLを解決する方法は開始できません MySQLを解決する方法は開始できません Apr 08, 2025 pm 02:21 PM

MySQLの起動が失敗する理由はたくさんあり、エラーログをチェックすることで診断できます。一般的な原因には、ポートの競合(ポート占有率をチェックして構成の変更)、許可の問題(ユーザー許可を実行するサービスを確認)、構成ファイルエラー(パラメーター設定のチェック)、データディレクトリの破損(テーブルスペースの復元)、INNODBテーブルスペースの問題(IBDATA1ファイルのチェック)、プラグインロード障害(エラーログのチェック)が含まれます。問題を解決するときは、エラーログに基づいてそれらを分析し、問題の根本原因を見つけ、問題を防ぐために定期的にデータをバックアップする習慣を開発する必要があります。

インストール後にMySQLの使用方法 インストール後にMySQLの使用方法 Apr 08, 2025 am 11:48 AM

この記事では、MySQLデータベースの操作を紹介します。まず、MySQLWorkBenchやコマンドラインクライアントなど、MySQLクライアントをインストールする必要があります。 1. mysql-uroot-pコマンドを使用してサーバーに接続し、ルートアカウントパスワードでログインします。 2。CreatedAtaBaseを使用してデータベースを作成し、データベースを選択します。 3. createTableを使用してテーブルを作成し、フィールドとデータ型を定義します。 4. INSERTINTOを使用してデータを挿入し、データをクエリし、更新することでデータを更新し、削除してデータを削除します。これらの手順を習得することによってのみ、一般的な問題に対処することを学び、データベースのパフォーマンスを最適化することでMySQLを効率的に使用できます。

酸性特性を理解する:信頼できるデータベースの柱 酸性特性を理解する:信頼できるデータベースの柱 Apr 08, 2025 pm 06:33 PM

データベース酸属性の詳細な説明酸属性は、データベーストランザクションの信頼性と一貫性を確保するための一連のルールです。データベースシステムがトランザクションを処理する方法を定義し、システムのクラッシュ、停電、または複数のユーザーの同時アクセスの場合でも、データの整合性と精度を確保します。酸属性の概要原子性:トランザクションは不可分な単位と見なされます。どの部分も失敗し、トランザクション全体がロールバックされ、データベースは変更を保持しません。たとえば、銀行の譲渡が1つのアカウントから控除されているが別のア​​カウントに増加しない場合、操作全体が取り消されます。 TRANSACTION; updateaccountssetbalance = balance-100wh

MySQLはダウンロード後にインストールできません MySQLはダウンロード後にインストールできません Apr 08, 2025 am 11:24 AM

MySQLのインストール障害の主な理由は次のとおりです。1。許可の問題、管理者として実行するか、SUDOコマンドを使用する必要があります。 2。依存関係が欠落しており、関連する開発パッケージをインストールする必要があります。 3.ポート競合では、ポート3306を占めるプログラムを閉じるか、構成ファイルを変更する必要があります。 4.インストールパッケージが破損しているため、整合性をダウンロードして検証する必要があります。 5.環境変数は誤って構成されており、環境変数はオペレーティングシステムに従って正しく構成する必要があります。これらの問題を解決し、各ステップを慎重に確認して、MySQLを正常にインストールします。

リモートシニアバックエンジニア(プラットフォーム)がサークルが必要です リモートシニアバックエンジニア(プラットフォーム)がサークルが必要です Apr 08, 2025 pm 12:27 PM

リモートシニアバックエンジニアの求人事業者:サークル場所:リモートオフィスジョブタイプ:フルタイム給与:$ 130,000- $ 140,000職務記述書サークルモバイルアプリケーションとパブリックAPI関連機能の研究開発に参加します。ソフトウェア開発ライフサイクル全体をカバーします。主な責任は、RubyonRailsに基づいて独立して開発作業を完了し、React/Redux/Relay Front-Endチームと協力しています。 Webアプリケーションのコア機能と改善を構築し、機能設計プロセス全体でデザイナーとリーダーシップと緊密に連携します。肯定的な開発プロセスを促進し、反復速度を優先します。 6年以上の複雑なWebアプリケーションバックエンドが必要です

mysqlはjsonを返すことができますか mysqlはjsonを返すことができますか Apr 08, 2025 pm 03:09 PM

MySQLはJSONデータを返すことができます。 json_extract関数はフィールド値を抽出します。複雑なクエリについては、Where句を使用してJSONデータをフィルタリングすることを検討できますが、そのパフォーマンスへの影響に注意してください。 JSONに対するMySQLのサポートは絶えず増加しており、最新バージョンと機能に注意を払うことをお勧めします。

バングラ部分モデル検索のlaravelEloquent orm) バングラ部分モデル検索のlaravelEloquent orm) Apr 08, 2025 pm 02:06 PM

LaravelEloquentモデルの検索:データベースデータを簡単に取得するEloquentormは、データベースを操作するための簡潔で理解しやすい方法を提供します。この記事では、さまざまな雄弁なモデル検索手法を詳細に紹介して、データベースからのデータを効率的に取得するのに役立ちます。 1.すべてのレコードを取得します。 ALL()メソッドを使用して、データベーステーブルですべてのレコードを取得します:useapp \ models \ post; $ post = post :: all();これにより、コレクションが返されます。 Foreach Loopまたはその他の収集方法を使用してデータにアクセスできます。

See all articles