SIMULASI INTERAKSI ANTARMUKA

91
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

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)