Udah kenalan sama bentuk fisik dari kinect kan?? udah install juga kan software-software yang saya kasih di post sebelumnya?? nah sekarang kita kenalan sama bentuk dasar programmingnya dulu yuk, soalnya kalo gak tau struktur dasar untuk ngoding kinect, bakal susah buat paham API nya..nanti ujung2nya jadi bingung loh sama alur program nya.
Kali ini saya akan pandu kalian membuat program kinect sederhana, pake console..untuk yang terbiasa ngoding trus ngompile di dos pasti udah familiar nih..yup, kita cuma akan menampilkan hasil berupa angka-angka yang dihasilkan oleh device kinect saat menjalakan fitur DepthFrame nya :D
Oh iya, karena takut postingan nya kepanjangan, saya anggap kalian udah lumayan familiar sama Visual Studio yah..bagi yang belom, tutorial nya banyak kok, jangan takut..hehe
Okeh, mari kita mulai pelajarannya!!!!
Kinect Console Programming
- Jalankan aplikasi Visual Studio yang kalian miliki, minimal Visual Studio 2010 yah
- Bikin project baru, caranya File-> Project...
- Trus pada bagian Installed Templates, pilih Visual C# -> Console Application
- Masukkin nama projectnya terserah kalian yah, kalo saya sih "kinectConsole", untuk Solution name nya samain aja, jangan lupa juga box "create directory for solution" yang ada di pojok kanan bawah dicentang yah
Kalo udah sesuai langkah - langkah diatas, tampilannya jadi kayak gini nih :
Beberapa langkah - langkah abis ini mutlak diinget nih, karena kalian pasti ngelakuin hal yg sama berulang-ulang kalo mau ngoding kinect di Visual Studio
- Di Solution Explorer, klik kanan pada folder References, lalu pilih Add References...
- Akan muncul window references, pilih tab .NET, lalu cari Microsoft.Kinect di baris Component Name, kemudian pilih OK ( kalo library nya gak ada, berarti agan sekalian pasti belom install Microsoft Kinect SDK, coba install dulu ya :D )
- Buka file Program.cs dari Solution Explorer, akan terdapat coding seperti berikut:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace kinectConsole
{
class Program
{
static void Main(string[] args)
{
}
}
}
- Masukkan deklarasi namespace untuk microsoft kinect agar kita dapat menggunakan semua class yang tersedia
using Microsoft.Kinect;
- Deklarasikan variabel sebagai sebuah instansi dari sensor kinect ( saya memakai nama variabel myKinect ):
KinectSensor myKinect = KinectSensor.KinectSensors[0];
- Berhubung yang kita pakai adalah fitur depth dari kinect, maka berikan perintah untuk menggunakan sensor depth di dalam kamera:
myKinect.DepthStream.Enable();
- Nah, sekarang sensor depth nya udah diaktifin nih, tapi programnya belom ada yg nangkep hasil buffering depth nya, untuk itu kita harus bikin sebuah "event handler" untuk menangani proses penangkapan data dari kinect nya:
myKinect.DepthFrameReady +=
Abis nulis coding diatas, pasti muncul semacem tooltip, nah kalian tinggal menekan tombol "TAB", maka otomatis akan jadi seperti ini:
myKinect.DepthFrameReady += new EventHandler<DepthImageFrameReadyEventArgs>(myKinect_DepthFrameReady);
eit, jangan di enter dulu, tekan dulu tombol TAB sekali lagi agar visual studio otomatis ngebikin method yang dimaksud, scara otomatis, akan muncul suatu method seperti dibawah ini :
static void myKinect_DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
{
throw new NotImplementedException();
}
- Langkah penting selanjutnya yang harus kita lakukan adalah mengaktifkan kamera kinect, atau dengan kata lain meng-ON kan kinect nya ( ini sih penting banget, kalo sampe lupa, percuma lah kita ngoding panjang tapi kinect nya gak diaktifin :D )
myKinect.start();Darisini, kita sudah punya 2 method di file class MainWindow..digunakan untuk mengaktifkan sensor depth, mengaktifkan kinect dan juga mengambil data yang diperoleh melalui sensor depth.
static void Main(string[] args){KinectSensor myKinect = KinectSensor.KinectSensors[0];myKinect.DepthStream.Enable();myKinect.DepthFrameReady += new EventHandler<DepthImageFrameReadyEventArgs>(myKinect_DepthFrameReady);myKinect.Start();
while (Console.ReadKey().Key != ConsoleKey.Spacebar) { }
throw new NotImplementedException();}static void myKinect_DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e){
Oke, mari kita lanjutkan lagi programnya sampai selesai, by the way, kalian jangan sekedar mengcopy-paste code yang saya kasih yah, harus pahami juga, biar nantinya ngerti kalo mau mulai ngedevelop program sendiri}
- dapatkan depth frame dari kinect yang kita gunakan untuk nantinya data ini akan diberikan pada event handler di class MainWindow
using (DepthImageFrame depthFrame = e.OpenDepthImageFrame())
{
}
- Kita harus memastikan bahwa kinect mendapat data dari depth, dan jika ternyata tidak maka program harus selesai sampai disitu
if (depthFrame == null){return;}
- jika ternyata program bisa melewati tes diatas, maka dapat dipastikan bahwa kinect mempunyai sejumlah data yang didapat melalui sensor depth nya, untuk itu maka kita harus membuat suatu buffer untuk menampung seluruh data tersebut
short[] depthData = new short[depthFrame.PixelDataLength];
- Lalu program harus meng-copy data ke dalam array tersebut
depthFrame.CopyPixelDataTo(depthData);
- Selanjutnya yang akan kita lakukan adalah menampilkan bit-bit data hasil buffer sensor depth kinect
foreach (var bit in bits)Console.Write(bit);
- Eit program belom selesai, masukkan kode berikut agar window console tidak otomatis menutup, kecuali jika kita menekan tombol escape
while (Console.ReadKey().Key != ConsoleKey.Spacebar) { }
Berikut adalah tampilan koding lengkap nya :
static void Main(string[] args){
KinectSensor myKinect = KinectSensor.KinectSensors[0]; myKinect.DepthStream.Enable();
myKinect.DepthFrameReady += new EventHandler<DepthImageFrameReadyEventArgs>(myKinect_DepthFrameReady);myKinect.Start(); while (Console.ReadKey().Key != ConsoleKey.Spacebar) { }
}
static void myKinect_DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e){
using( DepthImageFrame depthFrame = e.OpenDepthImageFrame()){
if (depthFrame == null){return;
}
short[]depthData = new short[depthFrame.PixelDataLength];
depthFrame.CopyPixelDataTo(depthData);
foreach (var bit in depthData)Console.Write(bit);
}
}
Dan berikut tampilan final nya :
Selesai sudah aplikasi sederhana kali ini, sejujurnya tutorial satu ini tidak bertujuan membangun sebuah aplikasi keren, hanya dikhususkan agar kalian mengerti dasar - dasar membangun aplikasi kinect dan juga struktur nya.
Tutorial ini dibuat saat saya mengembangkan kinect untuk ditempelkan ke robot buatan temen saya, karena robot dirasa tidak perlu interface, maka aplikasi console seperti ini dirasa cukup untuk mengirim dan menerima data antar socket.
Selamat menikmati, jangan lupa komentar nya :D
Ayo donk.....bagi lagi tutorialnya..... :)
BalasHapus