PERFORMING L’ANNOTATION D’IMAGES À L’AIDE DE PYTHON ET OPEN-CV
L’annotation d’images est une tâche fondamentale pour la détection d’objets en deep learning. En effet, dans le processus de détection d’objets, il est primordial de localiser les objets spécifiques dans une image donnée. Par exemple, on peut détecter les voitures dans une image et ainsi, déterminer le nombre total de voitures présentes dans celle-ci. Cette tâche peut se révéler essentielle dans des domaines tels que l’analyse du flux de trafic à un carrefour spécifique.
POURQUOI L’ANNOTATION D’IMAGE EST-ELLE IMPORTANTE ?
Afin de former un modèle de deep learning pour détecter des objets spécifiques, il est nécessaire d’alimenter le modèle avec un ensemble d’images d’entraînement, avec les coordonnées de l’objet spécifique dans les images toutes cartographiées. Ce processus est appelé annotation d’images. Cette annotation affecte des étiquettes aux objets présents dans une image, avec les objets tous marqués. En d’autres termes, elle permet de délimiter les régions d’intérêt d’une image.
COMMENT ANNOTER UNE IMAGE À L’AIDE DE PYTHON ET OPEN-CV
Dans cet article, nous allons découvrir comment annoter une image en utilisant Python et OpenCV. Pour commencer, créez un fichier texte et nommez-le bounding.py. Ensuite, ajoutez les déclarations suivantes :
Import argparse
Import cv2
ap = argparse.ArgumentParser()
ap.add_argument(“-i”, “–image”, required = True, help = “Path to image”)
args = vars(ap.parse_args())
Ensuite, la commande est entrée dans le terminal suivant :
$ python bounding.py -i Cabs.jpg
L’image devrait maintenant être affichée. Le programme permet aux utilisateurs de cliquer sur l’image à l’aide de leur souris et de sélectionner une région d’intérêt (ROI), en faisant glisser leur curseur. Pour ce faire, il faut ajouter deux variables globales dans le programme, intégrer la fonction draw_rectangle () en tant que gestionnaire de clics de souris, et ajouter les déclarations suivantes :
# Pour stocker les points pour la région d’intérêt
roi_pt = []
# Pour indiquer si le bouton gauche de la souris est enfoncé
is_button_down = False
Le programme enregistre le premier point de la ROI lorsque le bouton gauche de la souris est enfoncé, et le point final de la ROI est enregistré lorsque l’utilisateur relâche le bouton gauche de la souris. Les coordonnées de la ROI et de la boîte de délimitation associée seront également affichées. Pour cela, les déclarations suivantes doivent être ajoutées :
# Dans le format (x1, y1, x2, y2)
print(roi_pt)
# Dans le format (x, y, w, h)
bbox = (roi_pt[0] [0], roi_pt[0] [1], roi_pt[1] [0] – roi_pt[0] [0], roi_pt[1] [1] – roi_pt[0] [1])
print(bbox)
Enfin, pour dessiner un rectangle autour de la ROI, ajoutez les déclarations suivantes :
# Pour connecter les événements de souris avec leur gestionnaire d’événements
cv2.namedWindow(“image”)
cv2.setMouseCallback(“image”, draw_rectangle)
Pour résumer, ci-dessous le code complet en Python qui permet d’annoter une image :
Import argparse, cv2
roi_pt = []
is_button_down = False
def draw_rectangle(event, x, y, flags, param):
global roi_pt, is_button_down
if event == cv2.EVENT_MOUSEMOVE and is_button_down:
global image_clone, image
image = image_clone.copy()
cv2.rectangle(image, roi_pt[0], (x,y), (0, 255, 0), 2)
elif event == cv2.EVENT_LBUTTONDOWN:
roi_pt = [(x, y)]
is_button_down = True
elif event == cv2.EVENT_LBUTTONUP:
roi_pt.append((x, y))
print(roi_pt)
bbox = (roi_pt[0][0],roi_pt[0][1],roi_pt[1][0] – roi_pt[0][0],roi_pt[1][1] – roi_pt[0][1])
print(bbox)
is_button_down = False
cv2.rectangle(image, roi_pt[0], roi_pt[1], (0, 255, 0), 2)
ap = argparse.ArgumentParser()
ap.add_argument(“-i”, “–image”, required = True, help = “Path to image”)
args = vars(ap.parse_args())
image = cv2.imread(args[“image”])
image_clone = image
cv2.namedWindow(“image”)
cv2.setMouseCallback(“image”, draw_rectangle)
while True:
cv2.imshow(“image”, image)
key = cv2.waitKey(1)
if key == ord(“c”):
break
cv2.destroyAllWindows()
CONCLUSION
Même s’il existe plusieurs outils d’annotation d’images conçus pour faciliter cette tâche, Python et Open-CV restent une solution simple et assez efficace pour annoter des images. Les outils d’annotation d’images offrent un libre choix des modèles de données pour les applications de deep learning, contrairement à ceux pré-câblés. N’hésitez pas à essayer cet outil pour vos applications et n’hésitez pas à ajouter vos propres fonctionnalités (telles que l’exportation de coordonnées de la ROI dans un fichier externe).