2016-11-17 3 views
1

en utilisant python3, gtk3. Je travaille sur une application de vision par ordinateur qui doit manipuler et afficher (lire) les images d'une vidéo.jouer une vidéo en récupérant et en manipulant image par image: est de créer un nouveau pixbuf à chaque image de la route à suivre ou est-il un moyen plus facile?

Actuellement, créer un nouveau Pixbuf avec la méthode statique new_from_data, alimenté par une séquence d'octets créés à partir d'un numpy tableau qui contenait le cadre de réglage, et je rencontre des problèmes de rendement, comme ne pas être capable de jouer la vidéo à 20fps. Je me demande: est-ce la voie à suivre pour ce genre de problème? Est-ce que créer un nouveau Pixbuf pour chaque image est relativement bon marché ou cher? Dois-je utiliser d'autres méthodes, telles que l'utilisation de new_from_stream? (pas connu)

+0

Essayez GStreamer? Je ne sais pas combien de travail votre installation prendrait ... – andlabs

+0

la quantité de travail n'est pas un problème – fstab

+0

Oui, la création d'un nouveau Pixbuf pour chaque image est très, très, chère. Malheureusement, je n'ai pas une bonne réponse pour la vidéo en streaming générée à la volée car cela dépend beaucoup de la façon dont vous générez les images, et de vos autres besoins, mais ce n'est certainement pas le meilleur moyen. – ptomato

Répondre

2

Ce n'est pas un moyen "plus facile", mais si vous rencontrez des problèmes de performances, vous devriez essayer d'utiliser Clutter via Clutter-Gtk qui utilisera l'accélération matérielle pour dessiner les cadres.

Vous pouvez créer un widget GtkClutterEmbed, ce qui vous donnera un ClutterStage qui est un ClutterActor. Chaque fois que vous avez un nouveau cadre, vous pouvez créer un nouveau ClutterImage et faire clutter_image_set_data() (qui est juste comme new_from_data pour le Pixbuf) et ensuite définir le ClutterContent du ClutterActor (par exemple: le ClutterStage) pour être ce nouveau ClutterImage.

Voici comment Gnome-Ring joue la vidéo, vous pouvez jeter un oeil à son source code here pour l'inspiration.