Whatsapp Telegram Telegram Call Anrufen

Praktisches Projekt: Instanzsegmentierung und Visualisierung mit YOLOv8 in Python


1. Importieren der Bibliotheken

import os
from ultralytics import YOLO
import ultralytics

import cv2
import torch
import matplotlib.pyplot as plt

import random 
import numpy as np 

from PIL import Image, ImageDraw
import glob

Hier werden verschiedene Bibliotheken importiert, die für:

  • Dateiverarbeitung (os, glob)
  • Handhabung des YOLO-Modells (ultralytics)
  • Bildverarbeitung (cv2, PIL)
  • Plotten (matplotlib)
  • Zufallswahl und Array-Verarbeitung (random, numpy)
  • PyTorch für Tensoroperationen (torch) notwendig sind.

2. Laden des Modells und Vorhersagen

Sie Finden den Modell hier Yolov8m-seg.pt 

Wir nutzen diese Foto:

image Insrtance sementation bevor Umestzung des Modells



model = YOLO("yolov8m-seg.pt")
results = model.predict(source = "people.jpg", save=True, classes = [0])


Ausgabe:

Ausgabe:
image 1/1 C:\programe\Instance Segmentattion\people.jpg: 640x448 8 persons, 842.9ms
Speed: 3.0ms preprocess, 842.9ms inference, 15.0ms postprocess per image at shape (1, 3, 640, 448)
Results saved to runs\segment\predict
  • Ein YOLOv8-Modell für Segmentierung (yolov8m-seg.pt) wird geladen.
  • Das Modell wird verwendet, um Vorhersagen auf dem Bild people.jpg zu treffen und die Ergebnisse zu speichern.
  • classes = [0] gibt an, dass nur die Klasse "Person" von Interesse ist.
  • Die Ausgabe zeigt:

    • Den Pfad und die Abmessungen des Bildes.
    • Anzahl der erkannten Personen (8 Personen).
    • Zeit für Vorverarbeitung, Inferenz und Nachverarbeitung.
    • Das Verzeichnis, in dem die Ergebnisse gespeichert sind (runs\segment\predict).

    3. Anzeigen eines zufällig ausgewählten Ergebnisbildes

    result_dir = 'runs\segment\predict'
    
    plt.figure(figsize =(20,12))
    image_names = glob.glob(os.path.join(result_dir,'*.jpg'))
    
    image_name = random.choice(image_names)
    image = Image.open(image_name)
    image


    Ausgabe:

    image Insrtance sementation nach Umsetzung des Modells
    • Das Verzeichnis mit den gespeicherten Ergebnissen wird angegeben.
    • Eine Liste der Ergebnisbilder wird mit glob erhalten.
    • Ein zufälliges Bild aus den Ergebnissen wird ausgewählt und mit PIL angezeigt.

    4. Überprüfen der Ergebnisse

    len(results[:])
    result = results[0]
    len(result)
    
    # Ausgabe
    # 1
    # 8
    • Überprüft die Anzahl der Ergebnisse, was 1 ergibt (ein Bild wurde verarbeitet).
    • Extrahiert das Ergebnis für das erste Bild.
    • Die Länge des Ergebnisses zeigt die Anzahl der erkannten Objekte (8 Personen).

    5. Zugriff auf Masken

    masks = result.masks
    len(masks)
    # Ausgabe:
    # 8
    
    • masks enthält die Segmentierungsmasken für alle erkannten Objekte.
    • len(masks) bestätigt 8 Masken, entsprechend den 8 erkannten Personen.

    5.1  Anzeigen einer Maske

    mask1 = masks[0]
    
    mask = mask1.data[0].numpy()
    polygon = mask1.xy[0]
    mask_img = Image.fromarray(mask, "I")
    Mask_img

    Ausgabe:

    image Insrtance sementation Anzeigen einer Maske
    • Greift auf die erste Maske (mask1) zu.
    • Konvertiert die Maskendaten in ein NumPy-Array und erstellt ein Bild daraus.
    • polygon enthält die Randkoordinaten der Maske.

    5.2. Zeichnen des Polygons auf dem Originalbild

    img = Image.open("people.jpg")
    draw = ImageDraw.Draw(img)
    
    draw.polygon(polygon, fill = (255,0,0), outline= (0,255,0),width=5)
    
    Img
    

    Ausgabe:

    image Insrtance sementation Zeichnen des Polygons auf dem Originalbild


    • Öffnet das Originalbild.
    • Zeichnet das Polygon (Maske) auf das Bild mit den angegebenen Füll- und Umrissfarben.

    5.3 Wiederholen für eine andere Maske

    mask2 = masks[1]
    mask2 = mask2.cpu()
    
    mask = mask2.data[0].numpy()
    polygon = mask2.xy[0]
    mask_img = Image.fromarray(mask, "I")
    mask_img

    Ausgabe: 

    image Insrtance sementation Maske

    • Ähnliche Schritte werden für die zweite Maske wiederholt.
    draw.polygon(polygon, fill = (0,255,0), outline= (255,0,0),width=5)
    Img
    


    Ausgabe: 

    image Insrtance sementation Zeichnen des Polygons auf dem Originalbild


    • Zeichnet das zweite Polygon auf das Bild mit verschiedenen Farben.


    Zusammenfassung

    Dieses Projekt führt die Instanzsegmentierung auf einem Bild mit YOLOv8 durch, speichert die Ergebnisse und visualisiert die Segmentierungsmasken durch das Zeichnen von Polygonen auf dem Originalbild. Die Masken werden einzeln abgerufen und angezeigt, wodurch gezeigt wird, wie man mit den einzelnen Segmentierungsergebnissen umgeht und diese visualisiert.








    CEO Image

    Ali Ajjoub

    info@ajjoub.com

    Adresse 0049-15773651670

    Adresse Jacob-winter-platz,1 01239 Dresden

    Buchen Sie jetzt Ihren Termin für eine umfassende und individuelle Beratung.

    Termin Buchen

    Kontaktieren Sie uns

    Lassen Sie uns K o n t a k t aufnehmen!