feat: use webcam

This commit is contained in:
alban 2024-12-15 14:43:20 +01:00
parent 10e8eecd31
commit f3fd7360c3
2 changed files with 38 additions and 7 deletions

View File

@ -2,7 +2,7 @@
## Todo ## Todo
- [ ] Utiliser une webcam en entrée - [x] Utiliser une webcam en entrée
- [x] Créer une interface avec tkinter - [x] Créer une interface avec tkinter
- [x] Variabliser les tailles et couleurs via l'interface - [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** #### 3. **param2**
- **Description** : Seuil pour le processus d'accumulation circulaire (HoughCircles). - **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. - **Conseil** : Augmentez cette valeur pour réduire les faux positifs.
#### 4. **maxRadius** #### 4. **minRadius**
- **Description** : Rayon maximal des cercles détectés. - **Description** : Rayon minimal des cercles détectés.
- **Rôle** : Filtre les cercles dont le rayon est inférieur à cette valeur. - **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. - **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. - **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. - **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. - **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. - **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. - **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.

View File

@ -13,6 +13,35 @@ dir_path = Path(".").absolute()
TYPE_1 = "_________" TYPE_1 = "_________"
TYPE_2 = "___ ___" 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 @dataclass
class Object: class Object:
@ -48,8 +77,10 @@ def process_frame(params):
)(params) )(params)
# 1. Acquisition de l'image # 1. Acquisition de l'image
src = dir_path.joinpath('tests/images/balls-full-small.jpg') # src = dir_path.joinpath('tests/images/balls-full-small.jpg')
raw_image = cv2.imread(str(src)) # raw_image = cv2.imread(str(src))
raw_image = capture_frame_from_webcam()
# 2. Boxing des objets via opencv # 2. Boxing des objets via opencv
gray = cv2.cvtColor(raw_image, cv2.COLOR_BGR2GRAY) gray = cv2.cvtColor(raw_image, cv2.COLOR_BGR2GRAY)