SIMULASI SISTEM INDUSTRI Proses Optimasi pada Bengkel Mitra Motor 4 menggunakan Metode Simulasi
SIMULASI INTERAKSI ANTARMUKA
-
Upload
independent -
Category
Documents
-
view
2 -
download
0
Transcript of SIMULASI INTERAKSI ANTARMUKA
i
DEPARTEMEN TEKNIK INFORMATIKA
INSTITUT TEKNOLOGI HARAPAN BANGSA
LEMBAR PENGESAHAN
PERMAINAN SIMULASI INTERAKSI ANTARMUKA
DENGAN GESTURE
Oleh:
Shenna Widianta
1109025
Telah disetujui dan disahkan sebagai laporan tugas akhir
Program Studi Strata-1 Departemen Teknik Informatika
INSTITUT TEKNOLOGI HARAPAN BANGSA
Bandung, Juli 2013
Pembimbing 1
Ken Ratri Retno Wardani, S.Kom., MT
NIK: 105033
ii
DEPARTEMEN TEKNIK INFORMATIKA
INSTITUT TEKNOLOGI HARAPAN BANGSA
PERNYATAAN HASIL KARYA PRIBADI
Saya yang bertanda tangan di bawah ini :
Nama : Shenna Widianta
NIM : 1109025
Dengan ini menyatakan bahwa laporan Tugas Akhir dengan Judul:
“Permainan Simulasi Interaksi Antarmuka Dengan Gestur” adalah hasil pekerjaan
saya dan seluruh ide, pendapat atau materi dari sumber lain telah dikutip dengan
cara penulisan referensi yang sesuai.
Pernyataan ini saya buat dengan sebenar-benarnya dan jika pernyataan ini tidak
sesuai dengan kenyataan maka saya bersedia menanggung sanksi yang akan
dikenakan pada saya.
Bandung, Juli 2013
Yang membuat pernyataan,
Shenna Widianta
iii
ABSTRAK
Gesture Interface adalah media interaksi antara manusia dan komputer dengan
menggunakan gesture. Gesture Interface dapat tercapai melalui penerapan
teknologi Computer Vision. Salah satu perangkat yang menggunakan teknologi
tersebut adalah Kinect. Kinect adalah aksesoris tambahan buatan Microsoft yang
digunakan pada konsol video game XBOX 360 yang berguna sebagai media
penerimaan input berupa gesture dan suara manusia. Kinect memiliki
kemampuan untuk mendeteksi letak-letak sendi tubuh manusia dalam posisi 3
dimensi secara real-time. Pada tugas akhir ini dikembangkan sebuah aplikasi
permainan yang menggunakan Gesture Interface dengan Kinect sebagai media
inputnya. Ada bermacam-macam gerakan dan suara yang dapat dilakukan oleh
user. Gerakan dan suara tersebut direspon oleh aplikasi dalam bentuk hewan yang
dapat melakukan bermacam-macam seperti gerakan melompat, berguling dan
menari.
Kata kunci: Kinect, Speech recognition, Gesture interface
iv
ABSTRACT
Gesture interface is interaction media between human and computer by using
gesture. Gesture Interface is possible by using Computer Vision technology
implementation. One of device that using technology is Kinect. Kinect is an
additional accessories that made by Microsoft for XBOX 360 video game console
which is used as human gesture and voice input media. Kinect has ability to
detect human joints in 3 dimensional position in real-time. In this final
assignment are developed a game application that using Gesture Interface with
Kinect as input media. There are various moves and voices that user can do. That
moves and voices are responded by the application in a animal form that can do
various moves like jumping, rolling and dancing.
Keywords: Kinect, Speech recognition, Gesture interface
v
PEDOMAN PENGGUNAAN LAPORAN TUGAS AKHIR
Laporan tugas akhir yang tidak dipublikasikan terdaftar dan tersedia di
perpustakaan Institut Teknologi Harapan Bangsa, dan terbuka untuk umum
dengan ketentuan bahwa hak cipta ada pada pengarang. Referensi kepustakaan
diperkenankan dicatat, tetapi pengutipan atau peringkasan hanya dapat dilakukan
seizin pengarang dan harus sesuai disertai dengan kebiasaan ilmiah untuk
menyebutkan sumbernya.
Tidak diperkenankan untuk memperbanyak atau menerbitkan sebagian atau
seluruh laporan tugas akhir tanpa seizin dari pengarang yang bersangkutan.
vi
KATA PENGANTAR
Puji syukur penulis panjatkan kepada Tuhan Yesus karena atas rahmat-Nya
penulis dapat menyelesaikan tugas akhir ini dengan baik. Laporan ini merupakan
laporan penyusunan tugas akhir yang penulis lakukan sebagai salah satu syarat
untuk menyelesaikan program studi Strata-1 Teknik Informatika di Institut
Teknologi Harapan Bangsa.
Penulis menyadari bahwa tidak ada hal yang sempurna di dunia ini. Begitu juga
dengan laporan tugas akhir ini. Masih banyak sekali kekurangan yang terdapat
pada laporan ini. Karena itu, penulis sangat mengharapkan pengembangan lebih
lanjut kepada setiap orang yang memiliki ketertarikan yang sama dalam topik
yang penulis usung dalam tugas akhir ini. Segala kritik dan saran yang
membangun sangat penulis harapkan.
Dalam kesempatan ini, penulis ingin mengucapkan terima kasih secara khusus
kepada:
1. Ibu Ken Ratri Retno Wardani, S.Kom., M.T. selaku pembimbing yang
sangat membantu penulis dalam memberikan saran dalam pembuatan
dokumen dan aplikasi yang dibuat pada tugas akhir ini.
2. Ibu Herastia Maharani, M.T. selaku penguji yang sangat membantu
penulis dalam penulisan laporan tugas akhir ini dan memberikan masukan
kepada penulis.
3. Ibu Elisafina Siswanto, S.T selaku penguji tugas akhir yang banyak
memberikan masukan dan saran sehingga dapat menyelesaikan tugas akhir
ini.
4. Ibu Desti selaku staf dari departemen Teknik Informatika yang telah
membantu penulis dalam menyusun jadwal seminar, pra-sidang, dan
sidang.
5. Ibu penulis yang selalu memberikan dukungan dan doa kepada penulis
sehingga penulis dapat menyelesaikan tugas akhir ini dengan baik.
vii
6. Saudara penulis Wira Pradita yang selalu memberikan nasihat, dukungan
dan canda kepada penulis dalam pembuatan tugas akhir ini.
7. Bulik Nana yang memberikan dukungan penuh kepada penulis dalam
pembuatan tugas akhir ini.
8. Teman-teman tercinta yang selalu memberi dukungan yaitu Sherly
Gunawan, Ria Chaniago, Fiona Alen Sofyan, Rega Novaldi, M. Dendy
Agaputra, dan Vito Wilpradigya yang setia menyemangati penulis dalam
pengerjaan tugas akhir.
9. Kim Kim, Hanna, Jayme, Gian, Donny, Alvin dan teman-teman dari
Teknik Informatika angkatan 2009 yang selalu memberikan saran positif,
kritik, dan hiburan kepada penulis selama kuliah.
10. Arin, Saras, Dega, Galuh, Galih, Dominggo, Salim, Riko dan teman-teman
dari Pemuda GKJB yang menguatkan kerohanian penulis.
11. Evan, Rissandy, Darwin, Ega, Billy, Cavvien, Alvin dan teman-teman dari
Checkerz yang selalu menghibur penulis.
12. Rekan-rekan yang telah banyak membantu penulis yang tidak dapat
penulis sebutkan satu persatu.
Shenna Widianta
Bandung, Juli 2013
Yang membuat pernyataan,
viii
DAFTAR ISI
LEMBAR PENGESAHAN ................................... Error! Bookmark not defined.
ABSTRAK ............................................................................................................... i
ABSTRACT .............................................................................................................. ii
PEDOMAN PENGGUNAAN LAPORAN TUGAS AKHIR ................................. v
KATA PENGANTAR ............................................................................................. vi
DAFTAR ISI ........................................................................................................ viii
DAFTAR GAMBAR ............................................................................................. xi
DAFTAR TABEL ................................................................................................. xiii
BAB 1 PENDAHULUAN ...................................................................................... 1
1.1. Latar Belakang Penelitian .............................................................................. 1
1.2 Rumusan Masalah .......................................................................................... 2
1.3 Batasan Masalah ............................................................................................ 3
1.4 Tujuan Penelitian ........................................................................................... 3
1.5 Sistematika Penulisan .................................................................................... 3
BAB 2 LANDASAN TEORI .................................................................................. 5
2.1 User Interface ................................................................................................ 5
2.2 Multi Modal Interface .................................................................................... 5
2.2.1 Sound User Interface ............................................................................ 6
2.2.2 Gesture User Interface .......................................................................... 7
2.3 Gambar Digital .............................................................................................. 7
2.3.1 Depth Map ............................................................................................ 8
2.4 Microsoft Kinect ............................................................................................ 8
2.4.1 Sensor.................................................................................................... 8
2.4.2 Jarak Pandang Kinect.......................................................................... 10
2.4.3 Sudut Pandang Kinect ......................................................................... 10
2.4.4 Microphone Array ............................................................................... 10
ix
2.4.4.1 Noise Cancelation .................................................................. 10
2.4.4.2 Jarak Pendengaran .................................................................. 12
2.5 Sistem Koordinat ......................................................................................... 13
2.6 Skeletal Tracking pada Kinect ..................................................................... 14
2.7 Microsoft Speech Platform .......................................................................... 16
BAB 3 Analisis dan Perancangan ......................................................................... 17
3.1 Penempatan Objek dengan Kinect ............................................................... 18
3.2 Cara Kerja Permainan .................................................................................. 18
3.3 Penangkapan dan Pendefinisian Gerakan .................................................... 22
3.3.1 Jump .................................................................................................... 25
3.3.2 Roll...................................................................................................... 27
3.3.3 Dance .................................................................................................. 30
3.3.4 Eat ....................................................................................................... 33
3.3.5 Open Menu ......................................................................................... 34
3.3.6 Close Menu ......................................................................................... 36
3.4 Threshold pada Kinect Skeletal Tracking .................................................... 37
3.5 Proses Speech Recognition .......................................................................... 38
3.6 Skenario Program ........................................................................................ 39
3.7 Format Penyimpanan ................................................................................... 40
BAB 4 Implementasi dan Pengujian ..................................................................... 42
4.1 Lingkungan Pengembangan......................................................................... 42
4.1.1 Perangkat Keras .................................................................................. 42
4.1.2 Perangkat Lunak ................................................................................. 42
4.2 Implementasi Perangkat Lunak ................................................................... 43
4.2.1 Mendeteksi gerakan ............................................................................ 43
4.2.2 GesturePartResult Class ...................................................................... 52
4.2.3 Membuat Respon Gerakan.................................................................. 53
4.2.4 Mendeteksi Suara ................................................................................ 54
x
4.2.5 Perangkat Lunak ................................................................................. 56
4.3 Objek pada Permainan ................................................................................. 60
4.4 Memilih Menu ............................................................................................. 64
4.5 Penanganan Animasi .................................................................................... 67
4.6 Zooming ....................................................................................................... 69
4.7 Pengujian Gerakan ....................................................................................... 69
4.4.1 Pengujian 20 frame ............................................................................. 71
4.4.2 Pengujian 30 frame ............................................................................. 72
4.4.3 Pengujian 50 frame ............................................................................. 72
4.8 Pengujian Deteksi Suara .............................................................................. 73
4.9 Pengujian Penggunaan Threshold ................................................................ 74
4.9.1 Pengujian Threshold 0.1f (± 1cm) ...................................................... 74
4.9.2 Pengujian Threshold 0.3f (± 3cm) ...................................................... 74
4.9.3 Pengujian Threshold 0.5f (± 5 cm) ..................................................... 75
BAB 5 KESIMPULAN DAN SARAN ................................................................ 76
5.1 Kesimpulan .................................................................................................. 76
5.2 Saran ............................................................................................................ 76
DAFTAR PUSTAKA ............................................................................................ 78
xi
DAFTAR GAMBAR
Gambar 2. 1 Perbedaan Gambar biasa dengan Depth Map .................................... 8
Gambar 2. 2 Komponen Kinect ............................................................................. 9
Gambar 2. 3 Pemancaran Sinar Infra Merah dari Kinect ........................................ 9
Gambar 2. 4 Noise Cancelation ............................................................................. 11
Gambar 2. 5 Jarak pendengaran manusia ............................................................... 11
Gambar 2. 6 Sudut Pendengaran ........................................................................... 12
Gambar 2. 7 Menentukan Sudut Spesifik Pendengaran ........................................ 12
Gambar 2. 8 Sistem Koordinat 3 Dimensi ........................................................... 13
Gambar 2. 9 Langkah-langkah pembentukan node ............................................... 14
Gambar 2. 10 Gambar Skeletal Tracking .............................................................. 15
Gambar 2. 11 ......................................................................................................... 15
20 Titik Sendi (Joint) yang diperoleh dari hasil Skeletal Tracking ....................... 15
Gambar 3. 1 Jarak yang direkomendasikan antara Kinect dengan Pemain. ......... 18
Gambar 3. 2 Contoh Gerakan yang Digunakan dalam Permainan ....................... 19
Gambar 3. 3 Flowchart Skeletal Tracking pada Kinect ........................................ 22
Gambar 3. 4 Bagian-bagian gerakan melambaikan tangan .................................. 23
Gambar 3. 5 Flowchart Pengenalan Gestur .......................................................... 24
Gambar 3. 6 Jump Bagian 1 .................................................................................. 25
Gambar 3. 7 Jump Bagian 2 .................................................................................. 26
Gambar 3. 8 Roll Bagian 1 .................................................................................... 27
Gambar 3. 9 Roll Bagian 2 .................................................................................... 28
Gambar 3. 10 Roll Bagian 3 ................................................................................. 28
Gambar 3. 11 Roll Bagian 4 .................................................................................. 29
Gambar 3. 12 Gerakan Roll Bagian 5 ................................................................... 30
Gambar 3. 13 Gerakan Dance Bagian 1 ................................................................ 31
Gambar 3. 14 Gerakan Dance Bagian 2 ................................................................ 32
Gambar 3. 15 Gerakan Eat Bagian 1 ..................................................................... 33
Gambar 3. 16 Gerakan Eat Bagian 2 ..................................................................... 34
xii
Gambar 3. 17 Gerakan Open Menu Bagian 1 ....................................................... 34
Gambar 3. 18 Gerakan Open Menu Bagian 2 ....................................................... 35
Gambar 3. 19 Gerakan Close Menu Bagian 1...................................................... 36
Gambar 3. 20 Gerakan Close Menu Bagian 2 ...................................................... 37
Gambar 3. 21 Flowchart Speech Recognition ...................................................... 38
Gambar 3. 22 Flowchart Skenario Permainan ...................................................... 39
Gambar 3. 23 Tutorial Jenis Gerakan .................................................................... 40
Gambar 4. 1 Halaman Utama Perangkat Lunak.................................................... 57
Gambar 4. 2 Pertanyaan Tutorial .......................................................................... 58
Gambar 4. 3 Mencoba Suara ................................................................................. 58
Gambar 4. 4 Mencoba Gerakan ............................................................................ 59
Gambar 4. 5 Mencoba Gerakan ............................................................................ 59
Gambar 4. 6 Mode Bermain .................................................................................. 60
Gambar 4. 7 Posisi Awal ....................................................................................... 60
Gambar 4. 8 Gerakan Jump ................................................................................... 61
Gambar 4. 9 Gerakan Eat ...................................................................................... 62
Gambar 4. 10 Gerakan Roll .................................................................................. 62
Gambar 4. 11 Gerakan Dance ............................................................................... 63
Gambar 4. 12 Gerakan Open Menu ...................................................................... 63
Gambar 4. 13 Button Normal Image ..................................................................... 66
Gambar 4. 14 Button Hover Image ....................................................................... 66
Gambar 4. 15 Cursor with Progress Bar ............................................................... 66
xiii
DAFTAR TABEL
Tabel 3. 1 Daftar Gerakan dan Fungsinya ............................................................. 19
Tabel 3. 2 Daftar Suara dan Fungsinya ................................................................. 20
Tabel 3. 3 Daftar Gerakan dan Point yang Didapat .............................................. 21
Tabel 3. 4 Daftar Barang dan Point yang Diperlukan ........................................... 21
Tabel 4. 1 Tabel Contoh Pengujian ....................................................................... 70
Tabel 4. 2 Pengujian 20 Frame ............................................................................ 71
Tabel 4. 3 Pengujian 30 Frame ............................................................................ 72
Tabel 4. 4 Pengujian 50 Frame ............................................................................. 72
Tabel 4. 5 Tabel Pengujian Suara .......................................................................... 73
Tabel 4. 6 Pengujian Threshold 0.1f (± 1cm) ........................................................ 74
Tabel 4. 7 Pengujian Threshold 0.3f (± 3cm) ........................................................ 75
Tabel 4. 8 Pengujian Threshold 0.5f (± 5cm) ........................................................ 75
1
BAB 1
PENDAHULUAN
1.1. Latar Belakang Penelitian
Ilmu Interaksi Manusia dengan Komputer terus berkembang. Dimulai dari
penggunaan keyboard, mouse hingga layar sentuh sebagai input data. Teknologi
berkembang semakin alami dan intuitif. Seiring berjalannya waktu cara baru
dalam berinteraksi dengan komputer muncul, yaitu dengan menggunakan Gesture
dan suara. Cara alami dalam berinteraksi dengan komputer membuat komputer
semakin mudah digunakan. [MIC132]
Manusia memiliki 5 indra : penglihatan, suara, sentuhan, rasa dan penciuman.
Penglihatan adalah indra yang paling dominan dari kebanyakan orang, dan
kebanyakan system yang interaktif menggunakan jalur penglihatan sebagai media
utama dalam presentasi melalui grafik, teks, video dan animasi. Seringkali media
interaktif yang terdapat pada komputer hanya berfokus kepada penglihatan saja.
Akan tetapi sifat alami manusia yang dapat merasakan keseluruhan lingkungannya
dengan kelima indra yang dimilikinya kurang terpakai apabila hanya fokus pada
satu indra saja. Oleh karena itu alangkah baiknya apabila dibuatnya sistem
interaktif yang dapat menggunakan lebih dari satu indra pada manusia.
Pemanfaatan lebih dari 1 indra dalam sistem interaktif disebut sebagai Multi –
Modal Interface. [ALA04].
Pada Tugas Akhir ini penulis ingin melakukan penelitian mengenai Gesture User
Interface dengan menggunakan media Microsoft Kinect. Kinect adalah sensor
pendeteksi gerak dan objek dalam bentuk tiga dimensi. Tiga dimensi yang
dimaksud adalah, sensor dapat mengetahui jarak antara sensor dengan objek yang
ditangkap. Kinect memiliki tiga komponen utama untuk mendeteksi gerakan dan
2
menangkap objek dalam bentuk tiga dimensi. Komponen tersebut adalah RGB
Kamera, Infrared Emitter dan Infrared Sensor. Selain itu juga Kinect memiliki
fitur speech recognition sehingga dapat digunakan untuk mengubah suara menjadi
teks.
Kinect dipilih karena oleh penulis karena produk tersebut mendukung
pengembangan dalam bahasa VB, C++ dan C# yang dapat digunakan secara
komersil. Penelitian yang dilakukan adalah dengan membuat sebuah permainan
mengenai hewan peliharaan. Sudah banyak permainan dengan tema yang sama
berada di pasaran, akan tetapi tentu saja pengalaman yang dihadirkan dalam
permainan tersebut masih terasa kurang karenan media input yang terbatas. Oleh
karena itu dibuatlah permainan hewan peliharaan yang menggunakan Gesture UI
sebagai input agar pengalaman yang dihadirkan menyerupai dengan memiliki
hewan peliharaan yang sebenarnya.
Diharapkan dengan adanya penelitian ini, dapat menerapkan ilmu Multi – Modal
Interface dan memberikan gambaran mengenai Gesture UI. Begitu juga dalam
perkembangan ilmu Interaksi Manusia dengan Komputer.
1.2 Rumusan Masalah
Rumusan masalah yang terdapat pada penelitian ini, adalah:
1. Parameter apa sajakah yang dibutuhkan untuk mengetahui adanya
pergerakan tubuh manusia?
2. Bagaimana mendefinisikan sebuah gerakan tertentu dari parameter yang
dibutuhkan?
3. Bagaimana meningkatkan akurasi pengenalan sebuah gerakan?
4. Bagaimana membuat sistem pengenalan suara berdasarkan kata-kata
tertentu yang ingin dikenali?
3
1.3 Batasan Masalah
Batasan masalah yang ada pada penelitian ini, antara lain:
1. Menggunakan sensor Microsoft Kinect untuk mendapatkan koordinat
sendi manusia.
2. Menggunakan Microsoft Speech Recognition untuk mengenali suara
3. Permainan ditujukan untuk 1 user
4. Jarak antara pemain dengan sensor berada pada jarak 1-3 meter.
5. Berada dalam ruang yang tidak bising.
6. Pengenalan suara dalam bahasa Inggris.
1.4 Tujuan Penelitian
Maksud dari penelitian ini dibuat adalah mengimplementasikan Gesture UI untuk
berinteraksi dengan komputer dengan media Microsoft Kinect.
1.5 Sistematika Penulisan
BAB 1 Pendahuluan
Menjelaskan tentang latar belakang masalah,rumusan masalah, tujuan penelitian,
batasan masalah dan metodologi penelitian yang akan digunakan dalam tugas
akhir ini.
BAB 2 Landasan Teori
Pada bab ini menjelaskan teori-teori yang menunjang kerja praktek dan beberapa
aplikasi serta tools yang digunakan dalam pembuatan aplikasi
BAB 3 Analisis dan Perancangan Sistem
Pada bab ini menjelaskan tentang proses menganalisis dan merancang sistem yang
akan digunakan dalam membangun aplikasi ini.
BAB 4 Implementasi dan Pengujian
4
Pada bab ini menjelaskan tentang proses implementasi metode dan pengujian
aplikasi
BAB 5 Kesimpulan dan Saran
Berisi kesimpulan dan saran untuk aplikasi yang dibuat.
5
BAB 2
LANDASAN TEORI
2.1 User Interface
User Interface adalah ruang dimana interaksi antara manusia dengan mesin
terjadi. Tujuan dari adanya interaksi ini adalah terjadinya pengoperasian dan
pengendalian yang efektif terhadap mesin. Secara umum tujuan dari rekayasa
interaksi manusia dan mesin adalah memproduksi user Interface yang membuat
pengoperasian mesin menjadi mudah, menarik, menyenangkan dan menghasilkan
output yang diinginkan.
2.2 Multi Modal Interface
Menyediakan akses informasi melewati lebih dari satu mode interaksi adalah
prinsip dalam desain universal, seperti desain yang bergantung pada interaksi
multi-modal. Ada 5 indra : penglihatan, suara, sentuhan, rasa dan penciuman.
Penglihatan adalah indra yang paling dominan dari kebanyakan orang, dan
kebanyakan sistem yang interaktif menggunakan jalur penglihatan sebagai media
utama dalam presentasi melalui grafik, teks, video dan animasi.
Akan tetapi suara juga adalah jalur yang penting untuk membuat manusia peka
terhadap sekelilingnya, seperti mengawasi orang dan kejadian di sekitar kita.
Suara juga dapat memberikan efek emosional pada manusia, contohnya adalah
musik. Musik benar-benar sebuah pengalaman pendengaran, namun bisa juga
dapat mengubah mood, menimbulkan gambar visual, membangun atmosfir atau
pemandangan dalam pikiran pendengar.
Sentuhan juga memberikan informasi penting: umpan balik dari peraba
membentuk sebuah bagian intrisik dalam bagian pengoperasian berbagai macam
peralatan – mobil, alat music, pulpen, apapun yang membutuhkan genggaman
6
atau pergerakan. Sentuhan dapat membentuk sebuah ikatan antara seorang
individu berkomunikasi dengan informasi non-verbal.
Rasa dan penciuman adalah indra lainnya yang dimiliki manusia. Rasa dapat
berfungsi untuk mengetahui bahan utama dari sebuah benda ,sementara
penciuman berguna untuk mendeteksi sesuatu, seperti adanya tanda-tanda
kebakaran atau makanan yang sudah basi. Dalam penggunaan komputer belum
ada teknologi yang dapat mengakomodir kedua indra tersebut.
Hal penting yang didapat dari penjelasan kelima indra yang dimiliki manusia di
atas menggambarkan betapa pentingnya indra-indra tersebut dalam interaksi
kehidupan sehari-hari, dan dunia di sekitar adalah dunia yang multi-sensor, setiap
indra memberikan informasi berbeda yang menginformasikan ke seluruh tubuh.
Karena interaksi manusia dengan dunia adalah dengan input yang multi-sensor
maka tentu saja masuk akal apabila sistem interaktif menggunakan lebih dari satu
jalur sensor sehingga memberikan pengalaman interaktif yang lebih kaya.
[ALA04]
2.2.1 Sound User Interface
Suara adalah kontributor penting dalam penggunaan sebuah perangkat. Ada bukti
dari hasil eksperimen yang menyatakan bahwa penambahan audio konfirmasi,
dalam bentuk penekanan key, mengurangi tingkat kesalahan penekanan key.
Suara juga ternyata penting dalam video games, tidak adanya suara feedback
dalam bermain video games dapat mengurangi skor yang diperoleh pemain. User
mendapatkan petunjuk penting dan informasi dari suara ketika mereka sedang
fokus dalam bentuk visual. Presentasi ganda dari suara dan pengilhatan
memberikan dukungan desain universal, dengan memberikan user akses terhadap
visual dan pendengaran yang tidak seimbang sekaligus. Hal tersebut juga
memungkinkan sebuah informasi dapat diakses dalam tempat yang kurang
penerangan atau di tempat yang bising. [ALA04]
7
Suara juga dapat dijadikan sebagai media untuk berinteraksi dengan sistem. Salah
satu cara untuk mengubah suara menjadi input untuk sistem adalah dengan adanya
metode Speech Recognition. Speech Recognition dibentuk dalam beberapa tahap.
Tahap awal adalah dengan mentransformasi bahasa kedalam model matematis.
Tahap berikutnya adalah menangkap suara dari pengguna dan mengubahnya
dalam bentuk kata-kata yang bisa dikenali oleh sistem. Tahap terakhir adalah
mengubah kata-kata yang diterima menjadi bahasa yang dapat dikenali sistem,
dan memberikan output yang sesuai. [ALA04]
2.2.2 Gesture User Interface
Gesture, yang dapat didefinisikan sebagai gerakan tertentu yang dibentuk untuk
menyampaikan sesuatu atau keinginan. Gesture dapat dijadikan sebuah
pendekatan yang menjanjikan dalam interaksi manusia dan komputer karena
seringkali beberapa parameter dapat dikendalikan secara simultan dalam sebuah
gaya yang intuitif. [ROG10]
Gesture adalah komponen dari interaksi manusia dengan komputer yang menjadi
perhatian dalam system multi-modal. Bisa mengendalikan komputer dengan
gerakan tangan tertentu akan menguntungkan dalam banyak situasi dimana
adanya keadaan yang tidak mungkin untuk mengetik, atau ketika indra lainnya
sedang dipakai. [MIC13]
2.3 Gambar Digital
Gambar RGB adalah gambar yang dimana setiap pixelnya direpresentasikan
dalam 3 nilai. Ketiga nilai tersebut adalah komponen merah, biru dan hijau dalam
scalar pixel ,contoh: (120,250,59) . Format penyimpanan nilai-nilai pixel tersebut
beragam, tergantung dari kelas yang dipakai. Untuk array single atau double,
nilainya berjarak [0,1]. Untuk kelas uint8, nilainya berjarak [0,255]. Untuk kelas
uint16, nilainya berjarak [0,65535]. [KUM10]
8
2.3.1 Depth Map
Depth Map, adalah gambar yang dapat memberikan informasi jarak antara titik
penglihatan ke objek pada gambar. Informasi jarak tersebut didapatkan dari
tingkat intensitas warna putih dari gambar. Apabila semakin putih maka objek
pada gambar semakin dekat dan sebaliknya. [FEH08]
Gambar 2. 1 Perbedaan Gambar biasa dengan Depth Map
Berdasarkan panduan warna pada gambar 2.1. Semakin tinggi nilai dari intensitas
warna sebuah pixel (antara 0 – 255 menandakan bahwa area pada pixel tersebut
berada di depan area pixel lainnya yang memiliki nilai intensitas warna lebih
rendah. Contoh, pixel dengan intensitas 200 berada lebih di depan daripada pixel
dengan intensitas 100.
2.4 Microsoft Kinect
2.4.1 Sensor
Kinect terdiri dari 3 komponen utama yang berfungsi untuk mengenali suatu
objek. Ketiga komponen tersebut adalah, Color Sensor, IR(Infrared) Emitter dan
IR Depth Sensor. Letak ketiga komponen tersebut dapat dilihat pada gambar
berikut :
9
Gambar 2. 2 Komponen Kinect
Berikut adalah penjelasan mengenai fungsi-fungsi ketiga komponen tersebut
1. Color sensor
Berfungsi sebagai untuk menangkap gambar dengan warna yang lengkap dalam
resolusi hingga 1280x960 dengan kecepatan hingga 30 frame per detik.
2. IR Emitter
Berfungsi sebagai pemancar laser infra merah ke segala arah di depan sensor.
Gambar 2. 3 Pemancaran Sinar Infra Merah dari Kinect
3. IR Depth Sensor
Berfungsi untuk menangkap pantulan infra merah yang dipancarkan IR Emitter
sehingga memungkinkan untuk mendapatkan tingkat kedalaman antara sebuah
10
objek dengan sensor. Resolusi maksimal yang ditangkap sensor ini adalah sebesar
640 x 480 pixel dengan kecepatan 30 frame per detik.
2.4.2 Jarak Pandang Kinect
Batas jarak pandang Sensor pada Kinect berada pada jarak antara 0.8 – 4 meter.
Akan tetapi jarak yang direkomendasikan untuk penggunaan adalah pada jarak
antara 1.2- 3.5 meter. [MIC12]
2.4.3 Sudut Pandang Kinect
Sudut pandang sensor Kinect adalah sebesar 57.5 derajat secara horizontal, dan
43,5 derajat secara vertikal. Dalam sudut pandang vertikal 43,5 derajat adalah
sudut total, sementara sudut sebenarnya adalah antara 27 hingga -27 derajat.
[MIC12]
2.4.4 Microphone Array
Microphone Array pada Kinect berguna untuk menangkap suara di sekitar sensor.
Komponen ini dapat menangkap suara dengan lebih baik karena dilengkapi
berbagai fitur. Seperti noise cancelation untuk mendapatkan suara yang lebih
jernih, dan menentukan hanya mendengar suara dari suatu area tertentu.
2.4.4.1 Noise Cancelation
Microphone pada Kinect sensor dapat menghilangkan noise suara dengan
intensitas hingga 20dB dan suara yang datang dari belakang sensor secara
otomatis dikurangi sebesar 6 dB. [MIC12]
11
Gambar 2. 4 Noise Cancelation
Gambar 2. 5 Jarak pendengaran manusia
Satuan dB (desibel) adalah satuan untuk mengukur seberapa besar intensitas
suara. Intensitas suara didapat dari jumlah watt/cm2 , namun secara umum satuan
tersebut diubah ke dalam bentuk yang lebih populer yaitu dB.
Manusia dapat mendengar suara dengan frekuensi sekitar 20 – 20 kHz dengan
tingkat decibel antara 0-140 dB. Akan tetapi pada jarak 0 -20 dB manusia hanya
12
dapat mendengar dengan baik apabila frekuensi sumber suara itu tinggi yaitu pada
jarak 3-10 kHz. [STE97]
Jadi dengan kemampuan pengurangan suara sebesar 20dB dapat membantu
menghilangkan suara berisik berfrekuensi rendah.
2.4.4.2 Jarak Pendengaran
Kinect memiliki batas area pendengaran. Berikut adalah ketentuan dan batasan
area yang dimiliki kinect untuk mendengar atau mendapatkan data suara.
Gambar 2. 6 Sudut Pendengaran
Pada gambar 2.6 dapah dilihat bahwa Kinect dapat mendeteksi suara dalam sudut
100 derajat dari depan sensor.
Gambar 2. 7 Menentukan Sudut Spesifik Pendengaran
13
Pada gambar 2.7 dijelaskan juga bahwa Kinect juga dapat menentukan area
spesifik untuk menerima input berupa suara, area spesifik tersebut berjarak 10
derajat dari sensor. [MIC12]
2.5 Sistem Koordinat
Data yang didapat dari Skeletal Tracking pada Kinect adalah koordinat-koordinat
sendi anggota tubuh. Sistem koordinat yang dipakai adalah sistem koordinat
Kartesius dalam bentuk 3 dimensi. Berikut adalah arah pergerakan nilai sumbu
tiap dimensi yang digunakan dalam sistem.
Gambar 2. 8 Sistem Koordinat 3 Dimensi
Bila dilihat dari depan, nilai sumbu X bertambah apabila menuju arah kanan dan
berkurang apabila menuju arah kiri. Nilai sumbu Y bertambah apabila menuju
arah atas dan berkurang apabila menuju ke bawah. Nilai sumbu Z berkurang
apabila menuju ke arah depan dan bertambah apabila menuju ke arah belakang.
14
2.6 Skeletal Tracking pada Kinect
Salah satu kemampuan Kinect yang paling penting sehingga dapat menjadi media
yang baik untuk menangkap gerakan tubuh menjadi sebuah input adalah
kemampuan mendeteksi kerangka manusia. Kemampuan tersebut diperoleh atas
hasil penelitian yang dilakukan oleh Microsoft sehingga dapat menangkap bagian-
bagian tubuh dan merepresentasikannya dalam bentuk kerangka. Untuk proses
detail bagaimana mendeteksi kerangka manusia dari gambar yang ditangkap, tidak
diungkapkan oleh Microsoft. Akan tetapi proses pembentukannya dapat dilihat
dari gambar berikut
Gambar 2. 9 Langkah-langkah pembentukan node
Untuk mendapatkan bentuk rangka seperti gambar di atas, digunakan sebuah
method pada Kinect SDK dalam bahasa C# untuk mengaktifkan fungsi Skeletal
Tracking.
15
Gambar 2. 10 Gambar Skeletal Tracking
Method tersebut adalah Kinect.SkeletalStream.Enable(). Fungsi Skeletal Tracking
ini menghasilkan titik-titik sendi dari objek yang ditangkap. Terdapat 20 titik
sendi yang ditangkap dari fungsi Skeletal Tracking itu sendiri. Berikut adalah 20
titik sendi yang dimaksud:
Gambar 2. 11
20 Titik Sendi (Joint) yang diperoleh dari hasil Skeletal Tracking
Dengan mengetahui koordinat masing-masing sendi, maka tiap pergerakan sendi
dapat dijadikan sebagai input untuk aplikasi yang dibuat.
16
Berikut adalah cara menggunakan Library tersebut pada source code:
using Microsoft.Kinect;
2.7 Microsoft Speech Platform
Microsoft Speech Platform adalah sebuah Library untuk pemrosesan suara.
Dengan Library ini sebuah suara yang dikeluarkan manusia dapat dikenali
menjadi sebuah teks. Library ini dapat memberikan informasi tingkat confidence
sebuah suara yang dikeluarkan dengan output yang dihasilkannya sehingga dapat
memberikan fleksibilitas dalam pengembangan aplikasi. Library ini juga
memiliki kemampuan untuk mengubah teks menjadi suara.
Berikut adalah cara menggunakan Library tersebut pada source code:
using Microsoft.Speech.AudioFormat; using Microsoft.Speech.Recognition;
Microsoft.Speech.AudioFormat berguna untuk menyediakan format-format audio
yang diinginkan untuk diproses, seperti .wav atau .pcm. Sedangkan
Microsoft.Speech.Recognition berguna untuk mengenali kata-kata tertentu yang
sudah ditentukan terlebih dahulu dalam penggunaannya.
17
BAB 3
Analisis dan Perancangan
Pada bab ini akan dijelaskan mengenai analisis dan perancangan dari aplikasi
permainan simulasi hewan peliharaan dengan Gesture tubuh manusia.
Perancangan aplikasi diangkat dari hasil analisis permasalahan dan teori serta
metode yang akan digunakan.
Mula-mula yang pertama dilakukan adalah mendata berapa macam gerakan yang
akan dibuat, apa fungsi dari masing-masing gerakan tersebut, dan bagaimana
mendefinisikan gerakan tersebut ke dalam bentuk yang dikenali oleh komputer.
Kemudian untuk sistem pengenalan suara yang dilakukan adalah mendata berapa
jumlah kata-kata yang ingin dapat dikenali, apa fungsi dari masing-masing kata
tersebut, dan respon seperti apakah yang akan dibuat berdasarkan kata-kata
tersebut.
Sistem yang dibuat akan merespon tiap gerakan dan suara yang dilakukan oleh
user dalam sebuah bentuk makhluk virtual ciptaan penulis bernama Boxi. Boxi
adalah sebuah makhluk berbentuk kubus berwarna biru yang memiliki wajah dan
dapat bergerak melompat, berguling dan menari. Setiap kali user melakukan
gerakan, user akan mendapatkan sejumlah point. Point tersebut dapat digunakan
oleh user untuk mengganti latar belakang program agar terlihat lebih menarik.
Namun tidak selamanya Boxi akan selalu mengikuti perintah user baik dalam
bentuk gerakan ataupun suara. Boxi tidak akan menuruti perintah user apabila ia
ada dalam keadaan lapar, sehingga user harus memberinya makan terlebih dahulu
agar Boxi mau menuruti perintah user kembali.
18
3.1 Penempatan Objek dengan Kinect
Untuk mencapai hasil yang optimal dalam menggunakan Kinect, ada beberapa
aturan yang perlu diperhatikan dalam menaruh Kinect dan posisi pemain.
Gambar 3. 1 Jarak yang direkomendasikan antara Kinect dengan Pemain.
Jarak yang direkomendasikan antara pemain dengan Kinect adalah dari 1 sampai 3
meter. Sedangkan jarak antara sensor dengan lantai mencapai ketinggian 0.6
hingga 1.8 meter. Hal ini diperlukan agar Kinect dapat melihat keseluruhan tubuh
pemain, sehingga dapat menentukan posisi sendi-sendi yang akurat.
3.2 Cara Kerja Permainan
Inti dari permainan yang dibuat adalah memberi perintah kepada objek yang
bernama “BOXI” pada program untuk melakukan sebuah gerakan gerakan
tertentu yang dilakukan oleh pemain. Misalnya, apabila pemain ingin membuat
hewan di dalam program untuk berguling, maka pemain dapat melakukan gerakan
seperti gambar berikut:
Kinect
Layar
19
Gambar 3. 2 Contoh Gerakan yang Digunakan dalam Permainan
Apabila gerakan yang dilakukan oleh user dikenali oleh sistem, maka pada
tampilan di layar “BOXI” akan melakukan jenis gerakan sesuai dengan jenis
gerakan yang telah dilakukan oleh user. Selain gerakan, user juga dapat
berinteraksi dengan suara. Dengan mengucapkan kata-kata yang telah terdaftar
dalam sistem, “BOXI” akan merespon dengan cara melakukan sebuah gerakan
atau dengan mengeluarkan suara.
Berikut adalah tabel daftar gerakan yang dapat dilakukan oleh pemain beserta
fungsinya :
Tabel 3. 1 Daftar Gerakan dan Fungsinya
Gerakan Fungsi
Jump Membuat Boxi melakukan gerakan
melompat
Roll Membuat Boxi melakukan gerakan
berguling.
Eat Memberi makan Boxi
Dance Membuat Boxi melakukan gerakan
menari.
20
Gerakan Fungsi
Close Menu Berfungsi untuk melanjutkan
permainan.
Open Menu Berfungsi untuk membuka menu pada
program.
Berikut adalah tabel daftar kata yang dapat diucapkan oleh pemain beserta
fungsinya :
Tabel 3. 2 Daftar Suara dan Fungsinya
Suara Fungsi
“Jump” Membuat Boxi melakukan gerakan
melompat
“Roll” Membuat Boxi melakukan gerakan
berguling.
“Dance” Membuat Boxi melakukan gerakan
menari.
“Hi” Membuat Boxi mengatakan “Hello”
“How are you” “I’m fine thank you”
“Shop” Membuka menu Shop
“Good Bye” Menutup Program
“Menu” Membuka Main Menu
“New Game” Memulai permainan baru
“Continue” Melanjutkan Permainan
21
Semakin sering pemain berinteraksi dengan “BOXI” maka pemain akan
mendapatkan sejumlah point, dimana point tersebut dapat digunakan dalam menu
shop untuk mengganti latar belakang program dan menambah hiasan agar lebih
menarik.
Berikut adalah tabel daftar gerakan dan point yang didapat
Tabel 3. 3 Daftar Gerakan dan Point yang Didapat
Gerakan Penambahan point
Jump 100 point
Roll 100 point
Eat 50 point
Dance 200 point
Point yang didapatkan berguna untuk membeli barang dalam permainan. Berikut
adalah daftar barang dan point yang diperlukan untuk membelinya.
Tabel 3. 4 Daftar Barang dan Point yang Diperlukan
Barang Point yang diperlukan
Default Background 0 point
ITHB Background 1000 point
Wood Background 2000 point
Flying Object 3000 point
22
3.3 Penangkapan dan Pendefinisian Gerakan
Untuk mendeteksi gerakan sebagai input, maka penulis menggunakan perangkat
Microsoft Kinect untuk mendapatkan koordinat tiap sendi tubuh
Gambar 3. 3 Flowchart Skeletal Tracking pada Kinect
Setelah koordinat tiap sendi tubuh didapatkan, barulah koordinat sendi-sendi
tersebut diolah oleh sistem sehingga dapat mendefinisikan sebuah gerakan.
Proses tersebut dapat dilihat pada flowchart pada Gambar 3.3.
Gerakan tubuh tertentu dapat didefinisikan dengan membagi-bagi gerakan
menjadi beberapa bagian. Contohnya dalam gerakan melambaikan tangan, dari
proses melambaikan tangan dapat diambil 2 bagian yang apabila kedua bagian
tersebut dilakukan secara berulang-ulang secara bergantian akan membentuk
sebuah gerakan, yaitu gerakan melambaikan tangan itu sendiri.
Gambar berikut adalah kedua bagian tersebut:
23
Gambar 3. 4 Bagian-bagian gerakan melambaikan tangan
Waktu yang diberikan untuk melakukan pergerakan dari satu bagian ke bagian
lainnya adalah sebesar 50 frame. Cara untuk mendefinisikan setiap bagian
gerakan tersebut adalah dengan membandingkan koordinat titik sendi yang
menjadi fokus pergerakan dengan titik sendi yang lainnya. Koordinat untuk tiap
sendi menggunakan sistem koordinat Kartesius (x, y, z). Maka cara pendefinisian
gerakan melambaikan tangan adalah sebagai berikut:
Bagian 1:
RIGHT_HAND.X > RIGHT_ELBOW.Y
dan RIGHT_HAND.Y > RIGHT_ELBOW.Y
Bagian 2:
RIGHT_HAND.X < RIGHT_ELBOW.Y
dan RIGHT_HAND.Y > RIGHT_ELBOW.Y
Berikut adalah flowchart bagaimana mengolah koordinat yang didapat dari
Skeletal Tracking dari Kinect menjadi sebuah gerakan yang dapat dikenali:
Bagian 1 Bagian 2
RIGHT_HAND
RIGHT_ELBOW
X
Y
Z
24
Gambar 3. 5 Flowchart Pengenalan Gestur
Data Joints Coordinate didapat dari hasil skeletal tracking pada Kinect diproses
untuk pengecekan apakah data tersebut merupakan sebuah bagian 1 dari sebuah
gerakan yang ada. Hal tersebut dapat dilakukan dalam asumsi bagian 1 dari setiap
gerakan yang dibuat tidak memiliki posisi yang sama. Apabila data tersebut
masuk ke dalam bagian 1 dari sebuah gerakan, maka dilakukan pengecekan
apakah gerakan tersebut memiliki bagian gerakan lanjutan. Apabila iya, maka
sistem akan mengecek kembali data Joints Coordinate yang baru, dan
mengeceknya kembali hingga gerakan yang sedang dalam tahap pengecekan tidak
memiliki bagian gerakan lanjutan lagi. Apabila pengecekan sampai ke tahap
bagian gerakan terakhir dari sebuah gerakan, maka sebuah gerakan dikenali oleh
sistem.
25
Ada berbagai jenis gerakan yang dapat dilakukan, yaitu Jump, Dance, Roll, Walk
dan Zoom. Berikut adalah gerakan yang harus dilakukan pemain untuk masing –
masing jenis gerakan. Di sini akan dijelaskan bagian-bagian gerakan yang
digunakan untuk mendefinisikan sebuah gerakan tersebut.
3.3.1 Jump
Untuk melakukan gerakan Jump, gerakan yang dilakukan pemain adalah
mengangkat kedua tangan ke atas.
Gambar 3. 6 Jump Bagian 1
Bagian 1:
RIGHT_HAND.X > RIGHT_SHOULDER.X
and RIGHT_HAND.Z < RIGHT_SHOULDER.Z
and RIGHT_HAND.Y < HIP_CENTER.Y
and LEFT_HAND.X < LEFT_SHOULDER.X
and LEFT_HAND.Z < LEFT_SHOULDER. Z
and LEFT_HAND.Y < HIP_CENTER.Y
RIGHT_HAND
RIGHT_SHOULDER
LEFT_SHOULDER
LEFT_HAND HIP_CENTER
26
Bagian ini digunakan untuk mendeteksi posisi awal jenis gerakan jump, bagian ini
mendefinisikan posisi kedua tangan berada di depan tubuh, di luar bahu dan di
bawah pinggul.
Bagian 2:
RIGHT_HAND.X > RIGHT_SHOULDER.X
and RIGHT_HAND.Z < RIGHT_SHOULDER.Z
and RIGHT_HAND.Y > HEAD.Y
and LEFT_HAND.X < LEFT_SHOULDER.X
and LEFT_HAND.Z < LEFT_SHOULDER.Z
and LEFT_HAND.Y > HEAD.Y
Bagian ini digunakan untuk mendeteksi posisi terakhir jenis gerakan jump, bagian
ini mendefinisikan posisi kedua tangan berada di depan tubuh, di luar bahu dan
berada di atas kepala.
Gambar 3. 7 Jump Bagian 2
RIGHT_HAND
RIGHT_SHOULDER
HEAD
LEFT_HAND
LEFT_SHOULDER
27
3.3.2 Roll
Untuk melakukan gerakan Roll, gerakan yang dilakukan pemain adalah membuat
gerakan lingkaran dengan menggunakan tangan kanan.
Bagian 1:
RIGHT_HAND.X > RIGHT_SHOULDER.X
and RIGHT_HAND.Z < RIGHT_SHOULDER.Z
and RIGHT_HAND.Y > RIGHT_SHOULDER.Y
and RIGHT_HAND.Y > HEAD.Y
Bagian ini mendefinisikan kondisi dimana tangan kanan berada di depan tubuh, di
luar dan tingginya berada di atas kepala.
Gambar 3. 8 Roll Bagian 1
Bagian 2:
RIGHT_HAND.X > RIGHT_SHOULDER.X
and RIGHT_HAND.Z < RIGHT_SHOULDER.Z
and RIGHT_HAND.Y < HIP_CENTER.Y
RIGHT_HAND
RIGHT_SHOULDER
HEAD
28
Gambar 3. 9 Roll Bagian 2
Bagian ini mendefinisikan kondisi dimana tangan kanan berada di depan tubuh, di
luar bahu dan tingginya berada di bawah pinggul.
Gambar 3. 10 Roll Bagian 3
RIGHT_HAND
RIGHT_SHOULDER
RIGHT_HAND
RIGHT_SHOULDER
HIP_CENTER
29
Bagian 3:
RIGHT_HAND.X < RIGHT_SHOULDER.X
and RIGHT_HAND.Z < RIGHT_SHOULDER.Z
and RIGHT_HAND.Y < RIGHT_SHOULDER.Y
Bagian ini mendefinisikan kondisi dimana tangan kanan berada di depan tubuh, di
dalam bahu dan di bawah pinggul.
Bagian 4:
RIGHT_HAND.X < RIGHT_SHOULDER.X
and RIGHT_HAND.Z < RIGHT_SHOULDER.Z
and RIGHT_HAND.Y > RIGHT_SHOULDER.Y
and RIGHT_HAND.Y > HEAD.Y
Bagian ini mendefinisikan kondisi dimana tangan kanan berada di depan tubuh, di
dalam bahu dan di atas kepala.
Gambar 3. 11 Roll Bagian 4
HEAD
RIGHT_HAND
RIGHT_SHOULDER
30
Gambar 3. 12 Gerakan Roll Bagian 5
Bagian 5:
RIGHT_HAND.X > RIGHT_SHOULDER.X
and RIGHT_HAND.Z < RIGHT_SHOULDER.Z
and RIGHT_HAND.Y > RIGHT_SHOULDER.Y
and RIGHT_HAND.Y > HEAD.Y
Bagian ini mendefinisikan kondisi dimana tangan kanan berada di depan tubuh, di
luar dan tingginya berada di atas kepala.
3.3.3 Dance
Untuk melakukan gerakan Dance, gerakan mengayunkan kedua tangan ke kanan
dan kiri sebanyak dua kali.
Bagian 1:
RIGHT_HAND.X > RIGHT_SHOULDER.X
and RIGHT_HAND.Z < RIGHT_SHOULDER.Z
and RIGHT_HAND.Y < RIGHT_SHOULDER.Y
and RIGHT_HAND.Y > HIP_CENTER.Y
and LEFT_HAND.X > LEFT_SHOULDER
HEAD
RIGHT_HAND
RIGHT_SHOULDER
31
and LEFT_HAND.X > HIP_CENTER.X
and LEFT_HAND.Y > HIP_CENTER
and LEFT_HAND.Y < LEFT_SHOULDER
and LEFT_HAND.Z < LEFT_SHOULDER.Z
Bagian ini mendefinisikan posisi tangan kanan yang berada di depan tubuh, di
bawah pinggul dan di luar bahu, serta tangan kiri yang berada di depan tubuh dan
di dalam bahu.
Gambar 3. 13 Gerakan Dance Bagian 1
RIGHT_SHOULDER
RIGHT_HAND
LEFT_SHOULDER
LEFT_HAND
HIP_CENTER
32
Gambar 3. 14 Gerakan Dance Bagian 2
Bagian 2:
RIGHT_HAND.X < RIGHT_SHOULDER.X
and RIGHT_HAND.Z < RIGHT_SHOULDER.Z
and RIGHT_HAND.Y < RIGHT_SHOULDER.Y
and RIGHT_HAND.Y > HIP_CENTER.Y
and LEFT_HAND.X < LEFT_SHOULDER.X
and RIGHT_HAND.X < HIP_CENTER.X
and LEFT_HAND.Y > HIP_CENTER
and LEFT_HAND.Y < LEFT_SHOULDER
and LEFT_HAND.Z < LEFT_SHOULDER.Z
Bagian ini mendefinisikan posisi tangan kiri yang berada di depan tubuh, di
bawah pinggul dan di luar bahu, serta tangan kanan yang berada di depan tubuh
dan di dalam bahu.
Untuk mencapai gerakan Dance, gerakan bagian 1 dan bagian 2 dilakukan
sebanyak 2 kali secara berturut turut.
RIGHT_SHOULDER
RIGHT_HAND
LEFT_SHOULDER
LEFT_HAND
HIP_CENTER
33
3.3.4 Eat
Untuk melakukan gerakan Eat, gerakan yang dilakukan pemain adalah dengan
cara mengayunkan tangan dari belakang ke depan sambil mengucapkan kata “Eat”
Gambar 3. 15 Gerakan Eat Bagian 1
Bagian 1:
RIGHT_HAND.Z > HIP_CENTER.Z
and RIGHT_HAND.Y < HIP_CENTER.Y
Bagian ini mendefinisikan kondisi dimana tangan kanan berada di belakang tubuh,
di luar dan tingginya berada di bawah pinggul.
Bagian 2:
RIGHT_HAND.Z < HIP_CENTER.Z
and RIGHT_HAND.Y < HIP_CENTER.Y
Bagian ini mendefinisikan kondisi dimana tangan kanan berada di depan tubuh, di
luar dan tingginya berada di atas pinggul.
HIP_CENTER
RIGHT_HAND
34
Gambar 3. 16 Gerakan Eat Bagian 2
3.3.5 Open Menu
Untuk melakukan gerakan Open Menu gerakan yang dilakukan pemain adalah
mendekatkan kedua tangan ke depan.
Gambar 3. 17 Gerakan Open Menu Bagian 1
HIP_CENTER
RIGHT_HAND
RIGHT_HAND LEFT_HAN
D
RIGHT_SHOULDER LEFT_SHOULDER
HIP_CENTER
35
Bagian 1:
RIGHT_HAND.X > RIGHT_SHOULDER.X
and RIGHT_HAND.Y < RIGHT_SHOULDER.Y
and RIGHT_HAND.Z < RIGHT_SHOULDER.Z
and RIGHT_HAND.Y > HIP_CENTER.Y
and LEFT_HAND.X < LEFT_SHOULDER.X
and LEFT_HAND.Y < LEFT_SHOULDER.Y
and LEFT_HAND.Z < LEFT _SHOULDER.Z
and LEFT _HAND.Y > HIP_CENTER.Y
Bagian ini mendefinisikan kondisi dimana tangan kanan dan kiri berada di depan
tubuh, di luar bahu dan tingginya berada di antara pinggul dan bahu.
Gambar 3. 18 Gerakan Open Menu Bagian 2
Bagian 2:
RIGHT_HAND.X < RIGHT_SHOULDER.X
and RIGHT_HAND.Y < RIGHT_SHOULDER.Y
and RIGHT_HAND.Z < RIGHT_SHOULDER.Z
and RIGHT_HAND.Y > HIP_CENTER.Y
and LEFT_HAND.X > LEFT_SHOULDER.X
and LEFT_HAND.Y < LEFT_SHOULDER.Y
RIGHT_HAND LEFT_HAND
RIGHT_SHOULDE
R LEFT_SHOULDER
HIP_CENTER
36
and LEFT_HAND.Z < LEFT _SHOULDER.Z
and LEFT _HAND.Y > HIP_CENTER.Y
Bagian ini mendefinisikan kondisi dimana tangan kanan dan kiri berada di depan
tubuh, di dalam bahu dan tingginya berada di antara pinggul dan bahu.
3.3.6 Close Menu
Untuk melakukan gerakan Open Menu gerakan yang dilakukan pemain adalah
menjauhkan kedua tangan dari depan ke samping.
Gambar 3. 19 Gerakan Close Menu Bagian 1
Bagian 1:
RIGHT_HAND.X < RIGHT_SHOULDER.X
and RIGHT_HAND.Y < RIGHT_SHOULDER.Y
and RIGHT_HAND.Z < RIGHT_SHOULDER.Z
and RIGHT_HAND.Y > HIP_CENTER.Y
and LEFT_HAND.X > LEFT_SHOULDER.X
and LEFT_HAND.Y < LEFT_SHOULDER.Y
and LEFT_HAND.Z < LEFT _SHOULDER.Z
and LEFT _HAND.Y > HIP_CENTER.Y
RIGHT_HAND LEFT_HAND
RIGHT_SHOULDER LEFT_SHOULDER
HIP_CENTER
37
Bagian ini mendefinisikan kondisi dimana tangan kanan dan kiri berada di depan
tubuh, di dalam bahu dan tingginya berada di antara pinggul dan bahu.
Bagian 1:
RIGHT_HAND.X > RIGHT_SHOULDER.X
and RIGHT_HAND.Y < RIGHT_SHOULDER.Y
and RIGHT_HAND.Z < RIGHT_SHOULDER.Z
and RIGHT_HAND.Y > HIP_CENTER.Y
and LEFT_HAND.X < LEFT_SHOULDER.X
and LEFT_HAND.Y < LEFT_SHOULDER.Y
and LEFT_HAND.Z < LEFT _SHOULDER.Z
and LEFT _HAND.Y > HIP_CENTER.Y
Gambar 3. 20 Gerakan Close Menu Bagian 2
Bagian ini mendefinisikan kondisi dimana tangan kanan dan kiri berada di depan
tubuh, di luar bahu dan tingginya berada di antara pinggul dan bahu.
3.4 Threshold pada Kinect Skeletal Tracking
Salah satu kelemahan pada Kinect adalah masih adanya perubahan-perubahan
nilai koordinat dari anggota tubuh walaupun dalam keadaan diam. Sementara
untuk mengenali sebuah gerakan, sistem hanya menggunakan pembanding lebih
RIGHT_HAND LEFT_HAND
RIGHT_SHOULDER LEFT_SHOULDER
HIP_CENTER
38
besar dan lebih kecil saja. Sehingga ada kemungkinan data Joints Coordinate
yang didapat masuk ke dalam sebuah bagian gerakan, padahal sebenarnya tidak.
Untuk itu perlu ditambahkan Threshold untuk tiap pengecekan bagian gerakan
pada tahap implementasi.
3.5 Proses Speech Recognition
Berikut adalah langkah-langkah bagaimana Kinect dapat menterjemahkan suara
menjadi teks.
1. Kinect menangkap suara yang terdengar.
2. Suara tersebut kemudian disimpan sementara dan kemudian diolah oleh
Library Microsoft Speech Recognition
3. Hasil data olahan merupakan teks yang dikenali berdasarkan suara yang
diolah berdasarkan kemiripannya dengan kata-kata yang telah didaftarkan
pada sistem
Gambar 3. 21 Flowchart Speech Recognition
39
3.6 Skenario Program
Apabila pemain sudah memiliki data berupa nama dan level yang disimpan dalam
format xml dalam program, maka pemain bukan tergolong bukan pemain baru.
Sedangkan apabila belum, maka pemain tergolong dalam pemain baru. Jika
pemain adalah pemain baru, maka akan terdapat pilihan, apakah ingin melalui
proses tutorial terlebih dahulu atau tidak. Jika ya, maka program akan masuk ke
dalam proses tutorial, apabila tidak pemain dapat langsung bermain.
Gambar 3. 22 Flowchart Skenario Permainan
Untuk proses tutorial berikut adalah tahap-tahap yang dilalui.
1. Diberikan penjelasan bagaimana cara memanggil hewan.
40
2. Tes memanggil hewan.
3. Jika sistem memberi respon, maka proses tutorial berlanjut ke langkah
selanjutnya.
4. Diberikan penjelasan mengenai bagaimana gerakan tubuh yang harus
dilakukan.
Gambar 3. 23 Tutorial Jenis Gerakan
5. Tes melakukan gerakan.
6. Jika hewan sistem merespon, maka proses tutorial berlanjut ke langkah
selanjutnya. Jika tidak, kembali ke langkah 4. Setelah itu dapat mulai bermain.
3.7 Format Penyimpanan
Penyimpanan diperlukan dalam sistem yang dibuat untuk menangani penggunaan
program yang dapat digunakan oleh banyak user dan untuk menyimpan jumlah
poin dan barang apa saja yang telah dibeli user tersebut. Program ini
menggunakan XML sebagai media penyimpanannya. Berikut adalah contoh
struktur XML yang dibuat.
<?xml version="1.0"?> <Players xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <playerList>
41
<Player> <Name>SHENNA</Name> <Point>11100</Point> <ItemList> <Item>ithb</Item> <Item>wood</Item> </ItemList> </Player> <Player> <Name>JKT</Name> <Point>3000</Point> <ItemList> <Item>ithb</Item> <Item>wood</Item> </ItemList> </Player> </playerList> </Players>
Terdapat 1 file XML pada sistem, file XML tersebut memuat seluruh user yang
menggunakan komputer yang sama. Dalam 1 node playerList dapat terdapat lebih
dari 1 node Player. Setiap node Player memiliki atribut Name,Point dan ItemList.
Name adalah nama player tersebut, Point adalah jumlah point yang dimiliki
player tersebut dan ItemList adalah daftar barang yang dimiliki oleh player
tersebut.
42
BAB IV
Implementasi dan Pengujian
Bab ini membahas lingkungan pengembangan perangkat lunak, meliputi
perangkat keras dan perangkat lunak yang digunakan begitu juga dengan hasil-
hasil pengujian penggunaan perangkat lunak.
4.1 Lingkungan Pengembangan
Dalam lingkungan pengembangan, dijelaskan tentang perangkat-perangkat yang
digunakan dalam pembuatan perangkat lunak simulasi interaksi antarmuka dengan
gestur. Berikut spesifikasi yang digunakan:
4.1.1 Perangkat Keras
Spesifikasi yang digunakan dalam pengembangan dan pengujian perangkat lunak
simulasi interaksi antarmuka dengan gestur adalah sebagai berikut:
1. Processor: Dual-core 2.66-GHz (minimal)
2. Memory: 2 GB Ram (minimal)
3. Disk space: 1 GB (minimal)
4. Graphic Card: Mendukung Shader Model 2.0 dan DirectX 9.0
4.1.2 Perangkat Lunak
Dalam pengembangan dan pengujian perangkat lunak simulasi interaksi
antarmuka dengan gestur perangkat lunak yang digunakan adalah sebagai berikut:
1. Windows 8
2. Microsoft Visual Studio 2010
3. Blender
43
4.2 Implementasi Perangkat Lunak
Pada bagian ini akan dijelaskan bagaimana cara sistem mengenali gerakan dan
suara begitu juga dengan screenshot dari program.
4.2.1 Mendeteksi gerakan
Untuk mendeteksi sebuah gerakan seperti yang telah tertera pada bab analisis dan
perancangan, hal pertama yang perlu dilakukan adalah mendapatkan data titik-
titik sendi dari pengguna perangkat lunak. Hal tersebut dapat dicapai dengan
menggunakan Library dari Microsoft Kinect.
KinectSensor kinect; public ClassMain(){ kinect = KinectSensor.KinectSensors[0]; if (kinect != null) { kinect.SkeletonStream.Enable(); kinect.AllFramesReady += new EventHandler<AllFramesReadyEventArgs>(kinect_AllFrameReady); kinect.Start(); } }
Sementara untuk mendapatkan data titik-titik sendi adalah dengan cara berikut:
void kinect_AllFrameReady(object sender, AllFramesReadyEventArgs imagesFrame) { using (SkeletonFrame skeletonFrame = imagesFrame.OpenSkeletonFrame()) { if (skeletonFrame != null) { if ((skeletonData == null) || (this.skeletonData.Length != skeletonFrame.SkeletonArrayLength)) { this.skeletonData = new Skeleton[skeletonFrame.SkeletonArrayLength];
44
} skeletonFrame.CopySkeletonDataTo(this.skeletonData); } if (skeletonData != null) { foreach (Skeleton skel in skeletonData) { //Bila terdeteksi if (skel.TrackingState == SkeletonTrackingState.Tracked) { skeleton = skel; } } } } }
Setelah didapatkan data kemudian dicek apakah memenuhi syarat-syarat jenis-
jenis gerakan seperti yang tertera pada bab analisis dan perancangan. Berikut
adalah cara mendeteksi pose dari data yang didapat dalam program :
1. Gerakan Jump
Sesuai dengan analisis pada sub-bab 3.3.1 berikut adalah implementasi Jump
bagian 1 dimana bagian ini mengecek apakah posisi tangan kiri dan kanan berada
di depan bahu, dan apakah posisi kedua tangan berada di bawah pinggul.
public class Jump1 : IRelativeGestureSegment { public GesturePartResult CheckGesture(Skeleton skeleton) { if (skeleton.Joints[JointType.HandRight].Position.Z < skeleton.Joints[JointType.ShoulderRight].Position.Z && skeleton.Joints[JointType.HandLeft].Position.Z < skeleton.Joints[JointType.ShoulderLeft].Position.Z + Constant.threshold) { if (skeleton.Joints[JointType.HandRight].Position.Y < skeleton.Joints[JointType.ShoulderRight].Position.Y + Constant.threshold && skeleton.Joints[JointType.HandRight].Position.Y < skeleton.Joints[JointType.HipCenter].Position.Y + Constant.threshold && skeleton.Joints[JointType.HandLeft].Position.Y < skeleton.Joints[JointType.ShoulderLeft].Position.Y + Constant.threshold && skeleton.Joints[JointType.HandLeft].Position.Y < skeleton.Joints[JointType.HipCenter].Position.Y + Constant.threshold ) { return GesturePartResult.Succeed; }
45
return GesturePartResult.Pausing; } return GesturePartResult.Fail; } }
Sesuai dengan analisis pada sub-bab 3.3.2 berikut adalah implementasi Jump
bagian 2 dimana bagian ini mengecek apakah posisi tangan kiri dan kanan berada
di depan bahu, dan apakah posisi kedua tangan berada di atas kepala.
public class Jump2 : IRelativeGestureSegment { public GesturePartResult CheckGesture(Skeleton skeleton) { if (skeleton.Joints[JointType.HandRight].Position.Z < skeleton.Joints[JointType.ShoulderRight].Position.Z + Constant.threshold && skeleton.Joints[JointType.HandLeft].Position.Z < skeleton.Joints[JointType.ShoulderLeft].Position.Z + Constant.threshold) { if (skeleton.Joints[JointType.HandRight].Position.Y > skeleton.Joints[JointType.Head].Position.Y + Constant.threshold && skeleton.Joints[JointType.HandLeft].Position.Y > skeleton.Joints[JointType.Head].Position.Y + Constant.threshold) { return GesturePartResult.Succeed; } return GesturePartResult.Pausing; } return GesturePartResult.Fail; } }
2. Gerakan Roll
Sesuai dengan analisis pada sub-bab 3.3.1 berikut adalah implementasi Roll
bagian 1 dimana bagian ini mendefinisikan kondisi dimana tangan kanan berada
di depan tubuh, di luar dan tingginya berada di atas kepala.
public class RollNorthEast : IRelativeGestureSegment { public GesturePartResult CheckGesture(Skeleton skeleton) { if (skeleton.Joints[JointType.HandRight].Position.Z < skeleton.Joints[JointType.ShoulderRight].Position.Z + Constant.threshold) { if (skeleton.Joints[JointType.HandRight].Position.Y > skeleton.Joints[JointType.ShoulderRight].Position.Y + Constant.threshold) {
46
if (skeleton.Joints[JointType.HandRight].Position.X > skeleton.Joints[JointType.ShoulderRight].Position.X + Constant.threshold) { return GesturePartResult.Succeed; } return GesturePartResult.Pausing; } return GesturePartResult.Pausing; } return GesturePartResult.Fail; } }
Sesuai dengan analisis pada sub-bab 3.3.2 berikut adalah implementasi Roll
bagian 2 dimana bagian ini mendefinisikan kondisi dimana tangan kanan berada
di depan tubuh, di luar bahu dan tingginya berada di bawah pinggul.
public class RollSouthEast : IRelativeGestureSegment { public GesturePartResult CheckGesture(Skeleton skeleton) { if (skeleton.Joints[JointType.HandRight].Position.Z < skeleton.Joints[JointType.ShoulderRight].Position.Z + Constant.threshold) { if (skeleton.Joints[JointType.HandRight].Position.Y < skeleton.Joints[JointType.ShoulderRight].Position.Y + Constant.threshold) { if (skeleton.Joints[JointType.HandRight].Position.X > skeleton.Joints[JointType.ShoulderRight].Position.X + Constant.threshold) { return GesturePartResult.Succeed; } return GesturePartResult.Pausing; } return GesturePartResult.Pausing; } return GesturePartResult.Fail; } }
47
Sesuai dengan analisis pada sub-bab 3.3.3 berikut adalah implementasi Roll
bagian 3 dimana bagian ini mendefinisikan kondisi dimana tangan kanan berada
di depan tubuh, di dalam bahu dan di bawah pinggul.
public class RollSouthWest : IRelativeGestureSegment { public GesturePartResult CheckGesture(Skeleton skeleton) { // Right front of Shoulders if (skeleton.Joints[JointType.HandRight].Position.Z < skeleton.Joints[JointType.ShoulderRight].Position.Z + Constant.threshold) { if (skeleton.Joints[JointType.HandRight].Position.Y < skeleton.Joints[JointType.ShoulderRight].Position.Y + Constant.threshold) { if (skeleton.Joints[JointType.HandRight].Position.X < skeleton.Joints[JointType.ShoulderRight].Position.X + Constant.threshold) { return GesturePartResult.Succeed; } return GesturePartResult.Pausing; } return GesturePartResult.Pausing; } return GesturePartResult.Fail; } }
Sesuai dengan analisis pada sub-bab 3.3.3 berikut adalah implementasi Roll
bagian 4 dimana bagian ini mendefinisikan kondisi dimana tangan kanan berada
di depan tubuh, di dalam bahu dan di atas kepala.
public class RollNorthWest : IRelativeGestureSegment { public GesturePartResult CheckGesture(Skeleton skeleton) { // Right front of Shoulders if (skeleton.Joints[JointType.HandRight].Position.Z < skeleton.Joints[JointType.ShoulderRight].Position.Z + Constant.threshold) { if (skeleton.Joints[JointType.HandRight].Position.Y > skeleton.Joints[JointType.ShoulderRight].Position.Y + Constant.threshold ) {
48
if (skeleton.Joints[JointType.HandRight].Position.X < skeleton.Joints[JointType.ShoulderRight].Position.X + Constant.threshold ) { return GesturePartResult.Succeed; } return GesturePartResult.Pausing; } return GesturePartResult.Pausing; } return GesturePartResult.Fail; } }
3. Gerakan Dance
Sesuai dengan analisis pada sub-bab 3.4.1 berikut adalah implementasi Dance
bagian 1 dimana bagian ini mendefinisikan posisi tangan kanan yang berada di
depan tubuh, di bawah pinggul dan di luar bahu, serta tangan kiri yang berada di
depan tubuh dan di dalam bahu.
public class Dance1 : IRelativeGestureSegment { public GesturePartResult CheckGesture(Skeleton skeleton) { if (skeleton.Joints[JointType.HandRight].Position.Z < skeleton.Joints[JointType.ShoulderRight].Position.Z && skeleton.Joints[JointType.HandLeft].Position.Z < skeleton.Joints[JointType.ShoulderLeft].Position.Z + Constant.threshold) { if (skeleton.Joints[JointType.HandRight].Position.Y < skeleton.Joints[JointType.ShoulderRight].Position.Y && skeleton.Joints[JointType.HandLeft].Position.Y < skeleton.Joints[JointType.ShoulderLeft].Position.Y + Constant.threshold) { if (skeleton.Joints[JointType.HandRight].Position.X > skeleton.Joints[JointType.ShoulderRight].Position.X && skeleton.Joints[JointType.HandLeft].Position.X > skeleton.Joints[JointType.ShoulderLeft].Position.X + Constant.threshold) { return GesturePartResult.Succeed; } return GesturePartResult.Pausing; } return GesturePartResult.Pausing;
49
} return GesturePartResult.Fail; } }
Sesuai dengan analisis pada sub-bab 3.4.2 berikut adalah implementasi Dance
bagian 2 dimana bagian ini mendefinisikan posisi tangan kiri yang berada di
depan tubuh, di bawah pinggul dan di luar bahu, serta tangan kanan yang berada
di depan tubuh dan di dalam bahu.
public class Dance2 : IRelativeGestureSegment { public GesturePartResult CheckGesture(Skeleton skeleton) { if (skeleton.Joints[JointType.HandRight].Position.Z < skeleton.Joints[JointType.ShoulderRight].Position.Z && skeleton.Joints[JointType.HandLeft].Position.Z < skeleton.Joints[JointType.ShoulderLeft].Position.Z + Constant.threshold) { if (skeleton.Joints[JointType.HandRight].Position.Y < skeleton.Joints[JointType.ShoulderRight].Position.Y && skeleton.Joints[JointType.HandLeft].Position.Y < skeleton.Joints[JointType.ShoulderLeft].Position.Y + Constant.threshold) { if (skeleton.Joints[JointType.HandRight].Position.X < skeleton.Joints[JointType.ShoulderRight].Position.X && skeleton.Joints[JointType.HandLeft].Position.X < skeleton.Joints[JointType.ShoulderLeft].Position.X + Constant.threshold) { return GesturePartResult.Succeed; } return GesturePartResult.Pausing; } return GesturePartResult.Pausing; } return GesturePartResult.Fail; } }
50
4. Gerakan Eat
Sesuai dengan analisis pada sub-bab 3.5.1 berikut adalah implementasi Eat bagian
1 dimana Bagian ini mendefinisikan kondisi dimana tangan kanan berada di
belakang tubuh, di luar dan tingginya berada di bawah pinggul.
public class Eat1 : IRelativeGestureSegment { public GesturePartResult CheckGesture(Skeleton skeleton) { if (skeleton.Joints[JointType.HandRight].Position.Y < skeleton.Joints[JointType.HipCenter].Position.Y + Constant.threshold) { if (skeleton.Joints[JointType.HandRight].Position.Z > skeleton.Joints[JointType.HipCenter].Position.Z + Constant.threshold) { return GesturePartResult.Succeed; } return GesturePartResult.Pausing; } return GesturePartResult.Fail; } }
Sesuai dengan analisis pada sub-bab 3.5.2 berikut adalah implementasi Eat bagian
2 dimana bagian ini mendefinisikan kondisi dimana tangan kanan berada di depan
tubuh, di luar dan tingginya berada di atas pinggul.
public class Eat2 : IRelativeGestureSegment { public GesturePartResult CheckGesture(Skeleton skeleton) { if (skeleton.Joints[JointType.HandRight].Position.Y < skeleton.Joints[JointType.HipCenter].Position.Y + Constant.threshold) { if (skeleton.Joints[JointType.HandRight].Position.Z < skeleton.Joints[JointType.HipCenter].Position.Z + Constant.threshold) { return GesturePartResult.Succeed; } return GesturePartResult.Pausing; } return GesturePartResult.Fail; } }
51
5. Gerakan Open Menu
Sesuai dengan analisis pada sub-bab 3.6.1 berikut adalah implementasi Open
menu bagian dimana bagian ini mendefinisikan kondisi dimana tangan kanan dan
kiri berada di depan tubuh, di luar bahu dan tingginya berada di antara pinggul
dan bahu.
public class ZoomSegment1 : IRelativeGestureSegment { public GesturePartResult CheckGesture(Skeleton skeleton) { if (skeleton.Joints[JointType.HandLeft].Position.Z < skeleton.Joints[JointType.ShoulderLeft].Position.Z + Constant.threshold && skeleton.Joints[JointType.HandRight].Position.Z < skeleton.Joints[JointType.ShoulderRight].Position.Z + Constant.threshold) { if (skeleton.Joints[JointType.HandRight].Position.Y < skeleton.Joints[JointType.ShoulderRight].Position.Y + Constant.threshold && skeleton.Joints[JointType.HandRight].Position.Y > skeleton.Joints[JointType.HipCenter].Position.Y + Constant.threshold && skeleton.Joints[JointType.HandLeft].Position.Y < skeleton.Joints[JointType.ShoulderLeft].Position.Y + Constant.threshold && skeleton.Joints[JointType.HandLeft].Position.Y > skeleton.Joints[JointType.HipCenter].Position.Y + Constant.threshold) { if (skeleton.Joints[JointType.HandRight].Position.X < skeleton.Joints[JointType.ShoulderRight].Position.X + Constant.threshold && skeleton.Joints[JointType.HandRight].Position.X > skeleton.Joints[JointType.ShoulderLeft].Position.X + Constant.threshold && skeleton.Joints[JointType.HandLeft].Position.X > skeleton.Joints[JointType.ShoulderLeft].Position.X + Constant.threshold && skeleton.Joints[JointType.HandLeft].Position.X < skeleton.Joints[JointType.ShoulderRight].Position.X + Constant.threshold) { return GesturePartResult.Succeed; } return GesturePartResult.Pausing; } return GesturePartResult.Fail; } return GesturePartResult.Fail; } }
Sesuai dengan analisis pada sub-bab 3.6.2 berikut adalah implementasi Open
menu bagian 2 dimana bagian ini mendefinisikan kondisi dimana tangan kanan
52
dan kiri berada di depan tubuh, di luar bahu dan tingginya berada di antara
pinggul dan bahu.
public class ZoomSegment2 : IRelativeGestureSegment { public GesturePartResult CheckGesture(Skeleton skeleton) { if (skeleton.Joints[JointType.HandLeft].Position.Z < skeleton.Joints[JointType.ShoulderLeft].Position.Z + Constant.threshold && skeleton.Joints[JointType.HandRight].Position.Z < skeleton.Joints[JointType.ShoulderRight].Position.Z + Constant.threshold) { if (skeleton.Joints[JointType.HandRight].Position.Y < skeleton.Joints[JointType.ShoulderRight].Position.Y + Constant.threshold && skeleton.Joints[JointType.HandRight].Position.Y > skeleton.Joints[JointType.HipCenter].Position.Y + Constant.threshold && skeleton.Joints[JointType.HandLeft].Position.Y < skeleton.Joints[JointType.ShoulderLeft].Position.Y + Constant.threshold && skeleton.Joints[JointType.HandLeft].Position.Y > skeleton.Joints[JointType.HipCenter].Position.Y + Constant.threshold) { if (skeleton.Joints[JointType.HandRight].Position.X > skeleton.Joints[JointType.ShoulderRight].Position.X + Constant.threshold && skeleton.Joints[JointType.HandLeft].Position.X < skeleton.Joints[JointType.ShoulderLeft].Position.X + Constant.threshold) { return GesturePartResult.Succeed; } return GesturePartResult.Pausing; } return GesturePartResult.Fail; } return GesturePartResult.Fail; } }
4.2.2 GesturePartResult Class
Dari kelas-kelas yang telah dibuat pada sub-bab 4.2.1, dapat dilihat terdapat 3
jenis hasil kembalian dari tiap kelas tersebut yaitu Succeed, Pausing dan Fail 3
variabel tersebut dibentuk dalam kelas GesturePartResult, berikut adalah pseucode
dari kelas GesturePartResult.
53
public enum GesturePartResult { Fail, Succeed, Pausing }
Dimana fungsi dari ketiga variabel tersebut adalah:
1. Fail : Koordinat sendi yang didapat terdeteksi tidak memenuhi aturan
sebuah bagian gerakan yang ada hingga menyebabkan gagal terdeteksinya
sebuah gerakan.
2. Pausing: Koordinat sendi yang didapat terdeteksi belum memenuhi semua
kriteria sebuah bagian gerakan yang ada namun sedang dalam posisi yang
benar sehingga hanya menyebabkan penambahan penghitungan frame
saja.
3. Succeed: Koordinat sendi yang didapat memenuhi semua kriteria sebuah
bagian gerakan, bila masih ada bagian selanjutnya maka akan dilakukan
pengecekan ke bagian gerakan selanjutnya, bila tidak maka gerakan
berhasil dikenali.
4.2.3 Membuat Respon Gerakan
Dari semua bagian gerakan yang telah dibuat, bagian – bagian tersebut dimasukan
ke dalam kelas yang dapat menampung bagian-bagian gerakan tersebut. Berikut
adalah contoh penggunaan tiap bagian gerakan yang dibuat sehingga dapat
mengenali sebuah gerakan.
Apabila sebuah gerakan terdeteksi maka, akan ada fungsi yang mengeluarkan
sebuah nilai. Kemudian nilai tersebut akan dicek kembali untuk mengubah model
animasi sesuai dengan nilai yang didapat. Berikut adalah contoh cara sistem
memberi respon setelah sebuah gerakan telah terdeteksi.
IRelativeGestureSegment[] jumpSegments = new IRelativeGestureSegment[2]; jumpSegments[0] = new Jump1(); jumpSegments[1] = new Jump2(); gestureController.AddGesture("Jump", jumpSegments);
54
private void OnGestureRecognized(object sender, GestureEventArgs e) { switch (e.GestureName) {
case "Dance": if (!hungry) { if (Gesture == "empty") { Gesture = "Dance"; danceBg.Play(); currentModel = danceModel; changed = true; _danceTimer.Start(); currentPlayer.Point += 200; Console.WriteLine("Dance"); } } else { showNotif("I'm hungry"); } break; case "Roll": if (!hungry) { if (Gesture == "empty") { Gesture = "Roll"; currentModel = rollModel; changed = true; _rollTimer.Start(); currentPlayer.Point += 100; } } else { showNotif("I'm hungry"); } break; }
4.2.4 Mendeteksi Suara
Untuk mengenali suara, penulis menggunakan Library dari Microsoft yaitu
Microsoft Speech Platform. Sementara untuk mengaktifkan mic dari Kinect dan
inisisalisasi variabel untuk pengenalan suara adalah sebagai berikut:
private void StartAudio() { //set sensor audio source to variable var audioSource = kinect.AudioSource; //Set the beam angle mode - the direction the audio beam is pointing
55
//we want it to be set to adaptive audioSource.BeamAngleMode = BeamAngleMode.Adaptive; //start the audiosource var kinectStream = audioSource.Start(); //configure incoming audio stream speechRecognizer.SetInputToAudioStream( kinectStream, new SpeechAudioFormatInfo(EncodingFormat.Pcm, 16000, 16, 1, 32000, 2, null)); //make sure the recognizer does not stop after completing speechRecognizer.RecognizeAsync(RecognizeMode.Multiple); //reduce background and ambient noise for better accuracy kinect.AudioSource.EchoCancellationMode = EchoCancellationMode.None; kinect.AudioSource.AutomaticGainControlEnabled = false; }
Selanjutnya adalah tahap memasukan kata-kata yang ingin dapat dikenali oleh
sistem, seperti cara berikut:
var grammar = new Choices(); grammar.Add("hi"); grammar.Add("goodbye"); grammar.Add("how are you"); grammar.Add("jump"); grammar.Add("roll"); var gb = new GrammarBuilder { Culture = ri.Culture }; gb.Append(grammar); var g = new Grammar(gb); sre.LoadGrammar(g);
Kinect sudah siap mendengar dan akan terus mendeteksi suara yang datang dan
membandingkan kemiripannya sesuai dengan kata-kata yang telah didaftarkan.
if (e.Result.Confidence < .9) { RejectSpeech(e.Result); } switch (e.Result.Text.ToUpperInvariant()) { case "HELLO": Console.WriteLine("Hello."); helloSound.Play(); break; case "GOODBYE": Console.WriteLine("Bye"); this.Exit(); break; case "EAT":
56
if(Gesture == "Eat"){ Gesture = "Eating"; currentModel = eatModel; _eatVoiceTimer.Start(); currentPlayer.Point += 50; showNotif("Yummi"); eating = true; changed = true; hungryRate = 1000; } break; default: break; } }
Pada pseudocode di atas terlihat terdapat nilai confidence. Nilai confidence dapat
ditingkatkan untuk meningkatkan akurasi pembandingan suara dengan kata yang
telah didaftarkan.
4.2.5 Perangkat Lunak
Pada bagian ini akan dijelaskan mengenai tampilan dan jalannya perangkat lunak
simulasi antarmuka dengan gestur. Perangkat lunak yang dibuat adalah sebuah
video game mengenai hewan peliharaan dalam bentuk sebuah kotak yang
memiliki wajah bernama Boxi. User dapat berinteraksi dengan cara menggerakan
tubuh sesuai dengan jenis gerakan yang ada. Setiap berhasil berinteraksi, user
akan mendapatkan point yang dapat digunakan untuk memperindah tampilan
permainan dengan membeli background dan objek tambahan lainnya.
57
Gambar 4. 1 Halaman Utama Perangkat Lunak
Terdapat 5 tombol pada halaman utama berikut adalah fungsi dari tiap-tiap tombol
tersebut:
1.New Game: Memulai permainan baru.
2.Continue: Melanjutkan permainan.
3.Quit Game: Keluar dari aplikasi.
4.Move List: Melihat daftar gerakan.
5.Shop: Membeli barang untuk memperindah tampilan
Apabila user memilih New Game, maka user akan diminta untuk menginput nama
dan akan diberikan pertanyaan apakah ingin melalui proses tutorial atau tidak.
58
Gambar 4. 2 Pertanyaan Tutorial
Apabila user memilih tidak maka user akan dapat langsung bermain, apabila iya
maka user akan melalui proses tutorial.
Gambar 4. 3 Mencoba Suara
Proses tutorial pertama adalah mencoba mengatakan kata “BOXI” apabila sistem
sukses mengenali suara tersebut maka akan berpindah ke dialog selanjutnya.
59
Gambar 4. 4 Mencoba Gerakan
Kemudian user akan diminta untuk melakukan gerakan sesuai yang tertera pada
tampilan aplikasi. Bila sukses maka akan pindah ke dialog selanjutnya.
Gambar 4. 5 Mencoba Gerakan
Setelah sukses melakukan gerakan, maka user dapat mulai bermain.
60
Gambar 4. 6 Mode Bermain
Dalam mode bermain user dapat dengan bebas melakukan gerakan atau
mengeluarkan suara untuk berinteraksi dengan objek pada perangkat lunak.
4.3 Objek pada Permainan
Objek 3 dimensi pada program yang dibuat dengan menggunakan program editor
objek 3 dimensi bernama Blender. Objek beserta animasi yang dibuat kemudian
dieksport dalam format .fbx (filmbox). Format .fbx dapat secara langsung
dikenali oleh framework XNA yang terintegrasi dalam Microsoft Visual Studio
2010.
Gambar 4. 7 Posisi Awal
Berikut adalah macam-macam gerakan yang dapat dilakukan oleh Boxi.
61
1. Jump
Gambar 4. 8 Gerakan Jump
Apabila sistem telah mendeteksi gerakan Jump maka Boxi akan melompat. Selain
melalui gerakan, user juga dapat menggunakan suaranya dengan berkata “jump”
dan boxi akan melakukan aksi yang sama.
2. Eat
Apabila sistem telah mendeteksi gerakan Eat maka Boxi akan melompat. Khusus
untuk gerakan ini, user juga harus mengucapkan kata “eat” sambil melakukan
gerakan. Eat digunakan untuk menghilangkan status lapar dari Boxi. Karena
apabila Boxi dalam keadaan lapar, Boxi tidak akan melakukan gerakan setelah
mengenali gerakan dari User. Status lapar akan muncul setelah selang beberapa
waktu.
62
Gambar 4. 9 Gerakan Eat
3. Roll
Apabila sistem telah mendeteksi gerakan Jump maka Boxi akan berguling. Selain
melalui gerakan, user juga dapat menggunakan suaranya dengan berkata “roll”
dan boxi akan melakukan aksi yang sama.
Gambar 4. 10 Gerakan Roll
63
4. Dance
Gambar 4. 11 Gerakan Dance
Apabila sistem telah mendeteksi gerakan Dance maka Boxi akan meloncat ke kiri
dan kanan. Selain melalui gerakan, user juga dapat menggunakan suaranya
dengan berkata “dance” dan boxi akan melakukan aksi yang sama.
5. Open Menu & Close Menu
Gambar 4. 12 Gerakan Open Menu
64
Apabila sistem telah mendeteksi gerakan Open Menu akan muncul tampilan
Menu dan akan menutup menu bila mendeteksi gerakan Close Menu. Selain
melalui gerakan, user juga dapat menggunakan suaranya dengan berkata “Menu”.
4.4 Memilih Menu
Dibutuhkan komponen khusus dalam membuat button dalam aplikasi yang
menggunakan Gesture Interface karena tidak adanya sistem klik seperti pada
penggunaan perangkat mouse. Cara mengatasinya adalah dengan membuat
komponen yang dapat dipilih dengan cara meletakkan cursor di atas komponen
tersebut dalam selang beberapa waktu untuk memilih komponen tersebut. Berikut
adalah kelas yang dibuat oleh penulis untuk membuat komponen tersebut.
class MenuItem : GameScreen { Texture2D image; //gambar normal button Texture2D imageHover; //gambar button ketika cursor berada di area button Texture2D curImage; //gambar yang ditampilkan Rectangle imageRectangle; //ukuran button int widthExpand= 200; //lebar awal button int heightExpand= 100; //tinggi awal button int xPos; //posisi x button pada program int yPos; //posisi y button pada program int widthMax= 210; //lebar maksimum dari button ketika hover int heightMax= 105; //tinggi maksimum dari button ketika hover int widthMin = 200; //lebar minimal button int heightMin = 100; //tinggi minimal button bool highLighted = false; //apakah cursor berada di area button int menuIndex; //nilai, untuk menentukan menu yang dipilih public MenuItem(Game game, SpriteBatch spriteBatch, SpriteFont spriteFont, Texture2D image, Texture2D imageHover, int xPos, int yPos,int menuIndex) : base(game, spriteBatch) { this.image = image; this.imageHover = imageHover; this.xPos = xPos; this.yPos = yPos; this.menuIndex = menuIndex; imageRectangle = new Rectangle(xPos, yPos, 200, 100); }//inisisalisasi public override void Update(GameTime gameTime) {
65
Vector2 mousePos = new Vector2(SkinningSampleGame.handX, SkinningSampleGame.handY); //koordinat tangan if (mousePos.X >= xPos && mousePos.Y >= yPos && mousePos.X <= xPos +e 200 && mousePos.Y <= yPos + 100) //bila tangan berada di area button { highLighted = true; //status tangan berada di area button curImage = imageHover; //tampilkan gambar button hover if(widthExpand <= widthMax && heightExpand <= heightMax){ widthExpand++; //menambah lebar button heightExpand++; //memperkecil lebar button imageRectangle.Width = widthExpand; //mengubah lebar button imageRectangle.Height = heightExpand; //mengubah tinggi button } if (SkinningSampleGame.hoverTime <140) { SkinningSampleGame.hoverTime++; //menambah waktu hover dari cursor if (SkinningSampleGame.hoverTime == 140) { //bila waktu hover mencapai 140 SkinningSampleGame.selectedMenu = menuIndex; //isi nilai selectedMenu } } } Else //bila cursor tidak berada di area button { curImage = image; //tampilkan gambar button awal if (widthExpand >= widthMin && heightExpand >= heightMin) { widthExpand--; //mengurangi lebar button heightExpand--; //mengurangi tinggi button imageRectangle.Width = widthExpand; //mengubah lebar button imageRectangle.Height = heightExpand; //mengubah tinggi button } if (highLighted) {//bila cursor pernah masuk ke area button namun kemudian keluar SkinningSampleGame.hoverTime = 0; //mereset nilai hover time highLighted = false; } } base.Update(gameTime); } public override void Draw(GameTime gameTime) { spriteBatch.Begin(); spriteBatch.Draw(curImage, imageRectangle, Color.White); spriteBatch.End(); base.Draw(gameTime); }}
66
Gambar 4. 13 Button Normal Image
Gambar 4. 14 Button Hover Image
Kemudian yang perlu dibuat selanjutnya adalah memodifikasi cursor sehingga
dapat memberikan feedback kepada user untuk mengetahui berapa lama dia harus
menahan posisi tangannya, salah satu caranya adalah dengan memberikan
progress bar pada cursor.
Gambar 4. 15 Cursor dengan Progress Bar
Berikut dalah kelas cursor yang dibuat oleh penulis:
class Cursor : GameScreen { Texture2D image; //gambar cursor Texture2D blackBarImage;//bar hitam Texture2D whiteBarImage;//bar putih Rectangle imageRectangle;//ukuran cursor Rectangle blackBarRect;//ukuran bar hitam Rectangle whiteBarRect;//ukuran bar putih int xPos;//posisi x cursor int yPos;//posisi y cursor
67
public Cursor(Game game, SpriteBatch spriteBatch, Texture2D image, Texture2D blackBarImage, Texture2D whiteBarImage) : base(game, spriteBatch) { this.image = image; this.blackBarImage = blackBarImage; this.whiteBarImage = whiteBarImage; blackBarRect = new Rectangle(0, 0, 70, 10); whiteBarRect = new Rectangle(0, 0, 70, 10); imageRectangle = new Rectangle(0, 0, 50, 50); } public override void Update(GameTime gameTime) { int handX = SkinningSampleGame.handX;//posisi x tangan int handY = SkinningSampleGame.handY;//posisi y tangan imageRectangle.X = handX;//posisi x cursor imageRectangle.Y = handY;//posisi y cursor blackBarRect.X = handX - 10;//posisi x bar hitam blackBarRect.Y = handY + 60;//posisi y bar hitam whiteBarRect.X = handX - 10;//posisi x bar putih whiteBarRect.Y = handY + 60;//posisi y bar putih whiteBarRect.Width = SkinningSampleGame.hoverTime/2;//lebar bar putih yang //menyesuaikan hover time blackBarRect.Width = 70;//lebar bar hitam if (SkinningSampleGame.hoverTime == 0) { blackBarRect.Width = 0;//menghilangkan bar hitam } base.Update(gameTime); } public override void Draw(GameTime gameTime) { spriteBatch.Begin(); spriteBatch.Draw(image, imageRectangle, Color.White); spriteBatch.Draw(blackBarImage, blackBarRect, Color.Black); spriteBatch.Draw(whiteBarImage, whiteBarRect, Color.White); spriteBatch.End(); base.Draw(gameTime); } }
4.5 Penanganan Animasi
Agar animasi gerakan yang dilakukan Boxi tidak dapat berganti di tengah-tengah
gerakan maka penulis menggunakan Timer untuk menangani masalah tersebut.
Berikut adalah pengimplementasian Timer untuk mengatasi penggantian animasi.
68
_baloonTimer = new Timer(3000); _jumpTimer = new Timer(2458); _rollTimer = new Timer(4000); _danceTimer = new Timer(3500); _eatTimer = new Timer(2000); _eatVoiceTimer = new Timer(3000); Gesture = "empty";
Timer yang telah diinisialisasi kemudian akan digunakan setiap terdeteksinya
sebuah gerakan atau suara, berikut adalah contoh penggunaanya:
case "Roll": if (!hungry) { //animasi tidak akan berubah apabila string Gesture belum bernilai “empty” if (Gesture == "empty") { Gesture = "Roll"; //ubah string Gesture menjadi “Roll” currentModel = rollModel; //jalankan animasi roll changed = true; _rollTimer.Start(); //jalankan timer currentPlayer.Point += 100; Console.WriteLine("Roll"); } } else { showNotif("I'm hungry"); hungrySound.Play();}
Terdapat sebuah String Gesture, yang dimana String tersebut akan berubah apabila
sebuah gerakan terdeteksi, atau apabila Timer sudah habis. Berikut adalah contoh
apabila sebuah Timer telah habis waktunya.
void roll_Elapsed(object sender, ElapsedEventArgs e) { Gesture = "empty"; //ubah string Gesture menjadi empty currentModel = defaultModel; //ubah animasi ke awal changed = true; Console.WriteLine("roll elapsed"); _rollTimer.Stop();//hentikan timer }
69
4.6 Zooming
Untuk meningkatkan interaktifitas antara user dengan Boxi, penulis membuat fitur
Zooming. Fitur ini berfungsi untuk memperbesar objek apabila user mendekati
Kinect, dan memperkecil objek apabila user mendekati Kinect. Objek juga dapat
miring ke kiri dan ke kanan sesuai posisi user berada. Berikut adalah variabel
yang digunakan dan cara memodifikasinya.
Joint shoulderCenter = skel.Joints[JointType.ShoulderCenter]; cameraPosition.Z = shoulderCenter.Position.Z + 4.0f; if (firstTime) { shoulderPos = new Vector3(shoulderCenter.Position.X, shoulderCenter.Position.Y, shoulderCenter.Position.Z); firstTime = false; } else{
if (shoulderCenter.Position.X > shoulderPos.X) { cameraRotation += 0.3f; shoulderPos.X = shoulderCenter.Position.X; shoulderPos.Y = shoulderCenter.Position.Y; shoulderPos.Z = shoulderCenter.Position.Z; } else if (shoulderCenter.Position.X < shoulderPos.X) { cameraRotation -= 0.3f; shoulderPos.X = shoulderCenter.Position.X; shoulderPos.Y = shoulderCenter.Position.Y; shoulderPos.Z = shoulderCenter.Position.Z; }}}
shoulderPos adalah posisi sebelumnya, sedangkan shoulderCenter.Position adalah
posisi yang ditangkap sekarang. Rotasi kamera bergantung dari lebih besar atau
lebih kecilnya posisi shoulderCenter.Position dengan shoulderPos.
4.7 Pengujian Gerakan
Pada bagian ini akan dipaparkan data hasil pengujian aplikasi. Untuk perangkat
lunak ini, yang dijadikan pembanding hasil pengujian adalah banyaknya frame
yang diijinkan untuk berpindah dari 1 bagian gerakan ke bagian gerakan lainnya.
Jumlah frame yang digunakan adalah 20,30 dan 50.
70
Pengujian dilakukan dengan cara melakukan sebuah gerakan sebanyak 10 kali
untuk masing-masing gerakan, kemudian dari 10 kali percobaan tersebut dilihat
berapakah jumlah gerakan yang berhasil atau benar dideteksi.
Sebagai contoh seseorang mencoba gerakan Jump sebanyak 10 kali dan berhasil
sebanyak 9 kali. Maka data percobaan tersebut ditulis dalam bentuk angka 9/10.
Tingkat kecepatan gerak orang yang menguji untuk tiap tingkat frame yang
dilakukan tidak dibedakan, sehingga dapat dilihat apakah tingkat frame
berpengaruh dalam sistem.
Nilai akurasi dari tiap gerakan dihitung dari jumlah gerakan yang sukses dideteksi
dari 10 kali percobaan, berikut adalah contoh cara penghitungan nilai akurasi:
Tabel 4. 1 Tabel Contoh Pengujian
Orang 1 Orang 2 Orang 3 Orang 4 Orang 5 Akurasi
Jump 10/10 10/10 10/10 10/10 10/10 100 %
Dance 3/10 2/10 4/10 3/10 6/10 36 %
Walk 4/10 3/10 3/10 3/10 3/10 32 %
Zoom 10/10 10/10 10/10 9/10 10/10 98 %
Roll 6/10 5/10 5/10 4/10 4/10 48 %
Akurasi rata -rata 62.8 %
Cara menghitung akurasi per gerakan adalah dengan cara berikut :
1. Jump = (10+10+10+10+10) / 50 x 100 % = 100%
2. Dance = (3+2+4+3+6) / 50 x 100 % = 36%
3. Walk = (4+3+3+3+3) / 50 x 100 % = 32%
71
4. Zoom = (10+10+10+9+10) / 50 x 100 % = 98 %
5. Roll = (6+5+5+4+4) / 50 x 100 % = 48 %
Kemudian cara penghitungan akurasi rata-rata adalah sebagai berikut:
Akurasi rata-rata = (100 %+36 %+32 %+98 %+48 %) / 5 = 62.8%
Adanya gerakan yang tidak terdeteksi kemungkinan disebabkan oleh gerakan user
yang terlalu lambat, atau gerakan yang dilakukan tidak memenuhi kriteria gerakan
yang telah ditentukan.
4.4.1 Pengujian 20 frame
Berikut adalah tabel pengujian gerakan pada tingkat 20 frame. Angka dalam tabel
merupakan jumlah gerakan yang sukses dikenali oleh perangkat lunak. Percobaan
dilakukan terhadap 5 orang.
Tabel 4. 2 Pengujian 20 Frame
Orang 1 Orang 2 Orang 3 Orang 4 Orang 5 Akurasi
Jump 10/10 10/10 10/10 10/10 10/10 100 %
Dance 1/10 2/10 2/10 3/10 4/10 24 %
Eat 10/10 10/10 10/10 10/10 10/10 100 %
Zoom 9/10 10/10 9/10 9/10 10/10 94 %
Roll 7/10 5/10 5/10 3/10 4/10 48 %
Akurasi rata -rata 73.2 %
72
4.4.2 Pengujian 30 frame
Berikut adalah tabel pengujian gerakan pada tingkat 30 frame. Angka dalam tabel
merupakan jumlah gerakan yang sukses dikenali oleh perangkat lunak. Percobaan
dilakukan terhadap 5 orang.
Tabel 4. 3 Pengujian 30 Frame
Orang 1 Orang 2 Orang 3 Orang 4 Orang 5 Akurasi
Jump 10/10 10/10 10/10 10/10 10/10 100 %
Dance 3/10 2/10 4/10 3/10 6/10 36 %
Eat 10/10 10/10 10/10 10/10 10/10 100 %
Zoom 10/10 10/10 10/10 9/10 10/10 98 %
Roll 6/10 5/10 5/10 4/10 4/10 48 %
Akurasi rata -rata 76.4 %
4.4.3 Pengujian 50 frame
Berikut adalah tabel pengujian gerakan pada tingkat 50 frame. Angka dalam tabel
merupakan jumlah gerakan yang sukses dikenali oleh perangkat lunak. Percobaan
dilakukan terhadap 5 orang.
Tabel 4. 4 Pengujian 50 Frame
Orang 1 Orang 2 Orang 3 Orang 4 Orang 5 Akurasi
Jump 10/10 10/10 10/10 10/10 10/10 100 %
Dance 8/10 5/10 6/10 7/10 8/10 68 %
Eat 10/10 10/10 10/10 10/10 10/10 100 %
73
Zoom 10/10 10/10 10/10 10/10 10/10 100 %
Roll 9/10 8/10 8/10 8/10 8/10 82 %
Akurasi rata -rata 90 %
4.8 Pengujian Deteksi Suara
Pada bagian ini akan dipaparkan data hasil pengujian pengenalan suara pada
sistem. Pengujian dilakukan oleh penulis pada sebuah ruangan tertutup berukuran
4 x 2 meter dan berada pada lingkungan yang tidak bising:
Tabel 4. 5 Tabel Pengujian Suara
Orang 1 Orang 2 Orang 3 Orang 4 Orang 5 Akurasi
Jump 10
10 9 9 9 94%
Dance 8 10 10 9 8 90%
Walk 9 10 10 10 10 98%
Hi 10 10 10 9 10 98%
How are
you 10 10 9 10 10 98%
Good
bye 10 10 10 10 10 100%
Menu 10 10 10 10 10 100%
New
Game 10 10 10 10 10 100%
Shop 10 10 9 10 9 96%
Akurasi rata –rata = 97%
74
Kegagalan dalam deteksi suara dapat disebabkan oleh adanya suara orang lain
pada saat pengujian, atau suara yang dikeluarkan kurang jelas pengucapannya.
4.9 Pengujian Penggunaan Threshold
Threshold digunakan untuk memberikan batas minimal jarak suatu titik terhadap
titik lainnya. Berikut adalah hasil pengujian pengenalan gerakan dengan
penggunaan threshold. Jumlah toleransi frame yang digunakan adalah 50 frame.
4.9.1 Pengujian Threshold 0.1f (± 1cm)
Berikut adalah tabel pengujian gerakan dengan menggunakan threshold 0.1f.
Angka dalam tabel merupakan jumlah gerakan yang sukses dikenali oleh
perangkat lunak. Pengujian dilakukan terhadap 3 orang.
Tabel 4. 6 Pengujian Threshold 0.1f (± 1cm)
Orang 1 Orang 2 Orang 3 Akurasi
Jump 10/10 10/10 10/10 100%
Dance 7/10 5/10 4/10 53.33%
Eat 10/10 10/10 10/10 100%
Zoom 10/10 10/10 10/10 100%
Roll 9/10 10/10 8/10 90%
Akurasi rata-rata 88.67 %
4.9.2 Pengujian Threshold 0.3f (± 3cm)
Berikut adalah tabel pengujian gerakan dengan menggunakan threshold 0.3 f.
Angka dalam tabel merupakan jumlah gerakan yang sukses dikenali oleh
perangkat lunak. Pengujian dilakukan terhadap 3 orang.
75
Tabel 4. 7 Pengujian Threshold 0.3f (± 3cm)
Orang 1 Orang 2 Orang 3 Akurasi
Jump 7/10 10/10 10/10 90%
Dance 6/10 2/10 3/10 36.67%
Eat 10/10 8/10 9/10 90%
Zoom 8/10 7/10 9/10 80%
Roll 6/10 7/10 6/10 63.33%
Akurasi rata-rata 72 %
4.9.3 Pengujian Threshold 0.5f (± 5 cm)
Berikut adalah tabel pengujian gerakan dengan menggunakan threshold 0.5 f.
Angka dalam tabel merupakan jumlah gerakan yang sukses dikenali oleh
perangkat lunak. Pengujian dilakukan terhadap 3 orang.
Tabel 4. 8 Pengujian Threshold 0.5f (± 5cm)
Orang 1 Orang 2 Orang 3 Akurasi
Jump 2/10 3/10 4/10 30%
Dance 0/10 0/10 0/10 0%
Eat 7/10 4/10 5/10 53%
Zoom 0/10 0/10 0/10 0%
Roll 2/10 1/10 1/10 13%
Akurasi rata-rata 19.2 %
hasil akurasi pengenalan yang didapat, tingkat akurasi pada threshold 0.5f lebih
kecil dibanding dengan threshold 0.3f, dan pada threshold 0.3f hasilnya lebih
kecil dibanding threshold 0.1f.
76
BAB V
KESIMPULAN DAN SARAN
5.1 Kesimpulan
Kesimpulan yang dapat diambil antara lain:
1. Parameter yang dibutuhkan dalam mengenali pergerakan manusia adalah
nilai-nilai koordinat perubahan letak anggota tubuhnya.
2. Mendefinisikan sebuah gerakan kedalam beberapa bagian dan dengan
menggunakan pendeteksian posisi tubuh melalui koordinat letak anggota
tubuh dapat membentuk sistem pengenalan gerakan tubuh.
3. Dengan meningkatkan jumlah frame untuk berpindah dari satu bagian
gerakan ke bagian lainnya dapat meningkatkan akurasi pengenalan.
Namun apabila terlalu besar dapat menyebabkan pengenalan gerakan yang
tidak diinginkan.
4. Sistem pengenalan suara dengan menggunakan library Microsoft Speech
Recognition memiliki akurasi pengenalan yang tinggi.
5. Penggunaan threshold dapat mengurangi adanya pengenalan gerakan yang
tidak diinginkan, namun apabila nilainya terlalu besar dapat mengurangi
tingkat akurasi pengenalan gerakan.
6. Seberapa jauh letak anggota tubuh dengan anggota tubuh lainnya untuk
mendefinisikan sebuah gerakan dapat diatur dengan menggunakan
penambahan nilai pada pembuatan definisi bagian gerakan.
5.2 Saran
Berikut adalah beberapa saran apabila topik pengenalan gerakan tubuh manusia
ini ingin diteliti lebih lanjut.
1. Menggunakan metode lain seperti metode pengenalan pola agar jenis
gerakan yang dibuat dapat lebih beragam dan presisi.
77
2. Menggunakan model objek yang dapat mengikuti sesuai dengan gerakan
tubuh pemain untuk meningkatkan interaktifitas User dengan Objek.
3. Dengan penggunaan metode yang lebih presisi,membuka kemungkinan
untuk pengembangan permainan yang lebih menarik, seperti permainan
dengan genre Sports, Dance atau Fighting.
78
DAFTAR PUSTAKA
[ALA04] Alan Dix, Janet Finlay, Gregory D. Abowd, Russel Beale (2004).
Human – Computer Interaction. Haddington : Scotprint
[FEH08] FEHN, CHRISTOPH, A 3D-TV Approach using Depth-Image-Based
Rendering (DIBR), [pdf],
http://140.133.9.112:8080/cgit/PaperDL/WSY_100624091712.PDF
(diakses tanggal 26 Februari 2013)
[KUM10] Kumar, Tarun (2010) . A Theory Based on Conversion of RGB Image
to Gray Gambar. Volume 7.- no 2.
http://www.ijcaonline.org/volume7/number2/pxc3871493.pdf (diakses
tanggal 26 Februari 2013).
[MIC12] Microsoft, 2012, HUMAN INTERFACES GUIDELINES (KINECT
FOR WINDOWS V1.5.0)
[MIC13] Microsoft, 2013, Kinect for Windows Architecture, [aspx],
http://msdn.microsoft.com/en-us/Library/jj131023.aspx ( diakses
tanggal 26 Februari 2013 )
[MIC132] Microsoft, 2013, NUI: Natural User Interface, [aspx],
http://research.microsoft.com/en-
us/collaboration/focus/nui/default.aspx (diakses tanggal 26 Februari
2013)
[ROG10] Roger B. Dannenberg dan Dale Amon . A Gesture Based Interface
Prototyping System. http://www-
2.cs.cmu.edu/~rbd/papers/Scanned%20Papers/Gesture_based_user044
.pdf ( diakses tanggal 26 Februari 2013 )
[STE97] Steven W. Smith . The Scientist and Engineer's Guide to Digital Signal
Processing, 1997-1998. http://www.dspguide.com/ch22/1.htm (diakses
tanggal 26 Februari 2013)