# Autres langages > Python > GUI >  Choix d'une bibliothque pour raliser une interface graphique incluant des vidos

## besail

Bonjour  tous !

Comme explicit dans le titre, j'ai besoin de raliser une interface graphique qui pourra afficher un (ou deux, ou plus) flux vido depuis une webcam, en temps le plus rel possible !  ::roll::  et quelques widgets classiques pris en compte par n'importe quelle librairie.

J'ai farfouill un peu partout dans le forum vu qu'il y avait dj pas mal de requtes de conseil pour le choix d'une librairie ou d'une autre mais je n'ai rien trouv pour une application comme la mienne.

Mme Google n'a pas t mon ami sur ce coup  ::cry:: 

J'ai trouv une classe sur wxpython qui avait un nom qui sonnait plutt bien : VideoMode, cependant j'ai cru comprendre qu'elle servait juste  dtecter et initialiser les crans disponibles de la machine.

Merci par avance pour vos rponses !!

Besal

----------


## besail

Bon ben j'ai vu que a avait t ralis dj...

Je mets les liens en rapport au cas o quelqu'un se poserait la question.
solution n1

solution n2

Cependant, il me semble que ces deux solutions n'offrent que la possibilit d'afficher uniquement la vido dans une fentre, or je voudrais afficher les flux vidos dans une fentre, mais avoir aussi quelques boutons  ct !

----------


## pfeuh

Salut,

pour la solution 1, il me semble que Franck affiche la vido dans un Tkinter.Canvas, donc  priori rien ne s'oppose  mettre d'autres widgets dans le mme fentre. Il faut bien sr modifier sa classe qui construit sa propre fentre dans son __init__ Les lignes intressantes sont celles-l::


```

```

A+

Pfeuh

----------


## afranck64

Juste pour ajouter que le Tkinter.Canvas n'etait pas une bonne idee. Je me suis rendu compte qu'un Tkinter.Label produisait un bien meilleur flux.  ::mrgreen::

----------


## afranck64

Ca devrait t'interresser, la solution 1'
http://www.developpez.net/forums/d12...n/#post6637297

----------


## besail

Merci  tous les deux pour vos rponses rapides !
Je fais des tests et je fais un retour !

Besal

----------


## Ggamer

Ci-dessous avec wxPython, PIL et videoCapture

Cadeau !  ::D: 



```

```

----------


## besail

Merci beaucoup pour toutes vos rponses !
Ca marche du tonnerre !  ::ccool:: 

Bon maintenant, je joue l'enquiquineur  ::mrgreen:: 

Ca m'arrangerait grandement si je pouvais faire tourner a sous Linux (10.04) ^^', mais si j'ai bien compris et avec toutes mes vaines tentatives, vidcap n'est pas utilisable sous Linux. (J'ai bien compris ?  ::oops:: )

Des ides ?

Besal

----------


## Ggamer

Avec OpenCV et PyGame ci-dessous : 



```

```

----------


## besail

Bonjour, 

Et merci pour le bout de code !
Aprs une gueguerre contre mes bibliothques, j'ai fini par russir  compiler et a tourne sans problme. ::ccool:: 

Est-il alors possible de coupler openCV/pygame/highGUI avec wxpython pour ajouter  la fentre quelques boutons ?

Je demande avant car je ne veux pas me jeter  corps perdu dans cette ide au cas o a serait simplement irralisable  ::?:

----------


## afranck64

Ggamer, parviens tu a passer le cap des 2 cams avec OpenCV?

besail, je dirais oui. dans ce cas, pygame, traitera juste les images, et wx se chargera de les afficher.

----------


## Ggamer

Le premier bout de code tait le mien, mais le 2me bas sur OpenCV, non. Donc, je ne pourrai dire...

----------


## besail

Hello tous !

J'ai un souci de taille dans la ralisation de mon interface  ::(: 

je me suis servi de l'ensemble des codes que vous m'avez pass mais pour ce qui est de mler du wx et du pygame, c'est un peu coton. Tout simplement parce que la fonction Add() de la classe wx.Sizer ne permet d'ajouter que 3 types d'objets : des objets de type wx.Window, des sizers ou des wx.Size (autrement dit des spacers).

Et d'aprs ce que j'ai compris, l'objet qu'on a en utilisant pygame pour afficher une vido est de type pygame.Surface, et de ce fait je ne parviens pas  l'ajouter  ma fentre.

Une ide pour contourner le problme ?  ::calim2:: 

Merci d'avance !

Ca me donnerait grosso modo un truc de ce genre :


```

```

Besal

----------


## Ggamer

http://wiki.wxpython.org/IntegratingPyGame

----------


## besail

"We're still not sure though how stable this really is, and if it works on Mac or Linux."

En gros c'est  moi de dvelopper la solution :p

J'avais trouv ce code et j'avais essay mais a marche pas.

Merci !

----------


## afranck64

@Ggamer: a propos des cams, j'ai trouve qu'openCV etait compile avec un max de 2 cams pour windows, et 8 pour linux  & co (c'est pas fairplay de la part d'intel  ::no::  )

@besail: pourquoi veux-tu faire rentrer Pygame dans la partie? Logiquement PIL devrait te suffir a avoir une image utilisable dans wx. Et quand bien meme tu aurais besoin de Pygame pour traiter l'image, ca devrait s'arreter au traitement, tu prends ensuite ton image sous forme de string par exemple, la passe a PIL (ou wxImage/wxMedia...) pour obtenir une image affichage avec wx.

----------


## besail

Bonjour ! 

Je touche presque au but !

J'ai russi  afficher une image du flux video dans une fentre graphique, mais je ne vois pas o mettre mon while et quoi mettre dedans pour afficher le flux en continu.

Voil mon code :



```

```

Une fois de plus je suis preneur de vos (trs pertinentes) suggestions.

Merci !

Besal.

----------


## afranck64

Salut, a peu de choses pret, ta classe devrait avoir un "loop" qui se chaarge de recuperer et afficher les images. Ce loop devrait etre piloter par un thread.

----------


## afranck64

En gros, tu pourrais avoir une classe a la sauce: 

```

```

----------


## besail

Bonjour,

Je pense que j'ai saisi l'ide et le principe des thread mais je dbute en python et j'ai un peu du mal  agencer le code comme il faut. ::(: 

J'ai bidouill mais ce que je fais ne me semble vraiment pas propre, et d'ailleurs le shell me le rend bien ('segmentation fault'  ::aie:: )

Je ne comprends pas comment actualiser en permanence l'image DANS le widget : j'ai pour l'instant recr le widget  chaque fois que l'on rentre dans setImage, mais a me parat tre une trange faon de faire.

Comme cela :



```

```

Des corrections ?  ::?: 

Merci !

Besal

----------


## afranck64

salut, 


```

```

 ca devrait etre selt.bitmapWidget mais meme dans ce cas, redefinir le widget me semble etre terrible. Donc, ca devrait etre:


```

```



```

```

Et pour finir, les threads devraient etre des wxThread.

@+

----------


## besail

Bonjour,

Il me semble que j'ai un problme de "simultanit"...

Je pense que loopget essaie d'accder  l'image de la webcam au travers de mon Thread 1 alors que loopset l'utilise en mme temps au travers du thread 2, et je pense que a ne lui plait pas trop. 



```
python: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.0.
```

De plus, j'ai lu ici qu'un thread ne pouvait pas modifier un UI directement par le thread, mais qu'il fallait plutot passer par un event (ou utiliser un CallAfter() mais j'avoue ne pas bien comprendre comment l'utiliser).

Je joins encore mon code en laissant cette fois les "print" de test pour voir o le programme plante.



```

```

J'ai vraiment l'impression qu'il manque un petit rien mais je ne le trouve pas  ::(: 

Merci d'avance !

Besal

----------


## besail

un CallAfter(...) pourrait-il me tirer d'affaire ?

----------


## afranck64

du moins, un wxThread est preferable a un threading.Thread.

Ca ne coute rien d'essayer les callAfter  :;):

----------


## besail

> du moins, un wxThread est preferable a un threading.Thread.


J'aurais bien essay mais visiblement en python, les wxThreads ne sont pas supports.
Je vais trouver un itinraire de secours !

Besal

----------


## besail

Salutations, je reviens  la charge
J'ai modifi quelques trucs, j'ai plus qu'un seul thread que j'ai dfini en tant que classe et j'utilise Publisher() pour faire le reste.
Ca tourne mais avec un lag monumental. En fait je pense avoir compris mon problme :
Je dois convertir l'image rcupre par la webcam (iplImage) en Bitmap pour pouvoir l'afficher dans mon BitmapWidget, mais le problme c'est que le temps qu'il convertisse l'image en bitmap, le thread qui rcupre l'image depuis la webcam renvoie une nouvelle image et a cre un conflit ou quelquechose du genre, et du coup je vois pas trop comment je peux faire du temps rel.

Je vais tenter PyQt je pense...
A bientot
Besail



```

```

----------

