6.
Reconnaissance d'objets dans des images avec un modèle de Deep Learning
(yolo)
Énoncé :
Utiliser un modèle de deep learning pré-entrainé comme YOLO pour effectuer la détection
d'objets dans une image.
Solution :
python
Copier
import cv2
import numpy as np
# Charger le modèle pré-entrainé YOLO
yolo_net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg")
layer_names = yolo_net.getLayerNames()
output_layers = [layer_names[i - 1] for i in
yolo_net.getUnconnectedOutLayers()]
# Charger l'image
image = cv2.imread("image.jpg")
height, width, channels = image.shape
# Convertir l'image en un blob pour la passer au modèle
blob = cv2.dnn.blobFromImage(image, 0.00392, (416, 416), (0, 0, 0), True,
crop=False)
yolo_net.setInput(blob)
# Exécuter la détection d'objets
outs = yolo_net.forward(output_layers)
# Analyser les résultats
class_ids = []
confidences = []
boxes = []
for out in outs:
for detection in out:
scores = detection[5:]
class_id = np.argmax(scores)
confidence = scores[class_id]
if confidence > 0.5: # Seuillage de confiance
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)
boxes.append([x, y, w, h])
confidences.append(float(confidence))
class_ids.append(class_id)
# Application de la suppression non-maximale pour éviter les doublons
indices = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)
# Afficher les objets détectés sur l'image
with open("coco.names", "r") as f:
classes = [line.strip() for line in f.readlines()]
for i in indices.flatten():
x, y, w, h = boxes[i]
label = str(classes[class_ids[i]])
cv2.rectangle(image, (x, y), (x + w, y + h), (255, 0, 0), 2)
cv2.putText(image, label, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5,
(0, 255, 0), 2)
# Affichage de l'image
cv2.imshow("Detected Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Explication :
Ce programme utilise le modèle YOLOv3 pour la détection d'objets dans une image.
YOLO est un modèle de deep learning rapide pour la détection d'objets, capable de
localiser et classifier plusieurs objets dans une image en un seul passage.
Après avoir chargé l'image et effectué la détection d'objets, les résultats sont affichés
en traçant des rectangles autour des objets détectés et en annotant chaque rectangle
avec le nom de l'objet.
Ces programmes couvrent une variété de domaines avancés en Python, notamment
l'optimisation combinatoire, les algorithmes d'intelligence artificielle, le deep learning et le
traitement d'images. Ces exemples peuvent être adaptés à des cas d'utilisation plus spécifiques
selon vos besoins.