begin process at 2012 05 24 00:36:51
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > GESTION ET AFFICHAGE DE DEUX WEBCAMS (VIDEOCAPTURE + PIL)

GESTION ET AFFICHAGE DE DEUX WEBCAMS (VIDEOCAPTURE + PIL)


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Graphique Classé sous :webcam, timer, tkinter Niveau :Débutant Date de création :15/07/2006 Vu :4 385

Auteur : raoullevert

Ecrire un message privé
Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

 Description

Un simple bout de code que j'ai réalisé. En fait c'est le debut d'un projet de stereo vision.
Le code n'est pas franchement optimisé, et c'etais pour moi uniquement un moyen d'apprendre le python.

Ce code cherche les deux premieres sources video, et les affiche dans les deux canvas du haut (gauche et droite)
Les deux canvas du bas affiche ces video apres application d'un filtre de detection de contours.


Source

  • from VideoCapture import Device
  • from PIL import Image, ImageTk
  • import ImageFilter
  • from Tkinter import *
  • import time
  • class Affichage(Frame):
  • """ Affiche L'image Calculee """
  • def __init__(self, parent, temps="0:0:0"):
  • Frame.__init__(self, parent)
  • self.parent = parent
  • self.CameraGauche = Device(devnum = 0, showVideoWindow =0)
  • self.CameraDroite = Device(devnum = 1, showVideoWindow =0)
  • self.AffichageG = Canvas(self, width = 320, height = 240)
  • self.AffichageD = Canvas(self, width = 320, height = 240)
  • self.ResultG = Canvas(self, width = 320, height = 240)
  • self.ResultD = Canvas(self, width = 320, height = 240)
  • self.AffichageG.grid(row=1, column=1)
  • self.AffichageD.grid(row=1, column=2)
  • self.ResultG.grid(row=2, column=1)
  • self.ResultD.grid(row=2, column=2)
  • self.Rafraichis()
  • def Rafraichis(self):
  • self.PhotoGauche = self.CameraGauche.getImage()
  • self.PhotoDroite = self.CameraDroite.getImage()
  • self.ImageGauche = ImageTk.PhotoImage(self.PhotoGauche)
  • self.ImageDroite = ImageTk.PhotoImage(self.PhotoDroite)
  • self.AffichageG.create_image(160,120, image = self.ImageGauche)
  • self.AffichageD.create_image(160,120, image = self.ImageDroite)
  • self.PhotoGauche = self.PhotoGauche.filter(ImageFilter.FIND_EDGES)
  • self.PhotoDroite = self.PhotoDroite.filter(ImageFilter.FIND_EDGES)
  • self.PhotoDroite = self.PhotoDroite.filter(ImageFilter.SMOOTH_MORE)
  • self.PhotoGauche = self.PhotoGauche.filter(ImageFilter.SMOOTH_MORE)
  • self.CalculGauche = ImageTk.PhotoImage(self.PhotoGauche)
  • self.CalculDroite = ImageTk.PhotoImage(self.PhotoDroite)
  • self.ResultG.create_image(160,120,image = self.CalculGauche)
  • self.ResultD.create_image(160,120,image = self.CalculDroite)
  • self.parent.after(100, self.Rafraichis)
  • root = Tk()
  • root.title('Vision Stereo ....')
  • Rendu = Affichage(root)
  • Rendu.pack()
  • root.mainloop()
from   VideoCapture import Device
from   PIL          import Image, ImageTk
import ImageFilter
from   Tkinter      import *
import time

class Affichage(Frame):
    """ Affiche L'image Calculee """

    def __init__(self, parent, temps="0:0:0"):
        Frame.__init__(self, parent)
        self.parent = parent
        
        self.CameraGauche = Device(devnum = 0, showVideoWindow =0)
        self.CameraDroite = Device(devnum = 1, showVideoWindow =0)

        self.AffichageG = Canvas(self, width = 320, height = 240)
        self.AffichageD = Canvas(self, width = 320, height = 240)
        self.ResultG    = Canvas(self, width = 320, height = 240)
        self.ResultD    = Canvas(self, width = 320, height = 240)     
        self.AffichageG.grid(row=1, column=1)
        self.AffichageD.grid(row=1, column=2)
        self.ResultG.grid(row=2, column=1)
        self.ResultD.grid(row=2, column=2)
        self.Rafraichis()

    def Rafraichis(self):                                
        self.PhotoGauche  = self.CameraGauche.getImage()
        self.PhotoDroite  = self.CameraDroite.getImage()
        
        self.ImageGauche = ImageTk.PhotoImage(self.PhotoGauche)
        self.ImageDroite = ImageTk.PhotoImage(self.PhotoDroite)
        
        self.AffichageG.create_image(160,120, image = self.ImageGauche)
        self.AffichageD.create_image(160,120, image = self.ImageDroite)

        self.PhotoGauche = self.PhotoGauche.filter(ImageFilter.FIND_EDGES)
        self.PhotoDroite = self.PhotoDroite.filter(ImageFilter.FIND_EDGES)

        self.PhotoDroite = self.PhotoDroite.filter(ImageFilter.SMOOTH_MORE)
        self.PhotoGauche = self.PhotoGauche.filter(ImageFilter.SMOOTH_MORE)

        
        self.CalculGauche = ImageTk.PhotoImage(self.PhotoGauche)   
        self.CalculDroite = ImageTk.PhotoImage(self.PhotoDroite)   
        
        self.ResultG.create_image(160,120,image = self.CalculGauche)
        self.ResultD.create_image(160,120,image = self.CalculDroite)

        self.parent.after(100, self.Rafraichis)
        
        
    
root = Tk()
root.title('Vision Stereo ....')

Rendu = Affichage(root)
Rendu.pack()

root.mainloop()

 Conclusion

Petite explication :
--J'ai fait un dérivation de la classe Frame. Ca parait étrange, mais j'avais des soucis lors du lancement de root.mainloop(). L'affichage ne se mettais pas a jour ! J'ai donc mis l'appel a cette boucle dans a la fin de ma fonction d'affichage, mais l'occupation processeur grimpais au fur et a mesure (suis un boulet, je sais ;-) )
   N'ayant pas trouver le moyen de creer un 'timer', qui interompt la boucle Tk, pour recuperer les images et les filter, je me suis dis qu'en tant que widget, ma classe serais rafraichie durant la mainloop(). J'ai ajouter une fonction Rafraichis(), qui est appelée toute les 100ms, grace a la fonction after(). C'est peu etre pas très élégant, mais ca fonctionne bien!

--Quand au reste du code : Apres définition des deux Webcam (Device 0&1), je recupere les images : GetImage()
  Puis je transforme les images PIL en image TL , pour l'afficher dans mes canvas.
  (Photo : PIL & Image : Tk), apres éventuellement application du filtre ImageFilter.FIND_EDGES.


C'est assez lent, et si quelqu'un a des idée , n'hésitez pas.
Je posterais le programme complet quand j'aurais finis l'algo permettant de passer des deux images, a une image representant la distance calculée de chaque pixel par rapport aux webcams.
(D'ailleurs si quelqu'un a une idée sur comment faire la correlation rapidement, je suis preneur !)


 Sources du même auteur

TABLEAU DE SOMMES POUR LE KAKURO

 Sources de la même categorie

Source avec Zip Source avec une capture JEU DE LA VIE SIMPLE ET GRAPHIQUE (TKINTER) EN PYTHON 3 par sodawil
Source avec Zip Source avec une capture PROGRAMMATION par grephit
Source avec Zip Source avec une capture EDITEUR DESSIN par grephit
Source avec Zip Source avec une capture PORTRAIT ROBOT par grephit
Source avec Zip ROTRING SCRIPT DESSIN par grephit

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture ISOLA - MON PREMIER PROGRAMME PYTHON 3 par Debiars
Source avec Zip Source avec une capture JEU DE LA VIE SIMPLE ET GRAPHIQUE (TKINTER) EN PYTHON 3 par sodawil
Source avec Zip TPYCODE, TRADUCTEUR DE CODE par jonathan33350
TAQUIN 4*4 par fredericfabry
Source avec Zip CALCULATRICE SIMPLICISTE SOUS TKINTER par elnabo

Commentaires et avis

Commentaire de daviddubois le 05/11/2010 17:13:34 10/10

Bonjour,

Est-il possible de faire la même chose avec 3 caméras ?

Merci encore.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

scrollbar dans scrollbox avec TKinter [ par MHI ] Est-ce que quelqu'un sait comment ajouter les scrollbar à une scrollbox :J'ai essayé ceci :lstFile = Tkinter.Listbox(frmMain)lstFile.place(x = 20, y = checkButton avec TKinter [ par MHI ] comment faire pour tester si un checkButton est coché ? WebCam [ par DoudouBidou ] Après plusieurs recherche je n'ai pas trouvé de script python capable de diffusé une webcam sur un réseaudonc je lance le débat, est-il possible de ré Probleme avec TKinter [ par titasse ] Bonjour, je debute en python. J'ai un probleme lorsque je veux importer TKinter avec la commande from TKinter import * j'ai le message suivant : Imp au sujet de Tkinter et le module turtle [ par nico1900 ] from turtle import *forward(120)left(90) color('red') forward(80)bon en fait je voulais tester le module turtle avec l e code ci-d Un Canvas comme dans Tkinter, mais pour wxPython [ par samurize ] Slt tout le monde.   Voila tout est dans le titre (ou a peu pres  ) :   Je suis à la recherche d'un module pouvant s'integrer da Taille de widgets sous Tkinter [ par Uims ] Bonjour, Quelqu"un saurait comment definir la taille d'un widgets sous tkinter??? Exemple: fen 1 = Tk(taille=600) J'espere que je me fait comprend Ouverture d'un fichier windows (avec Tkinter) [ par Uims ] Bonjour, Je travaille sous python et Tkinter et j'aurai voulu savoir comment dire a python de demarrer (comme on clique sur un fichier) une applicati Tkinter et Python [ par Telimektar1er ] Voila j'ai commencé e python il y a une semaine et jusqu à aujourd'hui aucun problème. Mais voilà, je viens de commencer la cr&#23 help, faire un mastermind en python et en tkinter avant le 24 !!! [ par Crick132 ] je suis étudiante en 2ème année, je dois réaliser un mastermind en python avec 8 couleurs et 5 combinaisons possibles.si quelqu'un


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,747 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales