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