IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Affichage des résultats du sondage: Python est-il adéquat au traitement d'images à "grande vitesse"?

Votants
8. Vous ne pouvez pas participer à ce sondage.
  • Oui

    5 62,50%
  • Possible

    3 37,50%
  • J'en doute

    0 0%
  • Non

    0 0%
Programmation multimédia/Jeux Python Discussion :

Capture + Traitement d'images avec Python ?


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre averti Avatar de vikki
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 292
    Points : 302
    Points
    302
    Par défaut
    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)

  3. #3
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    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.

    @+

  4. #4
    Membre averti Avatar de vikki
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 292
    Points : 302
    Points
    302
    Par défaut
    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.

  5. #5
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    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.

  6. #6
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Re,
    Oops, j'avais déconnecté ma cam

  7. #7
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    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.

  8. #8
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. traitement d'image avec python
    Par chilo113 dans le forum Général Python
    Réponses: 1
    Dernier message: 27/11/2013, 09h10
  2. Traitement d'image avec Python sans modules
    Par kevgen dans le forum Général Python
    Réponses: 4
    Dernier message: 23/11/2010, 01h02
  3. Traitement de texte avec Python
    Par eyquem dans le forum Général Python
    Réponses: 3
    Dernier message: 07/02/2007, 10h48
  4. Traitement d'images avec c++
    Par Vinch006 dans le forum C++
    Réponses: 15
    Dernier message: 23/08/2006, 23h53
  5. Capture d'une image avec une webcam
    Par Freyja dans le forum Linux
    Réponses: 2
    Dernier message: 09/08/2006, 13h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo