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 :
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
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()
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 ?
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'
Autre souci rencontré : si je souhaite exécuter mon script une deuxième fois, j'obtiens l'erreur suivante :
Je dois à chaque fois débrancher et rebrancher la webcam pour pouvoir réexécuter mon scripte : sauriez vous à quoi cela pourrait être dû ?
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.
Merci d'avance pour toutes vos remarques ou pour l'aide que vous pourrez m'apporter.
Carote
Partager