2013-06-14 2 views
1

J'ai développé une application C# qui prend en entrée le streamRGB (débit 640x480: 30fps) généré par le périphérique Kinect. Après chaque trame est reçue, je l'enregistre sur le disque en tant que fichier.wmv. Le problème commence quand j'essaie de manipuler chaque image avant de l'enregistrer, car le débit est de 30fps et l'opération de manipulation dure environ 200ms (donc je peux acquérir seulement 5fps).Problème de manipulation de trame en temps réel

Je sais que c'est un problème courant. Quelles sont les solutions les plus courantes pour le résoudre?

Répondre

1

Il s'agit d'un problème courant qui se produit lorsque vous devez faire quelque chose en temps réel, mais qui est en réalité trop lent pour être traité en temps réel. La première «solution» serait d'augmenter les performances des opérations en temps réel de manière à ce qu'elles soient suffisamment rapides, ce qui n'est souvent pas possible.

L'option la plus réaliste consiste à établir une file d'attente à traiter sur un autre thread. Ceci est un exemple parfait pour un modèle de conception consommateur/producteur, car vous pouvez produire des cadres et les consommer pour être manipulés le plus rapidement possible. Pour décharger de la mémoire, vous pouvez écrire les images sur le disque de fichier et les lire lors de la consommation.

Notez également que GDI +, le code derrière les bitmaps, est à un seul thread et va tout verrouiller en ce qui concerne la manipulation d'image à un seul thread. Cela peut être migré en utilisant différents processus (un pour chaque cœur) pour optimiser les performances de la machine.

+0

Merci @Roel – GVillani82