Rilevazione utente Kinect

Sto sviluppando un’applicazione Quando un sensore kinect rileva uno scheletro, quella persona può lavorarci sopra se un’altra persona si avvicina all’utente esistente rileva la seconda persona.
Voglio limitare all’utente il sensore kinect per prima cosa lo rileva se arriva altro utente che non dovrebbe rilevare l’altro.
Grazie in anticipo

Vedi anche la risposta di Jurgeon D sul rilevamento del lettore Kinect SDK , poiché tratta dell’indice di scheletro. @Fixus ha anche ragione nel fatto che potresti usare un ID. Ma se intendi che vengono rilevate più di 2 persone, ne viene individuata solo una, che non è la programmazione, ovvero l’hardware di Kinect e @FelixK. era giusto.

Indice scheletrico

void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) { SkeletonFrame sf = e.SkeletonFrame; //check which skeletons in array are active and // use that array indexes for player index SkeletonData player1 = sf.Skeletons[playerIndex1]; SkeletonData player2 = sf.Skeletons[playerIndex2]; } 

ID scheletrici

 void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) { SkeletonFrame sf = e.SkeletonFrame; if (sf.TrackingState == SkeletalTrackingState.Tracked) { int ID1 = sf.TrackingID; } 

Anche il codice per rilevare gli umani

  DepthImageFrame depthFrame; short[] rawDepthData = new short[depthFrame.PixelDataLength]; depthFrame.CopyPixelDataTo(rawDepthData); Byte[] pixels = new byte[depthFrame.Height * depthFrame.Width * 4]; int player = rawDepthData[depthIndex] & DepthImageFrame.PlayerIndexBitmask; if (player > 0) { //do something } 

Kinect rileverà il nuovo utente perché è il suo lavoro 🙂 MA ricorda che ogni utente ha il suo ID in modo da sapere sempre che il primo utente è il primo e il secondo è il secondo. In questo modo puoi lavorare solo sullo scheletro dell’utente con cui vuoi lavorare

Se capisco correttamente la tua domanda questo non è ansible, non puoi modificare il comportamento di Kinects e il modo in cui rileva gli utenti (se non c’è nulla nel Framework, non credo che ci sia qualcosa).

Devi risolvere questo nel tuo codice.

In una delle esercitazioni di avvio rapido kinect esiste un metodo per rilevare un solo utente. L’ho provato per la mia applicazione e ha funzionato.

 using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame()) { if (skeletonFrame == null) return; Skeleton[] skeletons= new Skeleton[skeletonFrame.SkeletonArrayLength]; skeletonFrame.CopySkeletonDataTo(skeletons); if (skeletons.All(s => s.TrackingState == SkeletonTrackingState.NotTracked)) return; Skeleton skeleton = (from s in skeletons where s.TrackingState == SkeletonTrackingState.Tracked select s).FirstOrDefault(); if (skeleton == null) return; // TODO: Do something to the skeleton data... }