• Tidak ada hasil yang ditemukan

ANALISIS DAN PERANCANGAN

3.3 Deteksi Skeleton Pengguna

Neptunus

3.3 Deteksi Skeleton Pengguna

Kerangka (Skeleton) dalam frame dapat memiliki status pelacakan "Tracked" atau

"Position Only". Kerangka yang dilacak memberikan informasi rinci tentang posisi di sudut pandang kamera yang terdiri dari dua puluh lima sendi tubuh pengguna.

Kerangka dengan status pelacakan "Position Only" memiliki informasi tentang posisi pengguna, namun tidak ada rincian tentang sendi. Aplikasi dapat menentukan kerangka yang akan dilacak, menggunakan ID pelacakan seperti ditunjukkan pada bagian Pelacakan Pengguna Aktif.Untuk kerangka yang dilacak (tracked), sebuah array sendi menyediakan posisi dua puluh lima sendi manusia yang dikenal di luar angkasa. Misalnya, aplikasi bisa menggunakan sendi tangan untuk memandu kursor di layar atau cukup menarik posisi tubuh pengguna di layar. Persendian juga memiliki

status pelacakan: "Tracked" untuk sambungan yang terlihat jelas, “inferred” bila sambungan tidak terlihat dengan jelas dan Kinect akan menyimpulkan posisinya, atau

"non-tracked", misalnya untuk persendian bagian bawah dalam pelacakan ketika mode duduk.

Secara default, pelacakan kerangka akan memilih dua pengguna pertama.

Perilaku ini konsisten (tidak acak), namun tidak didorong oleh kriteria tertentu. di aplikasi yang diterapkan menggunakan kriteria tertentu, menggantikan perilaku default dan menentukan logika khusus untuk memilih pengguna yang akan dilacak.

Pengguna yg akan dilacak yaitu pengguna yang sedang mengangkat tangannya.

Untuk melakukannya, memilih yang sesuai dengan kebutuhan dan meneruskan ID Tracked ke Track Skeleton untuk Track secara penuh. Setelah memiliki kontrol terhadap pengguna untuk ditrack, sistem pelacakan kerangka tidak akan dikendalikan kembali jika pengguna keluar dari layar, terserah pada aplikasi untuk memilih pengguna baru untuk dilacak. Perhatikan bahwa jika pengguna keluar dari jangkauan sensor kinect dan kembali, dia akan menerima ID pelacakan baru yang dipilih secara acak. ID baru tidak akan terkait dengan yang dimiliki saat keluar dari jangkaun sensor kinect. Dan dapat memilih untuk melacak hanya satu kerangka atau tidak ada kerangka sama sekali dengan mengirimkan ID pelacakan null ke kerangka pelacakan API.

Setelah skeleton pengguna didapatkan tahap selanjutnya yaitu pengambilan persendian (joints) pengguna. Sehingga didapat seperti gambar berikut.

32

Gambar 3.4 Skeleton Tracking dan joints Pengguna 3.4 Background Removal

Background removal merupakan tahap pemisahan antara pixel pengguna dan pixel latar belakang. Ketika kita akan menghapus latar belakang, kita perlu menjaga piksel yang membentuk pengguna dan menghapus hal lain yang bukan milik pengguna.

Kamera kedalaman sensor Kinect sangat berguna untuk menentukan tubuh pengguna.

Namun, kita perlu mencari nilai warna RGB (Red, Green, Blue), bukan jarak yang jauh. Kita perlu menentukan nilai RGB yang sesuai dengan nilai kedalaman pengguna. Menggunakan Kinect, setiap titik di ruang memiliki informasi berikut:

Nilai warna: Merah (Red) + Hijau (Green) + Biru (Blue). Nilai Kedalaman: Jarak dari sensor.

Kamera kedalaman (depth camera) memberi kita nilai kedalaman dan kamera RGB memberi kita nilai warna. Memetakan nilai tersebut menggunakan CoordinateMapper. CoordinateMapper adalah properti Kinect yang berguna yang menentukan nilai warna mana yang sesuai dengan setiap jarak jauh (dan sebaliknya).

Perlu diketahui bahwa frame RGB (1920 × 1080) lebih lebar dari pada frame kedalaman (512 × 424). Akibatnya, tidak setiap piksel warna memiliki pemetaan kedalaman yang sesuai. Namun, pelacakan badan dilakukan terutama dengan

menggunakan sensor kedalaman, jadi tidak perlu khawatir dengan nilai yang hilang.

Background removal memiliki hasil seperti green screen.

Gambar 3.5 Background Removal 3.5 Coordinate Mapper dan Body Joints Orientation

Tugas Coordinate Mapper adalah mengidentifikasi apakah titik dari ruang 3D sesuai dengan titik di ruang 2D warna atau kedalaman (depth) dan sebaliknya.

CoordinateMapper adalah bagian dari kelas KinectSensor. Di dalam kinect terdapat Ruang kamera (Camera Space) yang mengacu pada sistem koordinat 3D yang digunakan oleh Kinect. Sistem koordinat didefinisikan sebagai berikut: Asal (x = 0, y

= 0, z = 0) terletak di pusat sensor IR pada Kinect, X tumbuh ke kiri sensor, Y tumbuh ke atas sensor (perhatikan bahwa arah ini didasarkan pada kemiringan sensor), Z tumbuh di arah sensor yang dihadapi dan 1 unit = 1 meter.

Ruang kedalaman (Depth Space) adalah istilah yang digunakan untuk menggambarkan lokasi 2D pada citra kedalaman (depth). Anggap ini sebagai lokasi baris / kolom dari sebuah pixel dimana x adalah kolom dan y adalah barisnya. Jadi x

= 0, y = 0 sesuai dengan sudut kiri atas gambar dan x = 511, y = 423 (lebar-1, tinggi-1) adalah sudut kanan bawah gambar. Dalam beberapa kasus, nilai z diperlukan untuk memetakan ruang dalam. Untuk kasus ini, cukup contoh gambar kedalaman pada baris

34

/ kolom yang dimaksud, dan gunakan nilai tersebut (yang kedalamannya dalam milimeter) secara langsung sebagai z.

Operasi yang umum dilakukan pada gambar mendalam (depth image) adalah menghasilkan titik 3D di tempat kejadian (titik target). Dalam kasus ini, tidak akan memproyeksikan dari ruang kedalaman (depth Space) ke ruang kamera (camera space). Gunakan salah satu fungsi berbasis array (MapDepthPointsToCameraSpace) atau ambil tabel pemetaan (GetDepthFrameToCameraSpaceTable) dan lakukan multiply sendiri.

Setelah skeleton dan joints pengguna didapatkan, tugas selanjutnya yaitu memetakan objek 3D ke dalam koordinat persendian (joints). Dalam hal ini sangat diperlukan membagi objek 3D sesuai jenis persendian (joints) yang dipetakan.

Persendian pengguna dapat di akses dengan BodyJoint handleft = body.Joints[JointType.HandLeft]; dan dilakukan untuk setiap jenis persendian yang akan diakses.

Gambar 3.6 Pemotongan Objek 3D untuk Coordinate Mapper

Body Joint Orientation digunakan agar pergerakan objek 3D yang sudah dipetakan bergerak sesuai jenis persendian yang dipetakan. Kinect membaca nilai orientasi persendian sebagai sebuah quaternion. Sebuah quaternion adalah seperangkat 4 nilai: X, Y, Z, dan W. Kinect SDK mengkapsulasi quaternion ke dalam struktur yang disebut Vector4. Kita perlu mengubah quaternion ini (Vector4) menjadi satu set dari 3 nilai numerik. Dengan menggunakan quaternion Orientation, kita dapat menghitung rotasi sendi di sekitar sumbu X, Y, dan Z. Rotasi di sekitar sumbu X

disebut Pitch, rotasi di sekitar sumbu Y disebut Yaw dan rotasi di sekitar sumbu Z disebut Roll. Body joints orientation dapat dipanggil dengan BodyJointOrientation handLeftRot = body.JointsOrientations[JointType.HandLeft];

Gambar 3.7 Arah Persendian (Pterneas, 2017)

Dokumen terkait