Jadual Kandungan
1. Sediakan program perang pesawat
2. Kenali gerak isyarat
3. Kawalan gerak isyarat untuk menjeda permainan
4. Kawalan gerak isyarat pergerakan pesawat
Rumah Peranti teknologi AI Mainkan pertempuran kapal terbang dengan gerak isyarat maya AI

Mainkan pertempuran kapal terbang dengan gerak isyarat maya AI

May 17, 2023 am 11:34 AM
ai mengira isyarat maya

Helo, semua.

Mari pecahkan projek kecil ini dan bawa anda melalui langkah demi langkah pelaksanaan Di akhir artikel, kami akan mendapat kod sumber lengkap projek.

1. Sediakan program perang pesawat

Cari versi Python program perang pesawat di Github, pasang Pygame dan jalankan.

Mainkan pertempuran kapal terbang dengan gerak isyarat maya AI

Operasi permainan adalah mudah, penjuru kanan sebelah atas ialah butang jeda/mula permainan, klik dengan tetikus untuk beroperasi.

Kekunci A, D, W dan S pada papan kekunci digunakan untuk mengawal arah pergerakan pesawat, masing-masing sepadan dengan kiri, kanan, atas dan bawah.

Jadi program AI kami mesti melengkapkan dua fungsi teras Pertama, mengenali gerak isyarat; kedua, menukar gerak isyarat kepada operasi tetikus dan papan kekunci untuk mengawal permainan.

2. Kenali gerak isyarat

Di sini, kami menggunakan opencv untuk membaca strim video daripada kamera.

Hantar setiap bingkai dalam strim video ke model pengesanan tapak tangan dalam paip media untuk mengenal pasti 21 titik utama tapak tangan.

Mainkan pertempuran kapal terbang dengan gerak isyarat maya AI

Dalam projek kami, hanya jari telunjuk dan jari tengah digunakan iaitu titik ke-8 dan ke-12 di kiri dan kanan.

Kod teras adalah seperti berikut:

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]
Salin selepas log masuk

bingkai​ ialah setiap bingkai dalam strim video, dan tangan ialah model pengesanan tapak tangan.

Objek finger_axis_8 dan finger_axis_12 yang dihuraikan masing-masing menyimpan koordinat x dan y jari telunjuk dan jari tengah.

3. Kawalan gerak isyarat untuk menjeda permainan

Kira jarak antara koordinat jari telunjuk dan jari tengah Jika lebih besar daripada ambang tertentu, gerakkan tetikus dan klik jeda butang permainan.

Mainkan pertempuran kapal terbang dengan gerak isyarat maya AI

Permainan dijeda

Jika jarak antara koordinat jari telunjuk dan jari tengah kurang daripada ambang tertentu, gerakkan tetikus dan klik butang mulakan permainan

Mainkan pertempuran kapal terbang dengan gerak isyarat maya AI

Permainan bermula

Pengiraan jarak sangat mudah Saya tidak akan menyiarkan kod di sini, tetapi fokus pada Python yang mengawalnya tetikus.

Saya menggunakan perpustakaan PyUserInput, yang menyediakan dua kelas, PyMouse dan PyKeyboard, untuk mengawal tetikus dan papan kekunci masing-masing.

Apabila kita ingin menggunakan program Python untuk mengawal jeda dan permulaan permainan, kita hanya perlu menggerakkan tetikus ke butang dan melakukan operasi klik. Parameter dist fungsi

# 定义鼠标对象
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
Salin selepas log masuk

pause_or_start_game​ ialah jarak antara jari telunjuk dan jari tengah.

Koordinat butang jeda/mula adalah (915, 125). Koordinat setiap komputer adalah berbeza Anda perlu mengira semula mengikut situasi sebenar anda.

Idea pengiraan adalah sangat mudah Saiz sempadan permainan ialah (480, 700)​ butang boleh dianggarkan secara kasar. Selepas memanggil fungsi pindah PyMouse, semak dan perhalusinya.

Fungsi PyMouse's move digunakan untuk menggerakkan kedudukan tetikus, dan fungsi klik digunakan untuk melaksanakan operasi klik tetikus.

4. Kawalan gerak isyarat pergerakan pesawat

Di sini, anda perlu mengira arah pergerakan dan jarak koordinat x dan y jari telunjuk dalam dua bingkai bersebelahan. Ini menentukan papan kekunci A, D, W dan S yang mana ditekan.

Begitu juga, arah dan jarak pergerakan adalah sangat mudah dan tidak akan dibincangkan di sini Fokusnya adalah pada kawalan kekunci papan kekunci oleh modul PyKeyboard.

self.key_board = PyKeyboard()
# 按下按键
self.key_board.press_key(key)
# 停留一段时间
time.sleep(press_dwell)
# 释放按键
self.key_board.release_key(key)
Salin selepas log masuk

Antara fungsi press_key dan release_key, time.sleep(press_dwell) dipanggil untuk mengawal tempoh kekunci Jika kekunci ditekan untuk masa yang lama, jarak pergerakan pesawat adalah panjang sebaliknya, jika kekunci ditekan untuk masa yang singkat, jarak pesawat bergerak adalah pendek.

Jadi, kesukaran di sini ialah bagaimana untuk memetakan jarak pergerakan jari telunjuk kepada tempoh menekan kekunci.

Saya menggunakan kod berikut untuk mengukurnya

for i in range(n):
kb.press_key('A')
time.sleep(0.05)
kb.release_key('A')
Salin selepas log masuk

Tempoh kunci tetap ialah 0.05 saat, dan pesawat ujian bergerak dari tengah ke paling kiri, minimum n yang diperlukan.

Mainkan pertempuran kapal terbang dengan gerak isyarat maya AI

Pesawat bergerak dari tengah ke kiri jauh, dan jarak pergerakannya ialah 240. Oleh itu, 240 / (n * 0.05) ialah jarak pergerakan pesawat setiap kedua.

Saya mengukur n=7​, oleh itu, jarak pesawat bergerak sesaat ialah 685.7142857.

Selagi anda mengira jarak pergerakan jari telunjuk anda dan membahagikannya dengan 685.7142857, anda boleh mendapatkan tempoh kekunci papan kekunci.

Kod lengkap untuk kawalan gerak isyarat pergerakan pesawat ialah:

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)
Salin selepas log masuk

Bahagian teras projek telah diterangkan dan kod lengkap telah diselesaikan Jika anda memerlukannya, tinggalkan a mesej di ruangan komen.

Selepas mendapatkan kod, lihat dahulu pada steps.txt yang sedang dijalankan.

Jika anda rasa artikel ini berguna untuk anda, sila klik "Baca" untuk menggalakkan saya, saya akan terus berkongsi projek Python+AI yang sangat baik pada masa hadapan.

Atas ialah kandungan terperinci Mainkan pertempuran kapal terbang dengan gerak isyarat maya AI. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Memahami sifat asid: tiang pangkalan data yang boleh dipercayai Memahami sifat asid: tiang pangkalan data yang boleh dipercayai Apr 08, 2025 pm 06:33 PM

Penjelasan terperinci mengenai atribut asid asid pangkalan data adalah satu set peraturan untuk memastikan kebolehpercayaan dan konsistensi urus niaga pangkalan data. Mereka menentukan bagaimana sistem pangkalan data mengendalikan urus niaga, dan memastikan integriti dan ketepatan data walaupun dalam hal kemalangan sistem, gangguan kuasa, atau pelbagai pengguna akses serentak. Gambaran keseluruhan atribut asid Atomicity: Transaksi dianggap sebagai unit yang tidak dapat dipisahkan. Mana -mana bahagian gagal, keseluruhan transaksi dilancarkan kembali, dan pangkalan data tidak mengekalkan sebarang perubahan. Sebagai contoh, jika pemindahan bank ditolak dari satu akaun tetapi tidak meningkat kepada yang lain, keseluruhan operasi dibatalkan. Begintransaction; UpdateAcCountSsetBalance = Balance-100Wh

Klausa had SQL Master: Kawal bilangan baris dalam pertanyaan Klausa had SQL Master: Kawal bilangan baris dalam pertanyaan Apr 08, 2025 pm 07:00 PM

Klausa SQLLIMIT: Kawal bilangan baris dalam hasil pertanyaan. Klausa had dalam SQL digunakan untuk mengehadkan bilangan baris yang dikembalikan oleh pertanyaan. Ini sangat berguna apabila memproses set data yang besar, paparan paginat dan data ujian, dan dapat meningkatkan kecekapan pertanyaan dengan berkesan. Sintaks Asas Sintaks: SelectColumn1, Column2, ... FROMTABLE_NAMELIMITNUMBER_OF_ROWS; Number_of_rows: Tentukan bilangan baris yang dikembalikan. Sintaks dengan Offset: SelectColumn1, Column2, ... Fromtable_namelimitoffset, Number_of_rows; Offset: Langkau

Bagaimana untuk mengoptimumkan prestasi MySQL untuk aplikasi beban tinggi? Bagaimana untuk mengoptimumkan prestasi MySQL untuk aplikasi beban tinggi? Apr 08, 2025 pm 06:03 PM

Panduan Pengoptimuman Prestasi Pangkalan Data MySQL Dalam aplikasi yang berintensifkan sumber, pangkalan data MySQL memainkan peranan penting dan bertanggungjawab untuk menguruskan urus niaga besar-besaran. Walau bagaimanapun, apabila skala aplikasi berkembang, kemunculan prestasi pangkalan data sering menjadi kekangan. Artikel ini akan meneroka satu siri strategi pengoptimuman prestasi MySQL yang berkesan untuk memastikan aplikasi anda tetap cekap dan responsif di bawah beban tinggi. Kami akan menggabungkan kes-kes sebenar untuk menerangkan teknologi utama yang mendalam seperti pengindeksan, pengoptimuman pertanyaan, reka bentuk pangkalan data dan caching. 1. Reka bentuk seni bina pangkalan data dan seni bina pangkalan data yang dioptimumkan adalah asas pengoptimuman prestasi MySQL. Berikut adalah beberapa prinsip teras: Memilih jenis data yang betul dan memilih jenis data terkecil yang memenuhi keperluan bukan sahaja dapat menjimatkan ruang penyimpanan, tetapi juga meningkatkan kelajuan pemprosesan data.

Kaedah Navicat untuk melihat kata laluan pangkalan data MongoDB Kaedah Navicat untuk melihat kata laluan pangkalan data MongoDB Apr 08, 2025 pm 09:39 PM

Tidak mustahil untuk melihat kata laluan MongoDB secara langsung melalui Navicat kerana ia disimpan sebagai nilai hash. Cara mendapatkan kata laluan yang hilang: 1. Tetapkan semula kata laluan; 2. Periksa fail konfigurasi (mungkin mengandungi nilai hash); 3. Semak Kod (boleh kata laluan Hardcode).

Menguasai Pesanan mengikut klausa dalam SQL: Susun data dengan berkesan Menguasai Pesanan mengikut klausa dalam SQL: Susun data dengan berkesan Apr 08, 2025 pm 07:03 PM

Penjelasan terperinci mengenai klausa SQLOrderBy: Penyortiran Data Orderby yang cekap adalah pernyataan utama dalam SQL yang digunakan untuk menyusun set hasil pertanyaan. Ia boleh diatur dalam urutan menaik (ASC) atau perintah menurun (DESC) dalam lajur tunggal atau lajur berganda, meningkatkan kebolehbacaan data dan kecekapan analisis. Orderby Syntax SelectColumn1, Column2, ... FRARTABLE_NAMEORDERBYCOLUMN_NAME [asc | desc]; column_name: sort mengikut lajur. ASC: Susun Pesanan Menaik (lalai). DESC: Susun mengikut urutan menurun. Ciri-ciri Utama Orderby: Penyortiran Multi-lajur: Menyokong pelbagai penyortiran lajur, dan urutan lajur menentukan keutamaan penyortiran. sejak

Navicat menyambung ke kod ralat dan penyelesaian pangkalan data Navicat menyambung ke kod ralat dan penyelesaian pangkalan data Apr 08, 2025 pm 11:06 PM

Kesilapan dan penyelesaian yang biasa apabila menyambung ke pangkalan data: Nama pengguna atau kata laluan (ralat 1045) Sambungan blok firewall (ralat 2003) Timeout sambungan (ralat 10060)

Cara Menulis Tutorial Terkini Mengenai Pernyataan Sisipan SQL Cara Menulis Tutorial Terkini Mengenai Pernyataan Sisipan SQL Apr 09, 2025 pm 01:48 PM

Pernyataan sisipan SQL digunakan untuk menambah baris baru ke jadual pangkalan data, dan sintaksinya ialah: masukkan ke dalam table_name (column1, column2, ..., columnn) nilai (value1, value2, ..., valuen);. Kenyataan ini menyokong memasukkan pelbagai nilai dan membolehkan nilai null dimasukkan ke dalam lajur, tetapi perlu untuk memastikan bahawa nilai yang dimasukkan bersesuaian dengan jenis data lajur untuk mengelakkan melanggar kekangan keunikan.

Cara menambah lajur baru dalam SQL Cara menambah lajur baru dalam SQL Apr 09, 2025 pm 02:09 PM

Tambah lajur baru ke jadual yang sedia ada dalam SQL dengan menggunakan pernyataan Alter Table. Langkah -langkah khusus termasuk: Menentukan nama jadual dan maklumat lajur, menulis pernyataan Alter Jadual, dan melaksanakan pernyataan. Sebagai contoh, tambahkan lajur e -mel ke Jadual Pelanggan (Varchar (50)): Alter Jadual Pelanggan Tambah Varchar E -mel (50);

See all articles