
Kinect için Geliştirme Ortamının Hazırlanması
Her ne kadar önceki makalemde değinmişte olsam, ayrı bir makale içerisinde geliştirme ortamının Kinect uygulamaları için hazırlanmasına değinmek sanırım faydalı olacaktır.
Öncelikle, Kinect için yazılım geliştirebilmek adına bilgisayarınızın sahip olması gereken bir grup minimum gereksinim bulunmakta. Bu gereksinimler;
- Windows 7 (x86 veya x64)
- Çift çekirdek 2.66 GHz veya üzeri işlemci
- Windows 7 uyumlu ve DirectX 9.0c destekli bir ekran kartı
- 2 GB veya üzeri hafıza
- Visual Studio 2010 Express veya üzeri sürümleri
- ve tabi ki USB/güç kaynağı adaptörü bulunan bir Kinect sensor
Konuşma özelliklerini kullanabilmek için;
- Microsoft Speech Platform – Server Runtime 10.2 (x86 sürümü)
- Microsoft Speech Platform – Software Development Kit 10.2 (x86 sürümü)
- Kinect for Windows Runtime Language Pack 0.9 (Şimdilik sadece İngilizce)
Geliştirme ortamınız x64 olsa bile, Kinect ile uygulama geliştirebilmeniz için yukarıdaki konuşma bileşenlerinin x86 sürümlerini indirip kuruyor olmanız gerekli.
Kinect SDK ile birlikte gelen DirectX örneklerinin çalıştırılabilmesi için;
Tabi ki bilgisayarınızda Kinect for Windows SDK’nın da kurulu olması da gerekecektir. Kinect SDK beta kurulmadan önce bilgisayarınızda alt sürümlerine/3.partiye ait sürücüler var ise kaldırılması gerekecektir. Kuruluma başlamadan önce Kinect cihazınızın bilgisayarınıza bağlı olmadığına emin olun.
Kinect sürücüleri kurulum sırasında MSRKINECTSDK ortam değişkenini tanımlayarak gerekli dosyaların bu sayede bulunabilmesine olanak vermektedir, tüm örnekler bu sabit değişken kullanılarak tanımlanmıştır. Bu değişken tanımlanmadan önce açılmış olan bir Visual Studio, açılan Kinect örnek projelerinde yer alan MSRKINECTSDK değişkeninin değeri bilemeyeceğinden referansların bulunmasında sıkıntı yaratacaktır. Bu sebeple Kinect SDK’sının kurulumu öncesinde Visual Studio’nun kapatılması önemlidir.
Kinect SDK’nın kurulumu sonrası Kinect cihazınızı harici güç kaynağına, ardından da bilgisayarınızın USB girişine bağladığınızda Windows otomatik olarak gerekli olan sürücüleri yükleyecektir. Kinect cihazının harici bir güç kaynağına bağlı olmaması durumunda sensorları minimum düzeyde çalışacak ve ön panelinde yer alan LED kırmızı yanacaktır.
Yukarıdaki kurulumlar ve Kinect cihazınızın bilgisayarınızın USB portuna bağlanması sonrasında artık yazılım geliştirmeye hazırsınız. Şimdi isterseniz Visual Studio 2010 üzerinde adım adım Kinect için basit bir WPF uygulaması oluşturalım.
Visual Studio 2010’u açtıktan sonra New Project linkine basarak yeni proje diyaloğuna geliyoruz. Bu diyalogda WPF Application ve .Net framework sürümü olarak da 4’ü seçiyoruz;

Örnek uygulamamız için proje adı olarak MerhabaKinect’i seçtim; fakat siz farklı bir isim de verebilirsiniz. Bu diyaloga ok dedikten sonra varsayılan şablon ve referansları ile bir WPF uygulaması açılacaktır.
Her ne kadar Kinect SDK’sının hem x86 hem de x64 sürümleri bulunsa da, geliştirilen uygulamaların her iki platformda da çalışabiliyor olması için x86 olarak derlenmiş olması önemlidir. Bu sebeple, projenin açılması sonrasında Solution Explorer penceresinden projeyi seçerek sağ tıklıyoruz, gelen menüden Properties seçilerek proje özellikleri ekranına geliyoruz;

Açılan proje ayarları penceresinde Build segmesine gelerek Platform Target özelliğini x86 olarak ayarlıyoruz;

Bu işlemler ardından artır projemize Kinect kütüphane referanslarını eklemeye hazırız. Solution Explorer penceresinde References’a gelip sağ tıklıyoruz, gelen menüden Add Reference seçilerek referans ekleme diyalogunu açıyoruz;

Benim bilgisayarımda Productivity Power Tools kurulu olması nedeniyle referans ekleme diyalogu sizinkinden farklı olarak aşağıdaki şekilde gelecektir. Referans ekleme işlemlerini oldukça kolaylaştıran bu diyalogda sağ üst bölümde yer alan arama alanına kinect yazarak, içerisinde kinect geçen tüm referansları filtreleyebiliyorum. Filtrelenmiş listeden Microsoft.Research.Kinect’i geçerek Add butonu vasıtasıyla proje referanslarına ekliyoruz;

Projemizi x86 olarak derlenecek şekilde ayarladıktan ve Kinect SDK referansını verdikten sonra artık kodlama aşamasına geçilebilir. Bu aşamada; eğer geliştireceğimiz uygulama NUI API’sini kullanacaksa aşağıdaki şekilde Microsoft.Research.Kinect.Nui isim uzayını kullanacağımızı belirtmeliyiz;
using Microsoft.Research.Kinect.Nui
Benzer şekilde Audio API’si kullanılacaksa Microsoft.Research.Kinect.Audio isim uzayını kullanacağımızı belirtmeliyiz;
using Microsoft.Research.Kinect.Audio
Eğer bir Kinect uygulamasında NUI API’si kullanılacaksa, öncelikli olarak Kinect çalışma zamanı ilklendirilmeli. Uygulamanın sonlanması ya da Kinect kullanımının bitmesi durumunda da Kinect çalışma zamanı sonlandırılmalıdır. Bu işlemler için Runtime sınıfı içerisinde yer alan Intialize ve Uninitialize fonksiyonları kullanılabilir. Her ne kadar bir zorunluluk olmasa da genel kabul görmüş bir yöntem olarak, Kinect çalışma zamanı ana ekranın yüklenmesi sırasında ilklendirilmekte, kapatılması sırasında ise sonlandırılmaktadır.
Ana Ekranın yüklenmesi Window sınıfının Loaded olayı dinlenerek yakalanabilir. Bu olay bildirimini dinleyebilmek için Ana ekranımız seçili iken Properties penceresine gelerek Events segmesini açmalıyız. Gelen listeden Loaded olayını bularak çift tıkladığımızda gerekli kod otomatik olarak Visual Studio tarafından oluşturulacaktır;


Yukarıdaki ekran görüntüsünde görüldüğü gibi Kinect çalışma zamanı için sınıf içerisinde nui adıyla bir değişken oluşturulmuş ve sınıfın constructer’ında bu değişken ilklendirilmiştir. Bu sayede kodumuzun devamında Kinect çalışma zamanını rahatlıkla kullanabiliriz.
Windows_Loaded fonksiyonu içerisinde Initialize fonksiyonu yardımıyla ilklendireceğimiz Kinect çalışma zamanına öncelikle hangi özelliklerini kullanacağımızı belirlemeliyiz. Bunu sebebi Kinect çalışma zamanının başlatılırken bizden bu bilgileri RuntimeOptions enum’u yardımıyla bekliyor olmasıdır. Örneğin; sadece RGB kamera kullanılarak ise, çalışma zamanı aşağıdaki şekilde ilklendirilmelidir;
nui.Initialize(RuntimeOptions.UseColor);
RuntimeOptions enum’unun flag olarak tanımlanmış olması sayesinde çeşitli kombinasyonlarla birden çok özelliğini ilklendirebiliriz. Örneğin derinlik ve iskelet takibi için aşağıdaki şekilde bir iklendirme yapılabilir;
nui.Initialize(RuntimeOptions.UseDepthAndPlayerIndex | RuntimeOptions.UseSkeletalTracking );
Son olarak; Pencerenin kapanması sırasında tetiklenen Closed olayını dinleyerek pencere kapandığında aşağıdaki şekilde Kinect çalışma zamanını sonlandırmamız mümkündür;
nui.Uninitialize();