Overslaan naar inhoud

Inferentieresultaten bekijken in een terminal

Sixel voorbeeld van afbeelding in Terminal

Afbeelding van de libsixel website.

Motivatie

Wanneer je verbinding maakt met een machine op afstand, is het visualiseren van beeldresultaten normaal gesproken niet mogelijk of moet je gegevens verplaatsen naar een lokaal apparaat met een GUI. Met de geĆÆntegreerde terminal van VSCode kunnen afbeeldingen direct worden weergegeven. Dit is een korte demonstratie van hoe je dit kunt gebruiken in combinatie met ultralytics met voorspellingsresultaten.

Waarschuwing

Alleen compatibel met Linux en MacOS. Controleer de VSCode opslagplaatscontroleer Statusof documentatie voor updates over Windows-ondersteuning om afbeeldingen te bekijken in terminal met sixel.

De VSCode-compatibele protocollen voor het bekijken van afbeeldingen met de geĆÆntegreerde terminal zijn sixel en iTerm. Deze handleiding demonstreert het gebruik van de sixel protocol.

Proces

  1. Eerst moet je de instellingen inschakelen terminal.integrated.enableImages en terminal.integrated.gpuAcceleration in VSCode.

    "terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on"
    "terminal.integrated.enableImages": false
    

    VSCode inschakelen instelling terminalafbeeldingen

  2. Installeer de python-sixel bibliotheek in je virtuele omgeving. Dit is een vork van de PySixel bibliotheek, die niet langer wordt onderhouden.

    pip install sixel
    
  3. Een model laden en inferentie uitvoeren, dan de resultaten plotten en opslaan in een variabele. Lees meer over inferentieargumenten en het werken met resultaten op de voorspellingsmodus pagina.

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolov8n.pt")
    
    # Run inference on an image
    results = model.predict(source="ultralytics/assets/bus.jpg")
    
    # Plot inference results
    plot = results[0].plot()  # (1)!
    
    1. Zie de parameters van de plotmethode om te zien welke argumenten je kunt gebruiken.
  4. Gebruik nu OpenCV om de numpy.ndarray naar bytes gegevens. Gebruik dan io.BytesIO om een "bestandsachtig" object te maken.

    import io
    
    import cv2
    
    # Results image as bytes
    im_bytes = cv2.imencode(
        ".png",  # (1)!
        plot,
    )[1].tobytes()  # (2)!
    
    # Image bytes as a file-like object
    mem_file = io.BytesIO(im_bytes)
    
    1. Het is ook mogelijk om andere afbeeldingsextensies te gebruiken.
    2. Alleen het object op index 1 die wordt geretourneerd nodig is.
  5. Maak een SixelWriter instantie en gebruik dan de .draw() methode om de afbeelding in de terminal te tekenen.

    from sixel import SixelWriter
    
    # Create sixel writer object
    w = SixelWriter()
    
    # Draw the sixel image in the terminal
    w.draw(mem_file)
    

Voorbeeld inferentie resultaten

Afbeelding weergeven in terminal

Gevaar

Het gebruik van dit voorbeeld met video's of geanimeerde GIF-frames is niet getest. Probeer het op eigen risico.

Volledig codevoorbeeld

import io

import cv2
from sixel import SixelWriter

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.pt")

# Run inference on an image
results = model.predict(source="ultralytics/assets/bus.jpg")

# Plot inference results
plot = results[0].plot()  # (3)!

# Results image as bytes
im_bytes = cv2.imencode(
    ".png",  # (1)!
    plot,
)[1].tobytes()  # (2)!

mem_file = io.BytesIO(im_bytes)
w = SixelWriter()
w.draw(mem_file)
  1. Het is ook mogelijk om andere afbeeldingsextensies te gebruiken.
  2. Alleen het object op index 1 die wordt geretourneerd nodig is.
  3. Zie de parameters van de plotmethode om te zien welke argumenten je kunt gebruiken.

Tip

Mogelijk moet je clear om het beeld in de terminal te "wissen".

FAQ

Hoe kan ik YOLO inferentieresultaten bekijken in een VSCode-terminal op macOS of Linux?

Volg deze stappen om YOLO inferentieresultaten te bekijken in een VSCode terminal op macOS of Linux:

  1. Schakel de benodigde VSCode-instellingen in:

    "terminal.integrated.enableImages": true
    "terminal.integrated.gpuAcceleration": "auto"
    
  2. Installeer de sixel bibliotheek:

    pip install sixel
    
  3. Laad je YOLO model en voer de inferentie uit:

    from ultralytics import YOLO
    
    model = YOLO("yolov8n.pt")
    results = model.predict(source="path_to_image")
    plot = results[0].plot()
    
  4. Converteer het inferentieresultaat naar bytes en toon het in de terminal:

    import io
    
    import cv2
    from sixel import SixelWriter
    
    im_bytes = cv2.imencode(".png", plot)[1].tobytes()
    mem_file = io.BytesIO(im_bytes)
    SixelWriter().draw(mem_file)
    

Ga voor meer informatie naar de pagina over de voorspelmodus.

Waarom werkt het sixel protocol alleen op Linux en macOS?

Het sixel protocol wordt momenteel alleen ondersteund op Linux en macOS omdat deze platformen native terminal mogelijkheden hebben die compatibel zijn met sixel graphics. Windows ondersteuning voor terminal graphics met sixel is nog in ontwikkeling. Kijk voor updates over Windows compatibiliteit in de VSCode Issue status en documentatie.

Wat moet ik doen als ik problemen heb met het weergeven van afbeeldingen in de VSCode-terminal?

Als je problemen ondervindt met het weergeven van afbeeldingen in de VSCode terminal met sixel:

  1. Zorg ervoor dat de benodigde instellingen in VSCode zijn ingeschakeld:

    "terminal.integrated.enableImages": true
    "terminal.integrated.gpuAcceleration": "auto"
    
  2. Controleer de installatie van de sixel bibliotheek:

    pip install sixel
    
  3. Controleer je code voor het converteren en plotten van afbeeldingsgegevens op fouten. Bijvoorbeeld:

    import io
    
    import cv2
    from sixel import SixelWriter
    
    im_bytes = cv2.imencode(".png", plot)[1].tobytes()
    mem_file = io.BytesIO(im_bytes)
    SixelWriter().draw(mem_file)
    

Als er problemen blijven bestaan, raadpleeg dan de VSCode repository en ga naar de plotmethode parameters sectie voor aanvullende richtlijnen.

Kan YOLO video-inferentieresultaten in de terminal weergeven met behulp van sixel?

Het weergeven van video-inferentieresultaten of geanimeerde GIF-frames met behulp van sixel in de terminal is momenteel niet getest en wordt mogelijk niet ondersteund. We raden aan om te beginnen met statische afbeeldingen en de compatibiliteit te controleren. Probeer videoresultaten op eigen risico en houd rekening met prestatiebeperkingen. Ga voor meer informatie over het plotten van inferentieresultaten naar de voorspellingsmodus pagina.

Hoe kan ik problemen oplossen met de python-sixel bibliotheek?

Problemen met de python-sixel bibliotheek:

  1. Zorg ervoor dat de bibliotheek correct is geĆÆnstalleerd in je virtuele omgeving:

    pip install sixel
    
  2. Controleer of je de benodigde Python en systeemafhankelijkheden hebt.

  3. Raadpleeg de python-sixel GitHub repository voor aanvullende documentatie en ondersteuning van de gemeenschap.

  4. Controleer je code dubbel op mogelijke fouten, met name het gebruik van SixelWriter en stappen voor het converteren van beeldgegevens.

Raadpleeg de documentatiepagina's over exporteren en voorspellen voor meer hulp bij het werken met YOLO modellen en sixel-integratie.



Aangemaakt 2024-03-09, Bijgewerkt 2024-07-05
Auteurs: glenn-jocher (6), IvorZhu331 (1), Burhan-Q (1)

Reacties