Strategi Pengenalan Gerakan

12

Bekerja dengan Wii Saya sering merasa perlu mengenali gerakan sederhana, sejauh ini saya bisa melihat besarnya akselerasi untuk mengenali gerakan yang disebutkan dalam dokumen desain game kami, tetapi saya ingin membuat sistem yang lebih kuat yang memungkinkan "merekam" contoh gerakan dan pengenalan gerakan kompleks.

Strategi apa yang pernah Anda gunakan di masa lalu? Kenapa mereka bekerja? Kenapa mereka tidak bekerja? Apa yang akan Anda lakukan secara berbeda?

jessecurry
sumber

Jawaban:

5

Sunting Affine invarian memerlukan versi kelengkungan ini.
http://en.wikipedia.org/wiki/Affine_curvature#Affine_curvature
Anggap itu yang saya maksud. (Meskipun kelengkungan normal, saya pikir tidak sama dengan rotasi yang bisa cukup baik).
Edit untuk versi kelengkungan skala invarian lihat di sini
/math/1329/what-is-the-form-of-curvature-that-is-invariant-under-rotations-and-uniform- scali

Masalah pengenalan gerakan adalah subkelas masalah pengenalan, dan masalah pengenalan pada dasarnya adalah masalah perbandingan model.

Anda mencoba menyesuaikan gerakan Anda dengan beberapa koleksi gerakan, gerakan terbaik yang menang.

Saya akan merekam gerakan Anda beberapa kali, dan mencoba menyesuaikan data latihan Anda dengan sesuatu seperti b-spline (kurva). Anda mungkin ingin gerakan Anda tidak berubah-ubah dengan affine transformasi (rotasi, penskalaan, terjemahan), jadi simpan kurva sebagai tabel nilai kelengkungan (Tidak mungkin memiliki bentuk tertutup yang bagus), bukan berkoordinasi dengan koordinat kontrol Cartesian poin.

Itu model gerakan. Katakanlah Anda punya beberapa.

Untuk membandingkannya, mulailah dengan menyesuaikan data input Anda dan kemudian mengevaluasi kelengkungan x beberapa kali, di mana x memberikan trade-off yang baik antara akurasi dan kinerja.

Sekarang beralih melalui model dan kurangi nilai kelengkungan (dievaluasi pada titik yang sama sepanjang kurva masing-masing dalam hal panjang busur) dan kuadratkan perbedaannya. Nilai yang dihasilkan disebut residual. Ringkas semua residu. Model dengan residu terkecil adalah yang paling cocok, dan merupakan gerakan Anda yang paling mungkin.

Bandingkan jawaban saya dengan @ Olie. Mereka pada dasarnya sama, meskipun kami memilih model yang berbeda untuk gerakan, (membangun tabel kelengkungan yang ditandatangani dan merekam perubahan sudut tangen hampir sama, saya mengasumsikan data dihasilkan oleh kelancaran kurva dengan noise though), perbedaan utama adalah @ Olie termasuk kecepatan.

Memilih parameter apa yang akan dimasukkan dalam model Anda tergantung pada situasi dan persyaratan kinerja. Ingatlah bahwa menambahkan parameter ke model Anda meningkatkan dimensi.

Jonathan Fischoff
sumber
4

Dalam istilah yang sangat luas, Anda mungkin ingin mendefinisikan gerakan sebagai arah, diikuti dengan penundaan [mungkin sangat pendek], diikuti oleh arah lain (dan sudut relatif antara arah, dll., Hingga akhir.

Misalnya, membuat "t" dengan tongkat Anda (dan jangan lupa bahwa beberapa orang kidal, jadi definisi Anda tidak boleh bergantung pada tangan!) Adalah swoosh vertikal, penundaan pendek, pembalikan melengkung keluar, penundaan pendek, pembalikan menuju horizontal, tiba-tiba [dekat] berhenti.

Saat Anda membaca gerakan, Anda ingin melihat seberapa dekat pola yang dibaca sesuai dengan deskripsi pola.

Secara umum, Anda dapat memilah kamus definisi terlebih dahulu dengan menghilangkan kecocokan yang salah (yang bahkan tidak dimulai dengan benar, atau yang terlalu panjang atau terlalu pendek), kemudian "menilai" isyarat tersebut terhadap definisi yang tersisa. Skor gerakan dengan menilai setiap bagian seberapa baik itu cocok dengan definisi (0-100%) dan RMS itu (mengambil kesalahan, kuadrat, jumlah mereka, lalu ambil akar kuadrat dari jumlah itu.)

Menggunakan RMS menonjolkan perbedaan besar (menghasilkan skor yang lebih rendah), sementara cenderung menutupi perbedaan kecil (menghasilkan kecocokan yang lebih baik.)

Ada banyak materi tentang hal ini - Google gesture recognition. Jangan khawatir jika itu untuk stylus atau hal non-Wii lainnya, prinsip-prinsipnya beradaptasi dengan baik.

Olie
sumber
0

Saya hanya melakukan ini dengan mouse, tetapi solusi saya bekerja dengan sangat baik. Saya membuat gabungan titik-titik pola titik untuk mewakili gerakan - ini adalah bentuk untuk menggambar. Lalu saya menyimpan jalur kursor saat bergerak. Selanjutnya saya diskalakan jalur mouse ini sehingga memiliki lebar dan tinggi yang sama dengan pola target. Setiap pembaruan yang saya lewati semua titik jalur kursor saya memastikan mereka masing-masing dalam jarak tertentu dari simpul jalur gerakan, melihat setiap titik jalur gerakan secara berurutan.

Iain
sumber
0

Saya diajari Game AI oleh salah satu pengembang utama di AiLive (dia ada di beberapa video), dan jawaban singkatnya adalah mencoba melakukan pengenalan gerakan ini terlalu menyakitkan untuk menghabiskan hidup Anda. Saya sarankan pergi dengan rute middleware, dan mendapatkan suite LiveMove AiLive.

kunyah
sumber