Genel Bakış

Prag Projesi nedir?

Project Prag, el hareketi girişini temel alan NUI (doğal kullanıcı arabirimi) deneyimleri oluşturmanıza olanak tanıyan bir SDK 'dır (yazılım geliştirme seti). C#, C++ (UWP ve .NET Core tatları dahil) için API'ler (uygulama programlama arabirimleri) sağlayarak kendi özelleştirilmiş el hareketlerinizi kolayca tasarlamanızı ve uygulamanızı ve uygulamalarınızla tümleştirmenizi sağlarız. Bazı el hareketi deneyimlerini keşfetmek ve programlama modelimizi tanımak için GitHub örnekleri depomuzu ziyaret edin.

Hareketin yapı taşları el pozları ve el hareketleridir. Sezgisel bir dilde belirtilen basit kısıtlamaları kullanarak, herhangi bir el pozunu ve istediğiniz el hareketini tanımlamanıza olanak sağlarız. Bir hareket belirtmek için el pozları ve el hareketleri dizisini bir araya getirebilirsiniz. Hareketiniz tanımlanıp çalışma zamanımıza kaydedildikten sonra, kullanıcınızın hareketi kendi eliyle gerçekleştirdiğini her algıladığımızda sizi bilgilendireceğiz. Bu noktada, algılanan harekete yanıt vermek için istenen mantığı çalıştırabilirsiniz.

Project Prag'ı kullanarak kullanıcılarınıza müzik ve video kayıttan yürütmeyi sezgisel olarak kontrol etmek, web içeriğini yer işareti ve beğenmek, anlık ileti (anlık ileti) uygulamalarında emoji göndermek, dijital bir yardımcıyla etkileşim kurmak, PowerPoint slayt gösterileri oluşturmak ve çalıştırmak, üç boyutlu nesneleri işlemek, tek başlarına oyun oynamak ve çok daha fazlasını yapmak için el hareketleri sağlayabilirsiniz.

Prag Projesi ile çalışmaya başlama

Desteklenen derinlik kameraları

Project Prag'ı makinenizde çalıştırmak için bir derinlik kameranız olması gerekir. Şu anda aşağıdaki kamera markalarını destekliyoruz:

Marka Hareket Algılama Aralığı Deneyim
Intel® RealSense™ SR300 kamera 20-60 [cm] En iyi
Intel® RealSense™ F200 kamera 20-60 [cm] İyi
Windows v2 için Kinect 60-110 [cm] İyi

En iyi performans için Intel® RealSense™ SR300 kamerayı kullanmanızı öneririz.

Donanım ve yazılım gereksinimleri

Project Prag'ı ayarlamaya devam etmeden önce sisteminizin aşağıdaki gereksinimleri karşıladığından emin olun:

Kategori Önerilen En az
CPU Intel® Core™ i7 serisi, 8 mantıksal çekirdek Intel® Core™ i5 serisi, 4 mantıksal çekirdek
Ücretsiz RAM 2 GB veya daha fazla 1 GB
Operating System Creator Update'in yüklü olduğu Windows 10 Windows 10

Makinenizde Prag Projesi ayarlama

Project Prag'ın makinenizde çalışmasını sağlamak için yapmanız gerekenler:

  1. Derinlik kameranızı usb 3.0 bağlantı noktasına takın ve aşağıdaki görüntüde gösterildiği gibi bilgisayarınızın monitörünüzün altına yerleştirin:

    RealSense kamera masaüstü kurulumu

  2. İndirme ve yüklemeaka.ms/gestures/download'dan Project Prag çalışma zamanı. Yükleme, masaüstünüzde derlenmiş tanıtım uygulamalarımıza işaret eden kısayollar yerleştirir:


    Tanıtım uygulamalarımız şunlardır:

    Uygulama Description
    Microsoft.Gestures.Service
    | [hareket algılama hizmetimizi](getting-started-gestures-service.md) çalıştırır
    Microsoft.Gestures.DiscoveryClient
    | Windows kabuğu, PowerPoint, Skype ve daha fazlası için hareket tümleştirmesi sağlar
    Microsoft.Gestures.Camera.Viewer
    | Kameradan RGB akışını görüntüler ve hareketle tetiklenen ekleme
    animasyonlu yer paylaşımları
    Kurt gibi
    | Unity® ile yapılan hareket temelli oyunu çalıştırır
  3. Yükleme tamamlandığında Microsoft Gestures Service adlı bir pencere açılır. Bu, gerçek zamanlı hareket ve poz algılama panomuzdur. Aşağıda gösterildiği gibi parmaklarınızın başarıyla algılandığından emin olun:

    Hareket Algılama Panosu

Not

Varsayılan olarak, yalnızca sağ el algılama etkindir. her iki eli de etkinleştirmek için, Hareketler Hizmeti penceresinin Sistem bölümündeki İki eli etkinleştir kutusunu işaretleyin.

  1. Project Prag kurulumunun Aşağıdaki iki uygulamayı Windows başlangıcında başlatılacak ve arka planda çalışacak şekilde yapılandırdığını unutmayın:

    • Microsoft.Gestures.Sync - Hareket Hizmeti'ni çalışır durumda tutar ve güncelleştirmeleri yayımladığımızda çeker.
    • Microsoft.Gestures.DiscoveryClient - Çeşitli bağlamlar için hareket tümleştirmesi sağlar: Windows kabuğu, PowerPoint, Skype, YouTube, Fotoğraflar ve Visual Studio.

    Bu yapılandırmayı istediğiniz zaman Görev Yöneticisi'nin Başlangıç sekmesinde değiştirebilirsiniz.

Prag Projesi'ndeki hareketleri anlama

Hareketleri yazmaya başlamadan önce, bir hareketin temel yapı taşları olan el pozları ve el hareketleri hakkında bilgi edinmeniz gerekir.

El pozu

El pozu , belirli bir anda elin anlık görüntüsünü ifade eder. El pozu, o anlık görüntüdeki avuç içi ve parmakların durumunun tam bir açıklamasını içerir. API'mizde el pozu, aşağıda gösterildiği gibi çeşitli kısıtlamalardan oluşanHandPose sınıfı tarafından temsil edilir:

HandPose ve kısıtlamalar

Aşağıda gösterildiği gibi, bu poza dahil olan tüm kısıtlamaları karakterize ederek herhangi bir el pozunu ifade edebilirsiniz:

HandPose örnekleri

Yukarıdaki örnekte, soldaki anlık görüntüyle makul bir şekilde ilişkilendirebileceğiniz tüm kısıtlamalar gösterilmektedir. Bu örnek, Project Prag dilinde kısıtlamaları belirtmek için kullanılan farklı terimlerin anlamını göstermek için yalnızca eğitim amacıyla verilmiştir. Pratikte, el pozu belirtmek için bu kadar çok sayıda kısıtlamayı asla kullanmazsınız. Bunun yerine, el pozunun özünü yakalayan en az sayıda kısıtlamayı bulmak için denemeniz gerekir. Aşağıdaki örnek, aynı pozu açıklamanın pratik bir yoludur:

Basitleştirilmiş HandPose örneği

Bu son örnek, anlık görüntüdeki pozun özünü iyi yakalar: Başparmak ve işaret parmaklarının gerçekleştirdiği sıkıştırma eylemi. El pozunun açıklamasında orta, halka ve serçe parmağın bulunmadığına dikkat edin, sıkıştırma eylemine katılmadıkları ve bu nedenle pozun özünü ifade etmeye gerek olmadığı için.

El pozu tanımlarken (fazla uygunluk) çok fazla kısıtlama kullanmak algılanması zor bir poz oluşturabilir. Bunun nedeni, kullanıcılarınızın tüm kısıtlamaları karşılamak için ellerini çok özel bir duruşa ayarlamaları gerekecektir. El pozu tanımlarken (yani yetersiz uygunluk) çok az kısıtlama kullanmak, pozu algılamayı çok kolaylaştırabilir ve kullanıcınız istemeden pozu gerçekleştirebilir.

El hareketi

Elinizi hareket ettirdikçe , parmak uçlarınız boşlukta bir eğri izler. Bu eğriyi "el hareketi" olarak adlandırıyoruz ve API'mizde HandMotion sınıfı tarafından temsil edilir. El hareketi, bir el parçasıyla (avuç içi ortası veya parmak uçlarından biri) ilişkilendirilir ve bir dizi hareket yapı bloğundan oluşur. Kullanılabilir yapı taşları aşağıda gösterilmiştir:

HandMotion yapı taşları

Gördüğünüz gibi, tüm yapı taşları iki boyutlu olan hareketi tanımlar. Başka bir deyişle - hareketin tamamı tek bir düzlem içinde yer alır. Kısıtlanmamış üç boyutlu el hareketinin doğru şekilde yürütülmesi zor olabileceğinden, daha iyi bir kullanıcı deneyimi sağlamak için bu sınırlamayı kasıtlı olarak uygulamaya aldık. Aşağıda gösterildiği gibi , el hareketinizi içerecek üç kullanılabilir düzlemden birini seçebilirsiniz:

El Hareket Uçakları

Hareketi hangi el parçasının yürütmesi gerektiğine karar verdikten ve onu içerecek bir düzlem seçtikten sonra, geriye kalan tek şey hareketi bir dizi hareket yapı taşları olarak belirtmektir, örneğin:

Hareket - basit örnek

Hareket

Bir hareketi, durumları el pozlarını, el hareketlerini ve hatta diğer hareketleri temsil eden bir durum makinesi olarak düşünüyoruz. Bu durum makinesinde ilk durumlar ve alma durumları vardır. İlk durumla başlayıp alıcı durumla biten bir yol, ilgili hareketin algılanmasını tetikleyebilmek için kullanıcının gerçekleştirmesi gereken bir dizi eylemi (el pozları, el hareketleri ve el hareketleri) temsil eder.

API'mizde bir hareket Gesture sınıfı tarafından temsil edilir. Aşağıdaki örnekte, durum makinesi basit bir el pozları ve el hareketleri dizisi olan bir hareket gösterilmektedir:

Hareket örneği

Örnekteki Sapan hareketi, Retract adlı tek bir el hareketi ve üç el pozu (iki NotPinching örneği ve bir Sıkıştırma örneği) oluşur. Sapan hareketi şu eylem dizisine karşılık gelir: Sol elinizde bir sapan tuttuğunuzu düşünün, şimdi sağ elinizin başparmak ve işaret parmaklarıyla cebini kavrayın ve yeniden çekerek sapan bandını uzatın, son olarak - dizini ve başparmak parmaklarını cebi serbest bırakmak ve hayali merminin uçmasına izin vermek için ayırın.

Prag Projesi'nde hareket oluşturma

Şimdi Project Prag API'sini kullanarak basit bir hareketin nasıl programlandığını gösteren bir örnek vereceğiz.

Önemli

Tüm Project Prag .NET varlıklarının kök ad alanıMicrosoft.Gestures ve buna göre tüm yerel varlıklar için Microsoft::Gestures'tır .

RotateRight hareketini uygulayacağız:

Sağa döndür FSM

Sezgisel olarak, RotateRight hareketini gerçekleştirirken bir kullanıcı ön plan uygulamasındaki bir nesnenin 90° sağa döndürülmesini bekleyebilir. Örneğin Bulma İstemcimizde bu hareketi kullanarak Bir PowerPoint slayt gösterisindeki bir görüntünün döndürülme işlemini tetikledik.

Aşağıdaki kod , RotateRight hareketini tanımlamanın önerilen yolunu gösterir:

Uyarı

Aradığınız örnek başka bir yere taşınmış gibi görünüyor! Bu sorunu çözmek için çalıştığımızdan emin olabilirsiniz.

RotateRight hareketini iki el pozu dizisi olarak belirtin: RotateSet ve RotateGo. Her iki poz da başparmak ve dizinin açık olmasını, ileriye dönük olmasını ve birbirine dokunmasını gerektirmez. Pozlar arasındaki fark , RotateSet'in dizin parmağın başparmak üzerinde olması gerektiğini ve RotateGo'nun başparmak sağındaki olması gerektiğini belirtmiş olmasıdır. Bu nedenle RotateSet ile RotateRight arasındaki geçiş, elin sağa dönmesine karşılık gelir.

Orta, halka ve pembe parmakların RotateRight hareketinin tanımına katılmadığını unutmayın. Bu anlamlıdır çünkü bu parmaklarının durumunu hiçbir şekilde kısıtlamak istemeziz. Başka bir deyişle, bu parmaklar RotateRight hareketinin yürütülmesi sırasında herhangi bir poz varsaymayı serbesttir.

Hareketi tanımladıktan sonra, hedef uygulamanızda uygun işleyiciye hareket algılamayı belirten olayı bağlamanız gerekir:

Uyarı

Aradığınız örnek başka bir yere taşınmış gibi görünüyor! Bu sorunu çözmek için çalıştığımızdan emin olabilirsiniz.

Algılamanın kendisi Microsoft.Gestures.Service.exe işleminde gerçekleştirilir (yukarıda açıklanan "Microsoft Hareketleri Hizmeti" penceresiyle ilişkilendirilir). Bu işlem arka planda çalışır ve hareket algılama için bir hizmet görevi görür. Hizmetle iletişim kurmak için GesturesServiceEndpoint sınıfını size sunuyoruz. Aşağıdaki kod parçacığı bir GesturesServiceEndpoint nesnesinin örneğini oluşturur ve algılama için RotateRight hareketini kaydeder :

Uyarı

Aradığınız örnek başka bir yere taşınmış gibi görünüyor! Bu sorunu çözmek için çalıştığımızdan emin olabilirsiniz.

RotateRight hareketinin algılanmasını durdurmak istediğinizde, kaydı aşağıdaki gibi kaldırabilirsiniz:

Uyarı

Aradığınız örnek başka bir yere taşınmış gibi görünüyor! Bu sorunu çözmek için çalıştığımızdan emin olabilirsiniz.

Kullanıcı RotateRight hareketini yürüttüğünde işleyiciniz artık tetiklenmez.

Hareketlerle çalışmayı bitirdiğinizde GesturesServiceEndpoint nesnesini atmalısınız:

Uyarı

Aradığınız örnek başka bir yere taşınmış gibi görünüyor! Bu sorunu çözmek için çalıştığımızdan emin olabilirsiniz.

Yukarıdaki kodun derlenmesi için MicrosoftGesturesInstallDir ortam değişkeni tarafından belirtilen dizinde bulunan aşağıdaki derlemelere başvurmanız gerektiğini lütfen unutmayın:

  • Microsoft.Gestures.dll
  • Microsoft.Gestures.Endpoint.dll
  • Microsoft.Gestures.Protocol.dll

RotateRight hareketini kullanarak eksiksiz bir açık kaynak kod örneğiyle denemeler yapmak için lütfen GitHub örnekleri depomuzdakiRotateSample'a bakın. Bu depoda, C# ve C++ (UWP ve .Net Core tatları dahil) hareketleri için uygulamaları gösteren daha gelişmiş örnekler de bulabilirsiniz.