La simulation d’un processus dans le domaine de la vision par ordinateur peut inclure plusieurs étapes, allant de la capture d’images à l’analyse et au traitement de ces images. Pour illustrer cela, nous allons développer un code Python qui effectue une tâche courante en vision par ordinateur : la détection d’objets. Nous utiliserons la bibliothèque OpenCV pour la manipulation des images et la bibliothèque YOLO (You Only Look Once) pour la détection d’objets.
### Étapes du Processus
1. Installation des Bibliothèques
2. Capture d’Image
3. Chargement du Modèle YOLO
4. Détection d’Objets
5. Affichage des Résultats
### Installation des Bibliothèques
Avant de commencer, assurez-vous d’installer les bibliothèques nécessaires. Vous pouvez les installer via pip :
« `bash
pip install opencv-python
pip install numpy
« `
### Code Python
« `python
import cv2
import numpy as np
# Charger le modèle YOLO
net = cv2.dnn.readNet(« yolov3.weights », « yolov3.cfg »)
layer_names = net.getLayerNames()
output_layers = [layer_names[i[0] – 1] for i in net.getUnconnectedOutLayers()]
# Fonction pour dessiner les boîtes de délimitation et les étiquettes
def draw_bounding_box(img, class_id, confidence, x, y, x_plus_w, y_plus_h):
label = str(classes[class_id])
color = COLORS[class_id]
cv2.rectangle(img, (x, y), (x_plus_w, y_plus_h), color, 2)
cv2.putText(img, label, (x – 10, y – 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)
# Liste des classes que YOLO peut détecter
classes = []
with open(« coco.names », « r ») as f:
classes = [line.strip() for line in f.readlines()]
# Couleurs pour chaque classe
COLORS = np.random.uniform(0, 255, size=(len(classes), 3))
# Capturer une image depuis la webcam
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
height, width, channels = frame.shape
# Préparer l’image pour le modèle YOLO
blob = cv2.dnn.blobFromImage(frame, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
net.setInput(blob)
outs = net.forward(output_layers)
# Initialiser des variables pour les boîtes de délimitation et les confiances
class_ids = []
confidences = []
boxes = []
# Traiter les sorties du modèle
for out in outs:
for detection in out:
scores = detection[5:]
class_id = np.argmax(scores)
confidence = scores[class_id]
if confidence > 0.5:
# Calculer les coordonnées de la boîte de délimitation
center_x = int(detection[0] width)
center_y = int(detection[1] height)
w = int(detection[2] width)
h = int(detection[3] height)
x = int(center_x – w 2)
y = int(center_y – h 2)
class_ids.append(class_id)
confidences.append(float(confidence))
boxes.append([x, y, w, h])
# Appliquer la suppression des boîtes en double
indices = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)
# Dessiner les boîtes de délimitation et les étiquettes
for i in indices:
i = i[0]
box = boxes[i]
x = box[0]
y = box[1]
w = box[2]
h = box[3]
draw_bounding_box(frame, class_ids[i], confidences[i], x, y, x + w, y + h)
# Afficher l’image avec les résultats
cv2.imshow(« Frame », frame)
# Quitter la boucle si la touche ‘q’ est pressée
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break
# Libérer la webcam et fermer toutes les fenêtres d’affichage
cap.release()
cv2.destroyAllWindows()
« `
### Explication du Code
1. Chargement du Modèle YOLO : Nous chargeons le modèle YOLO et les fichiers de configuration nécessaires.
2. Fonction de Dessin : Une fonction est définie pour dessiner les boîtes de délimitation autour des objets détectés et pour afficher les étiquettes correspondantes.
3. Capturer une Image : Nous capturons des images en temps réel depuis la webcam.
4. Préparation de l’Image : L’image capturée est préparée pour être passée au modèle YOLO.
5. Détection d’Objets : Le modèle YOLO est utilisé pour détecter les objets dans l’image.
6. Suppression des Boîtes en Double : Nous appliquons une méthode de suppression des boîtes en double pour filtrer les