From f3fd7360c3e5b5fe88618076fbf93f4f6b06bd78 Mon Sep 17 00:00:00 2001 From: alban Date: Sun, 15 Dec 2024 14:43:20 +0100 Subject: [PATCH] feat: use webcam --- README.md | 10 +++++----- process.py | 35 +++++++++++++++++++++++++++++++++-- 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index fcd5a89..c251ba5 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## Todo -- [ ] Utiliser une webcam en entrée +- [x] Utiliser une webcam en entrée - [x] Créer une interface avec tkinter - [x] Variabliser les tailles et couleurs via l'interface @@ -42,11 +42,11 @@ L'interface graphique **Yiking** permet de contrôler divers paramètres pour un #### 3. **param2** - **Description** : Seuil pour le processus d'accumulation circulaire (HoughCircles). -- **Rôle** : Détermaxe la robustesse de la détection des cercles. Une valeur élevée garantit que seuls les cercles bien définis seront détectés. +- **Rôle** : Détermine la robustesse de la détection des cercles. Une valeur élevée garantit que seuls les cercles bien définis seront détectés. - **Conseil** : Augmentez cette valeur pour réduire les faux positifs. -#### 4. **maxRadius** -- **Description** : Rayon maximal des cercles détectés. +#### 4. **minRadius** +- **Description** : Rayon minimal des cercles détectés. - **Rôle** : Filtre les cercles dont le rayon est inférieur à cette valeur. - **Conseil** : Utilisez une valeur basse si vous souhaitez détecter de petits cercles. @@ -55,7 +55,7 @@ L'interface graphique **Yiking** permet de contrôler divers paramètres pour un - **Rôle** : Filtre les cercles dont le rayon dépasse cette valeur. - **Conseil** : Réglez cette valeur en fonction de la taille des cercles que vous recherchez. -#### 6. **color1_R_max, color1_V_max, color1_B_max, color1_R_max, color1_V_max, color1_B_max,** +#### 6. **color1_R_min, color1_R_max, color1_V_min, color1_V_max, color1_B_min, color1_B_max** - **Description** : Couleur en (Rouge, Vert, Bleu) avec des valeurs minimales et maximales pour le filtrage par couleur. - **Rôle** : Définit un seuil bas et un seuil haut pour détecter uniquement les pixels correspondants à une certaine teinte. - **Conseil** : Ajustez ces valeurs pour isoler une couleur d'intérêt. Toute teinte en dehors de cette plage sera affectée à l'autre couleur. diff --git a/process.py b/process.py index 2517505..deef6a8 100644 --- a/process.py +++ b/process.py @@ -13,6 +13,35 @@ dir_path = Path(".").absolute() TYPE_1 = "_________" TYPE_2 = "___ ___" +import cv2 + + +def capture_frame_from_webcam(): + """ + Captures a single frame from the webcam. + + Returns: + frame (numpy.ndarray): The captured frame as a NumPy array. + """ + # Open a connection to the default webcam (index 0) + cap = cv2.VideoCapture(0) + + if not cap.isOpened(): + raise Exception("Could not open webcam. Please check your webcam connection.") + + try: + # Capture a single frame + ret, frame = cap.read() + + if not ret: + raise Exception("Failed to capture frame from webcam.") + + return frame + finally: + # Release the webcam resource + cap.release() + + @dataclass class Object: @@ -48,8 +77,10 @@ def process_frame(params): )(params) # 1. Acquisition de l'image - src = dir_path.joinpath('tests/images/balls-full-small.jpg') - raw_image = cv2.imread(str(src)) + # src = dir_path.joinpath('tests/images/balls-full-small.jpg') + # raw_image = cv2.imread(str(src)) + + raw_image = capture_frame_from_webcam() # 2. Boxing des objets via opencv gray = cv2.cvtColor(raw_image, cv2.COLOR_BGR2GRAY)