Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Programmation multimédia/Jeux

Programmation multimédia/Jeux Forum d'entraide sur la 2D, 3D, video, son, ...

Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Affichage des résultats du sondage: Python est-il adéquat au traitement d'images à "grande vitesse"?
Oui 5 83,33%
Possible 1 16,67%
J'en doute 0 0%
Non 0 0%
Votants: 6. Vous ne pouvez pas participer à ce sondage.

Publicité
'
Réponse
 
Outils de la discussion
Vieux 23/01/2011, 15h36   #1
afranck64
Membre Expert
 
Avatar de afranck64
 
Homme Franck Awounang N.
Étudiant
Inscription : janvier 2009
Messages : 587
Détails du profil
Informations personnelles :
Nom : Homme Franck Awounang N.
Âge : 21
Localisation : Autre

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2009
Messages : 587
Points : 1 025
Points : 1 025
Envoyer un message via Yahoo à afranck64
Par défaut Capture + Traitement d'images avec Python ?

Bonjour,
J'essaie présentement de monter un visualiseur de flux pour Caméra avec Tkinter + PIL + VideoCapture. Mais il se trouve que les temps de récupération de l'image avec VideoCatpure et de traitement avec PIL ne m'arrangent pas. (de l'ordre de 10-² secondes ). De plus le programme est supposé tourner avec 3 caméras en moyenne. Mais juste une fais monter le CPU à 45%.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import Tkinter
import ImageTk
import VideoCapture
import time
import threading
import PIL.ImageEnhance
 
 
##### CONSTANTS #####
QUANTUM = 1.0/25
 
 
###### CLASSES #######
class Cam(threading.Thread):
    def __init__(self,master=None,cam=0,size=(320,240)):
        threading.Thread.__init__(self)
        print "Thread inited"
        self.can = Tkinter.Canvas(master,width=size[0],height=size[1])
        self.can.pack()
        print "Can created"
        self.cam = VideoCapture.Device(cam,0)
        print "Cam created"
        self.img = self.cam.getImage()
        print "Firs image getted"
        self.size = size
        self.photo = ImageTk.PhotoImage(self.img,self.size,master=self.can)
        print "First image getted"
        self.id = self.can.create_image(size[0]/2+1,size[1]/2+1,image=self.photo)
        print "Image drawed"
        print "can updated"
        self.alive = True
 
    def run(self):
        while self.alive:
            t1 = time.time()
            self.can.update()
            t2 = time.time()
            self.img = PIL.ImageEnhance.Color(self.cam.getImage()).enhance(0)
            t3 = time.time()
            self.photo = ImageTk.PhotoImage(self.img,self.size,master=self.can)
            self.can.itemconfigure(self.id,image=self.photo)
            t4 = time.time()
            self.can.master.title("upt= %.3f, get =%.3f, work= %.3f" %(t2-t1,t3-t2,t4-t3))
            time.sleep(QUANTUM)
 
 
 
api = Cam()
api.start()
D'où ma question. Python est-il idéal pour le traitement d'images à "grande vitesse"?

Cordialement, Franck.
__________________
Win 7 HP 64 bits /Ubuntu 12.04, - AMD A6 Quad: Py32 / Py27
Citation:
CONTENU D'UNE QUESTION
Exemples:
- Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
- Code source du morceau de programme où il y a un bogue
- Ligne de code sur laquelle le bogue apparaît
- Erreur complète retournée pas l'interpréteur Python
- Recherche déjà effectuée (FAQ, Tuto, Web, ...)
- Tests déjà effectués
afranck64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 17h04   #2
vikki
Membre confirmé
 
Avatar de vikki
 
Inscription : mai 2007
Messages : 292
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : mai 2007
Messages : 292
Points : 266
Points : 266
Hello,
Du traitement d'images temps réel en Python, c'est possible via numpy et scipy (plutot que la PIL) à condition de n'utiliser QUE les fonctions définies dans ces packages (écrites en C), tu devrais alors te rapprocher des perfs d'un programme pur C. Si tu commences à manipuler les pixels un par un en pur python, c'est fini, dis adieu aux perfs. A noter qu'il existe des outils pour intégrer des bouts de C dans ton code (regarde du coté de scipy.weave).

Python n'est vraiment pas le langage idéale pour du calcule parallèle à cause du système de lock de l'interpréteur. Mais je crois que des solutions existent (voir multiprocessing module)
vikki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 22h34   #3
afranck64
Membre Expert
 
Avatar de afranck64
 
Homme Franck Awounang N.
Étudiant
Inscription : janvier 2009
Messages : 587
Détails du profil
Informations personnelles :
Nom : Homme Franck Awounang N.
Âge : 21
Localisation : Autre

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2009
Messages : 587
Points : 1 025
Points : 1 025
Envoyer un message via Yahoo à afranck64
Bonsoir,
Je me suis mis à PyOpenCV pour, mais je doit avouer que ça manque cruellement de Tutoriels/Cours. Pour le moment je suis obliger de me taper des Tutos de C++. .
Mais bon, il se trouve que ça permet effectivement de faire des merveilles. Mais pour le moment la seule que je sache faire c'est afficher une image.

@+
__________________
Win 7 HP 64 bits /Ubuntu 12.04, - AMD A6 Quad: Py32 / Py27
Citation:
CONTENU D'UNE QUESTION
Exemples:
- Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
- Code source du morceau de programme où il y a un bogue
- Ligne de code sur laquelle le bogue apparaît
- Erreur complète retournée pas l'interpréteur Python
- Recherche déjà effectuée (FAQ, Tuto, Web, ...)
- Tests déjà effectués
afranck64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 22h50   #4
vikki
Membre confirmé
 
Avatar de vikki
 
Inscription : mai 2007
Messages : 292
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : mai 2007
Messages : 292
Points : 266
Points : 266
Sans l'avoir essayer, il parait qu'OpenCV est une très bonne lib (du moins sa version C++). Aucune idée concernant la version python mais l'essentiel reste d'appeler depuis python des routines C/C++ pour rester dans les contraintes temps réel.
vikki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 23h04   #5
afranck64
Membre Expert
 
Avatar de afranck64
 
Homme Franck Awounang N.
Étudiant
Inscription : janvier 2009
Messages : 587
Détails du profil
Informations personnelles :
Nom : Homme Franck Awounang N.
Âge : 21
Localisation : Autre

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2009
Messages : 587
Points : 1 025
Points : 1 025
Envoyer un message via Yahoo à afranck64
Re,
C'est vrai que je suis tombé sur un post disant que PyOpenCV contenant encore beaucoup de bugs. Mais le véritable problème c'est que je ne trouve pas de classe correspondante pour les Caméras. Devrais-je me servir de simples flux-vidéo?

Cordialement, Franck.
__________________
Win 7 HP 64 bits /Ubuntu 12.04, - AMD A6 Quad: Py32 / Py27
Citation:
CONTENU D'UNE QUESTION
Exemples:
- Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
- Code source du morceau de programme où il y a un bogue
- Ligne de code sur laquelle le bogue apparaît
- Erreur complète retournée pas l'interpréteur Python
- Recherche déjà effectuée (FAQ, Tuto, Web, ...)
- Tests déjà effectués
afranck64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2011, 23h52   #6
afranck64
Membre Expert
 
Avatar de afranck64
 
Homme Franck Awounang N.
Étudiant
Inscription : janvier 2009
Messages : 587
Détails du profil
Informations personnelles :
Nom : Homme Franck Awounang N.
Âge : 21
Localisation : Autre

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2009
Messages : 587
Points : 1 025
Points : 1 025
Envoyer un message via Yahoo à afranck64
Re,
Oops, j'avais déconnecté ma cam
__________________
Win 7 HP 64 bits /Ubuntu 12.04, - AMD A6 Quad: Py32 / Py27
Citation:
CONTENU D'UNE QUESTION
Exemples:
- Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
- Code source du morceau de programme où il y a un bogue
- Ligne de code sur laquelle le bogue apparaît
- Erreur complète retournée pas l'interpréteur Python
- Recherche déjà effectuée (FAQ, Tuto, Web, ...)
- Tests déjà effectués
afranck64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 13h12   #7
afranck64
Membre Expert
 
Avatar de afranck64
 
Homme Franck Awounang N.
Étudiant
Inscription : janvier 2009
Messages : 587
Détails du profil
Informations personnelles :
Nom : Homme Franck Awounang N.
Âge : 21
Localisation : Autre

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2009
Messages : 587
Points : 1 025
Points : 1 025
Envoyer un message via Yahoo à afranck64
Bonjour,

Je me suis comme dit plutot a pyOpenCV. Mais j ai un enorme probleme avec. Le sous-lib cvcam specialisee dans la gestions de cams n est pas bindee en Python. Je ne trouve pas de moyens pour utilser plus d une camera avec. Qu importe ce que je fais, je n ai acces qu a une des cameras connectee a la machine. Lorsque je demande par exemple 2 instances de CvCapture avec les index 0 et 1, les deux sont crees mais la seconde ne se met a retourner des images qu une fois la premiere detruite, et de plus les deux retournent les images de la meme camera. Quelqu un aurait une idee?

Cordialement, Franck.
__________________
Win 7 HP 64 bits /Ubuntu 12.04, - AMD A6 Quad: Py32 / Py27
Citation:
CONTENU D'UNE QUESTION
Exemples:
- Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
- Code source du morceau de programme où il y a un bogue
- Ligne de code sur laquelle le bogue apparaît
- Erreur complète retournée pas l'interpréteur Python
- Recherche déjà effectuée (FAQ, Tuto, Web, ...)
- Tests déjà effectués
afranck64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 17h34   #8
afranck64
Membre Expert
 
Avatar de afranck64
 
Homme Franck Awounang N.
Étudiant
Inscription : janvier 2009
Messages : 587
Détails du profil
Informations personnelles :
Nom : Homme Franck Awounang N.
Âge : 21
Localisation : Autre

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2009
Messages : 587
Points : 1 025
Points : 1 025
Envoyer un message via Yahoo à afranck64
Au final, je me suis servis de VideoCapture + mtTkinter(thread-safed Tkinter) + PIL.

un thread se charge du traitement des images, et le second de les afficher. J ai abandonner le Canvas pour le Label car celui est beaucoup plus performant pour afficher une image
__________________
Win 7 HP 64 bits /Ubuntu 12.04, - AMD A6 Quad: Py32 / Py27
Citation:
CONTENU D'UNE QUESTION
Exemples:
- Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
- Code source du morceau de programme où il y a un bogue
- Ligne de code sur laquelle le bogue apparaît
- Erreur complète retournée pas l'interpréteur Python
- Recherche déjà effectuée (FAQ, Tuto, Web, ...)
- Tests déjà effectués
afranck64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h03.


 
 
 
 
Partenaires

Hébergement Web