Vraag Threading met de Kinect


Ik ben een C # -toepassing aan het schrijven die de Kinect gebruikt, ik neem de uitvoer op dit moment en schrijf het naar een Shader-bron en geef het weer als een textuur, mijn probleem is dat de Kinect (blijkbaar) alleen op 30 fps werkt, dus het is throttling mijn prestaties slecht.

Wat is de beste manier om dit te overwinnen, is het multithreading? Is er een soort ontwerppatroon dat zou helpen met dit soort problemen? Voor zover ik kan vertellen wil ik misschien dat de kinect de gegevens op een thread verwerkt en er vervolgens toegang toe krijgt wanneer het proces is voltooid, maar ik weet niet zeker waar ik hiermee op een veilige manier moet beginnen.

Bedankt voor het advies dat u kunt geven.

Ik gebruik momenteel OpenNI voor de kinect-stuurprogramma's / api en SlimDX voor de directX-kant van rendering.


13
2018-06-08 09:42


oorsprong


antwoorden:


Ik heb nog niet eerder met de Kinect gewerkt en je hebt niet gespecificeerd welke stuurprogramma's / wrapper je gebruikt, maar ik vermoed dat het waarschijnlijk niet uitmaakt.

Wat u waarschijnlijk moet doen, is het volgende:

  1. Maak de "Update" -cyclus voor de Kinect op zijn eigen thread los. Dat laat uw applicatielogica vrij om zo snel mogelijk te draaien zonder te worden gestopt met wachten op een update van de kinect-hardware.
  2. U moet de afbeeldings- / dieptegegevens bij elke passage "vergrendelen" terwijl de kinect de nieuwe gegevens invult.
  3. Als het verwerken van de Kinect-gegevens twee keer duurt, kunt u proberen de afbeelding en dieptegegevens te bufferen als de stuurprogramma's dat nog niet doen. Dit houdt in dat u slechts twee exemplaren in het geheugen bewaart en er een leest terwijl de andere wordt geschreven.

Voor uitstekende tutorials over draadsnijden in c #, adviseer ik altijd Albahari's Threading in C #. Ik zou ook aanraden dat als u meer specifieke informatie wilt over wat u kunt doen om uw applicatie te versnellen, u waarschijnlijk uw vraag moet bewerken en details moet toevoegen over specifiek hoe u het nu hebt gestructureerd en welke wrapper / driver u gebruikt, enz.


8
2018-06-13 04:10



Elke ontwikkeling met Kinect waarvoor hoge prestaties vereist zijn, moet u het poolingmodel gebruiken in plaats van het gebeurtenismodel. En complementair hieraan is uw beste optie een rode draad en de pooling-operaties. U kunt te veel threads gebruiken met een gebeurtenismodel om langdurige bewerkingen uit te voeren en de gebruikersinterface niet te bevriezen.

En je kunt dit zien: http://msdn.microsoft.com/en-us/library/hh973076


1
2017-08-23 12:46