Bonjour à tous !!

J'ai commencé depuis peu la programmation en Python et j'aurais besoin d'un peu d'aide concernant le module VideoCapture.

J'essaie donc d'utiliser le module VideoCapture. Mon script est pour le moment assez basique : je souhaite récupérer une image prise par la webcam puis ensuite l'afficher dans un canvas (dans un premier temps). Mon script fonctionne mais je ne comprends par pourquoi j'ai aléatoirement une erreur dans la fonction save. Voici mon code :

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
50
51
52
53
54
55
56
57
58
# -*- coding:Latin-1 -*-
 
# Importation des modules externes nécessaires
from math import *
from Tkinter import *
import ImageTk
from random import *
from VideoCapture import *
 
# Création de la fenêtre principal (fen1)
fen1 = Tk()
 
# Définition de la webcam
cam=Device(devnum=0)
 
# Définition de takePicture
def takePicture():
    "prendre une image avec la webcam et l'afficher dans can1"
    cam.saveSnapshot('image1.jpg', quality=10)
    global photo, flag, im
    photo = ImageTk.PhotoImage(file ='image1.jpg')
    can1.create_image(176, 144, image = photo)
    if flag > 0:
        can1.after(1000, takePicture)
 
def start_it():
    "lancement de la capture"
    global flag
    #if flag ==0:
    flag = 1
    takePicture()
 
def stop_it():
    "arrêt de la capture"
    global flag
    flag = 0
 
# Création du reste de la fenêtre
tex1 = Label(fen1, text='Bienvenue dans mon appli !', fg='red')
tex1.pack(pady=5)
 
can1 = Canvas(fen1, width =352, height =288)
can1.pack(side =TOP, padx =20, pady =10)
 
bou2 = Button(fen1, text ='initialisation', command = start_it)
bou2.pack(side =LEFT, padx =20, pady =5)
bou3 = Button(fen1, text ='démarrage', command = stop_it)
bou3.pack(side =RIGHT, padx =20, pady =5)
ent1 = Entry(fen1)
ent1.bind("<Return>")
ent1.pack(pady =20)
 
# Création du bouton 'Quitter' (bou1)
bou1 = Button(fen1, text='Quitter', command = fen1.destroy)
bou1.pack(pady=5)
 
# Lancement de l'appli
fen1.mainloop()
Voici l'erreur que j'obtiens quand je l'execute :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__
return self.func(*args)
File "C:\Python26\lib\lib-tk\Tkinter.py", line 495, in callit
func(*args)
File "C:\Python26\SLI-M\main.py", line 27, in takePicture
cam.saveSnapshot('image1.jpg', quality=10)
File "C:\Python26\SLI-M\VideoCapture.py", line 193, in saveSnapshot
self.getImage(timestamp, boldfont, textpos).save(filename, **keywords)
AttributeError: 'NoneType' object has no attribute 'save'
Je pensais que mon script essayais parfois de sauvegarder le fichier qu'il était en train d'ouvrir et que cela créait une erreur, mais j'ai diminué la qualité de l'image et le temps d'acquisition et cela ne change rien. L'erreur arrive parfois après 15s d'acquisition, mais des fois après moins d'1s. L'idéal pour moi serait d'utiliser getImage() sans passer par l'enregistrement mais je n'arrive pas à trouver comment faire cela : pourriez vous m'aider pour récupérer l'image (en vue de la manipuler) et l'afficher dans le canevas sans l'enregistrer ?

Autre souci rencontré : si je souhaite exécuter mon script une deuxième fois, j'obtiens l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Traceback (most recent call last):
File "C:\Python26\SLI-M\main.py", line 22, in <module>
cam=Device(devnum=0)
File "C:\Python26\SLI-M\VideoCapture.py", line 49, in __init__
self.dev = vidcap.new_Dev(devnum, showVideoWindow)
Error: Capture Graph could not be created.
Je dois à chaque fois débrancher et rebrancher la webcam pour pouvoir réexécuter mon scripte : sauriez vous à quoi cela pourrait être dû ?

Merci d'avance pour toutes vos remarques ou pour l'aide que vous pourrez m'apporter.

Carote