From 1926de949392e5188e816355e271ff989a078598 Mon Sep 17 00:00:00 2001 From: Paul Chevalier <paul.guillaume.chevalier@gmail.com> Date: Wed, 26 Mar 2025 21:39:59 +0100 Subject: [PATCH] ajout du code perdu --- code_perdu.py | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 code_perdu.py diff --git a/code_perdu.py b/code_perdu.py new file mode 100644 index 0000000..0dbb4d7 --- /dev/null +++ b/code_perdu.py @@ -0,0 +1,98 @@ +import cv2 +import tkinter as tk +from tkinter import ttk +from PIL import Image, ImageTk +import threading + +class CameraSelector: + def __init__(self, root): + self.root = root + self.root.title("Sélection de caméra") + self.cameras = [] + self.current_camera = None + self.video_source = None + + # Détection des caméras disponibles + self.detect_cameras() + + # Interface graphique + self.create_widgets() + + def detect_cameras(self): + """Détecte toutes les caméras disponibles jusqu'à l'index 10""" + self.cameras = [] + for i in range(10): # Vous pouvez augmenter ce nombre si nécessaire + cap = cv2.VideoCapture(i) + if cap.isOpened(): + self.cameras.append(i) + cap.release() + + def create_widgets(self): + """Crée l'interface utilisateur""" + # Cadre principal + main_frame = ttk.Frame(self.root, padding=10) + main_frame.pack() + + # Sélection de caméra + ttk.Label(main_frame, text="Caméras détectées:").pack() + self.camera_var = tk.StringVar() + self.cam_selector = ttk.Combobox(main_frame, textvariable=self.camera_var) + self.cam_selector['values'] = [f"Caméra {i}" for i in self.cameras] + self.cam_selector.pack(pady=5) + + # Bouton de confirmation + ttk.Button(main_frame, text="Ouvrir", command=self.start_camera).pack(pady=5) + + # Zone d'affichage vidéo + self.video_label = ttk.Label(main_frame) + self.video_label.pack() + + def start_camera(self): + """Démarre le flux vidéo de la caméra sélectionnée""" + if self.current_camera is not None: + self.stop_camera() + + selected = self.cam_selector.current() + if selected == -1: + return + + self.video_source = self.cameras[selected] + self.current_camera = cv2.VideoCapture(self.video_source) + + # Démarrer l'affichage vidéo dans un thread séparé + self.thread = threading.Thread(target=self.show_video) + self.thread.daemon = True + self.thread.start() + + def show_video(self): + """Affiche le flux vidéo dans le label""" + while self.current_camera.isOpened(): + ret, frame = self.current_camera.read() + if ret: + # Conversion de l'image pour Tkinter + frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) + img = Image.fromarray(frame) + imgtk = ImageTk.PhotoImage(image=img) + + # Mise à jour de l'interface + self.video_label.configure(image=imgtk) + self.video_label.image = imgtk + else: + break + + def stop_camera(self): + """Arrête le flux vidéo""" + if self.current_camera is not None: + self.current_camera.release() + self.video_label.configure(image='') + self.video_label.image = None + + def on_close(self): + self.stop_camera() + self.root.destroy() + +if __name__ == "__main__": + root = tk.Tk() + app = CameraSelector(root) + root.protocol("WM_DELETE_WINDOW", app.on_close) + root.mainloop() \ No newline at end of file -- GitLab