Mainkan pertempuran kapal terbang dengan gerak isyarat maya AI
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.
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.
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]
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.
Permainan dijeda
Jika jarak antara koordinat jari telunjuk dan jari tengah kurang daripada ambang tertentu, gerakkan tetikus dan klik butang mulakan permainan
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
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)
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')
Tempoh kunci tetap ialah 0.05 saat, dan pesawat ujian bergerak dari tengah ke paling kiri, minimum n yang diperlukan.
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)
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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



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

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.

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

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

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)

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.

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