Pengenalan gerakan dengan Hidden Markov Models

8

Saat ini saya sedang mengerjakan sistem pengenalan gerakan (untuk Aplikasi Android). Saya pikir saya telah menyelesaikan tahap pemrosesan Gambar, di mana saya dapat mengekstraksi kontur tangan (saya memakai sarung tangan untuk menghindari pengurangan latar belakang untuk saat ini).

Saya juga mendapatkan ellipse / rectangle, centroid sebagai fitur bentuk 'penting' dari tangan.

Masalah saya adalah bahwa tidak banyak literatur menunjukkan apa tahap selanjutnya sebelum klasifikasi gambar melalui model markov tersembunyi. Saya menemukan tahap 'Ekstraksi Fitur' ini sangat ambigu.

Saat ini saya mendapatkan daftar sudut kontur (yang diperkirakan untuk memperoleh sejumlah sudut)

Masalahnya adalah saya tidak tahu apa yang harus saya lakukan selanjutnya. Ketika saya mencari literatur sebagai 'Klasifikasi bentuk menggunakan HMMs', saya masih kesulitan melakukan apa yang harus saya lakukan selanjutnya.

Sebagai alat untuk HMM saya berencana menggunakan JaHMM. Tetapi saya tidak tahu bagaimana cara bereksperimen dengan alat pada tahap ini karena saya tidak tahu apa yang akan menjadi masukan untuk tahap klasifikasi ini!

Ini menunjukkan informasi yang dapat saya peroleh dari tangan saya

Saya telah menjumpai daftar fungsi yang saya temukan dalam beberapa literatur, seperti Fast Fourier Descriptors, Curvature Descriptors, B Spline; namun saya tidak tahu bagaimana menerapkan fungsi-fungsi ini ke data saya saat ini (yaitu daftar sudut, misalnya: -63, 154, 3, 23, 54, ....)


PEMBARUAN 1:

Terima kasih atas informasi Anda. @Peter K.

Mengenai pose: Saya akan pergi untuk satu set kata dalam Bahasa Isyarat Amerika yang digerakkan jari, misalnya 'anjing' -> 'd' 'o' 'g' (3 negara); tapi saat ini aku belum memutuskan untuk apa.

Saat ini saya sedang membaca beberapa makalah lagi untuk melihat jenis informasi apa yang harus saya ekstrak, seperti:

  • centroid tangan
  • sudut gerak
  • jarak dari titik tertentu ke titik yang berbeda dari kontur tangan (dll.)

Sekarang saya telah menemukan kertas yang sepertinya menunjukkan apa yang ingin saya lakukan, saya tidak yakin:

http://espace.library.uq.edu.au/eserv.php?pid=UQ:10700&dsID=n0273.pdf

Saat ini saya sedang membaca bagian 5 - Vektor Kuantisasi (saya mendengar istilah ini sebelumnya tetapi tidak benar-benar tahu apa yang terlibat, dan pada Gambar 5 tampaknya ada algoritma yang kompleks yang, jika saya mengerti benar, mengubah set nilai yang saya capai dari tangan (hanya disebutkan) menjadi 1 digit yang dapat saya gunakan sebagai urutan Pengamatan untuk melatih HMM untuk tanda tertentu 1. Apakah Anda pikir saya bergerak di jalur yang benar? (Saya sedang bekerja di Android, (NDK) , Saya menemukan JaHMM sebagai alat HMM, dan menggunakan OpenCV untuk pemrosesan gambar.

@ Peter K. Terima kasih atas jawaban Anda. Mengenai pembuatan data saya berencana untuk mengikuti langkah-langkah dari makalah ini, setelah saya menghasilkan dataset pribadi saya: (bagian 4 dan 5) http://www.i.ci.ritsumei.ac.jp/ ~shimada/papers/vi02 -tanibata.pdf


UPDATE 2: perlu diingat bahwa gerakan dibentuk dari {postur a, postur b, postur c}

Saya sekarang berpikir bahwa saya harus menggunakan beberapa bentuk algoritma klasifikasi. Artinya, saya saat ini memiliki satu set vektor fitur:

Postur A: [sudut elips di sekitarnya, tinggi: rasio lebar]

  • 0.802985 33.909615
  • 0.722824 31.209663
  • 0.734535 30.206722
  • 0.68397 31.838253
  • 0.713706 34.29641
  • 0.688798 30.603661
  • 0.721395 34.880161

Postur B: [terstruktur sama dengan postur A]

  • 0.474164 16.077467
    • 0,483104 14,526289
    • 0.478904 14.800572
    • 0.483134 14.523611
    • 0.480608 14.41159
    • 0.481552 15.563665
    • 0.497951 15.563585

dll ..

dan saya ingin itu ketika saya memberi makan vektor fitur saya mendapatkan simbol sederhana, misalnya 'A', 'B', dll.

Apakah ini mungkin? Saya juga memigrasikan pertanyaan di sini: /programming/15602963/vector-quantization-algorithms-used-to-provide-observation-afterences-for-hidden

uji
sumber
1
Anda perlu mendefinisikan apa yang Anda maksud dengan "gesture". Apakah maksud Anda pose tangan? Atau gerak tangan? Atau gerak jari-jari tangan? Ada banyak cara untuk menguliti kucing ini ...
Peter K.
Dalam hal ini, saya bertujuan untuk gerakan dan postur, simbol dasar dari langauge tanda Amerika mulai dari ejaan jari ke huruf dasar (pada titik waktu: satu tangan)
tes
1
Akan membaca dan melihat apa yang bisa saya hasilkan. Mungkin perlu beberapa saat untuk merespons. Perhatikan ruang ini.
Peter K.
Halo Saya mencoba melakukan pengenalan gerakan tangan dengan Android Open CV, saya pemula dengan kedua alat, bantuan apa pun dengan langkah dan ide dari pengalaman Anda. Terima kasih banyak.
user2253346
Halo jika saya jadi Anda, saya akan mulai dengan mengikuti tutorial di halaman cv android terbuka. Sebelum itu langkah pertama adalah memastikan bahwa Anda telah mengatur pengembangan asli Anda dengan benar sehingga Anda dapat mengeksekusi kode C di aplikasi android Anda (jika Anda akan menggunakan C alih-alih java untuk hasil yang lebih efisien!)
test

Jawaban:

5

Saya telah menggunakan HMM untuk pengenalan gerakan tubuh (bukan pengenalan pose). Apa yang saya lakukan adalah: melacak tangan dan mengenali gerakan tangan di udara, Anda dapat membayangkannya sebagai jejak.

Anda dapat menggunakan HMM sebagai pengenal urutan, jadi pertama-tama Anda perlu mengubah gambar Anda menjadi urutan angka tersendiri.

Untuk setiap gerakan yang ingin Anda kenali, Anda perlu melatih HMM untuk itu.

Jadi Anda memiliki kamus dengan beberapa kata yang dikenal. Masing-masing adalah HMM terlatih. Jika Anda memiliki kata baru (obdervation yang tidak diketahui), Anda dapat menghitung probabilitas untuk setiap kata dalam kamus untuk kemungkinan kata yang tidak dikenal.

Beberapa kode semu:

##################### training phase

examples = [112233, 11233, 123, 1122223333]
word1 = train(example)

examples = [222333, 22222223333, 2222333333]
word2 = train(example)

examples = [124555, 1122445, 1111111222224444555]
word3 = train(example)

dictionary = [word1, word2, word3]


##################### recognition phase

#let's say you have a new unkown word: 12245, you want to know what word of the dictionary it is more likly

unkown = 12245
probabilities = []
for w in word:
    probabilities.append( calculate_prob(unkown) )

Sekarang, lihat berapa nilai maksimum dalam probabilitas dan Anda mendapatkan kata yang paling mungkin dari kamus!

Lihat disini:

http://www.ece.ucsb.edu/Faculty/Rabiner/ece259/Reprints/tutorial%20on%20hmm%20and%20applications.pdf

http://www.codeproject.com/Articles/69647/Hidden-Markov-Models-in-C

http://www.creativedistraction.com/demos/gesture-recognition-kinect-with-hidden-markov-models-hmms/

nkint
sumber
Terima kasih atas tanggapan yang luar biasa. Saya mengerti semua yang Anda katakan. Masalah saya saat ini adalah bagaimana saya akan mendapatkan pengamatan yaitu [112223333,222333, dll ...] yaitu bagaimana saya dapat mengkonversi data saya saat ini (mis. Panjang dan lebar tangan + gerak pada saat yang sama + sudut gerak, dll,) untuk jenis-jenis angka ini? Dari hasil edit saya, saya menyebutkan bahwa saya mungkin akan melihat clustering dan K Means untuk mendapatkan vektor 'kode'. Apa tanggapan Anda? Terima kasih banyak lagi!
Tes
1
ya ini masalah. saya menggunakan kmeans tetapi tidak sesuai dengan masalah saya jadi saya hanya menggunakan centroid dan "discretized" gesture dengan jarak eculidean dari centroids. pasti Anda bisa membuatnya iklan pintar menambahkan lebih banyak data seperti kecepatan dan kmeans bisa muat tetapi saya tidak tahu maaf .. lakukan beberapa percobaan! kadang-kadang terjadi di machinelarning bahwa beberapa solusi empiris berfungsi lebih baik untuk beberapa data tertentu .. coba solusi yang berbeda!
nkint
(jika Anda memerlukan beberapa contoh cara menggunakan kmeans dengan opencv tanyakan saja)
nkint
mungkin bukan solusi yang baik tetapi Anda dapat mencoba "membingkai" tangan .. en.wikipedia.org/wiki/Morphological_skeleton dan di sini beberapa kode: felix.abecassis.me/2011/09/opencv-morphological-skeleton
nkint
jika Anda menyelesaikannya, katakan saja padaku bagaimana Anda bisa melakukannya, itu adalah tugas yang bagus
:)
3

Mari kita mulai dengan pengenalan pose. Makalah ini melacak batas tangan, dan menghitung jumlah deteksi ujung jari dari batas itu. Satu hal yang perlu diperhatikan dalam makalah itu adalah tidak ada informasi "keadaan" yang diperlukan. Untuk estimasi pose / posisi, HMM mungkin tidak cocok.

Informasi isyarat cocok dengan lebih baik ke gamut HMM untuk pemecahan masalah. Namun, saya perlu melihat sedikit lebih banyak jenis data yang akan Anda gunakan untuk gerakan. Bisakah Anda menjelaskan sedikit lebih banyak tentang algoritma yang menghasilkan data yang Anda miliki?

Masalahnya adalah bahwa memilih struktur yang tepat dari model Markov tersembunyi memiliki sedikit pengaruh pada akurasi yang dapat dicapai ... Peringatan: Tautan PDF!

Peter K.
sumber
1
Saya telah membuat pembaruan untuk pertanyaan! Terima kasih banyak atas informasi Anda
test