Zum Inhalt springen

Anzeigen von Schlussfolgerungsergebnissen in einem Terminal

Sixel Beispiel eines Bildes im Terminal

Bild von der libsixel Website.

Motivation

Wenn du eine Verbindung zu einem entfernten Rechner herstellst, ist es normalerweise nicht möglich, die Bildergebnisse zu visualisieren, oder die Daten müssen auf ein lokales Gerät mit einer grafischen Benutzeroberfläche übertragen werden. Das in VSCode integrierte Terminal ermöglicht die direkte Darstellung von Bildern. Dies ist eine kurze Demonstration, wie du es in Verbindung mit ultralytics mit Vorhersageergebnisse.

Warnung

Nur kompatibel mit Linux und MacOS. Prüfe die VSCode Repository, prüfen Status der Ausgabe, oder Dokumentation für Updates zur Windows-Unterstützung für die Anzeige von Bildern im Terminal mit sixel.

Die VSCode-kompatiblen Protokolle zum Betrachten von Bildern mit dem integrierten Terminal sind sixel und iTerm. In diesem Leitfaden wird die Verwendung der sixel Protokoll.

Prozess

  1. Zuerst musst du die Einstellungen aktivieren terminal.integrated.enableImages und terminal.integrated.gpuAcceleration in VSCode.

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

    VSCode enable terminal images Einstellung

  2. Installieren Sie die python-sixel Bibliothek in deiner virtuellen Umgebung. Dies ist eine Gabel der PySixel Bibliothek, die nicht mehr gepflegt wird.

    pip install sixel
    
  3. Lade ein Modell und führe die Inferenz durch, zeichne die Ergebnisse auf und speichere sie in einer Variablen. Auf der Seite zum Vorhersagemodus erfährst du mehr über die Argumente der Inferenz und die Arbeit mit den Ergebnissen.

    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. Siehe Parameter der Plot-Methode, um zu sehen, welche Argumente du verwenden kannst.
  4. Verwende nun OpenCV, um die numpy.ndarray zu bytes Daten. Dann verwende io.BytesIO um ein "dateiähnliches" Objekt zu erstellen.

    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. Es ist auch möglich, andere Bilderweiterungen zu verwenden.
    2. Nur das Objekt mit dem Index 1 die zurückgegeben wird, benötigt wird.
  5. Erstellen einer SixelWriter Instanz, und verwenden Sie dann die .draw() Methode, um das Bild im Terminal zu zeichnen.

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

Beispiel Inferenzergebnisse

Bild im Terminal anzeigen

Gefahr

Die Verwendung dieses Beispiels mit Videos oder animierten GIF-Frames wurde nicht getestet. Der Versuch erfolgt auf eigene Gefahr.

Vollständiges Code-Beispiel

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. Es ist auch möglich, andere Bilderweiterungen zu verwenden.
  2. Nur das Objekt mit dem Index 1 die zurückgegeben wird, benötigt wird.
  3. Siehe Parameter der Plot-Methode, um zu sehen, welche Argumente du verwenden kannst.

Tipp

Möglicherweise musst du clear um die Ansicht des Bildes im Terminal zu "löschen".

FAQ

Wie kann ich die Ergebnisse von YOLO in einem VSCode-Terminal unter macOS oder Linux anzeigen?

Um die Ergebnisse von YOLO in einem VSCode-Terminal unter macOS oder Linux anzuzeigen, befolge diese Schritte:

  1. Aktiviere die erforderlichen VSCode-Einstellungen:

    "terminal.integrated.enableImages": true
    "terminal.integrated.gpuAcceleration": "auto"
    
  2. Installiere die Sixel-Bibliothek:

    pip install sixel
    
  3. Lade dein YOLO Modell und führe die Inferenz durch:

    from ultralytics import YOLO
    
    model = YOLO("yolov8n.pt")
    results = model.predict(source="path_to_image")
    plot = results[0].plot()
    
  4. Wandle das Ergebnisbild der Inferenz in Bytes um und zeige es im Terminal an:

    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)
    

Weitere Informationen findest du auf der Seite zum Vorhersagemodus.

Warum funktioniert das Sixel-Protokoll nur unter Linux und macOS?

Das Sixel-Protokoll wird derzeit nur unter Linux und macOS unterstützt, da diese Plattformen über native Terminalfunktionen verfügen, die mit Sixel-Grafiken kompatibel sind. Die Windows-Unterstützung für Terminal-Grafiken mit sixel ist noch in der Entwicklung. Aktuelle Informationen zur Windows-Kompatibilität findest du im VSCode Issue Status und in der Dokumentation.

Was ist, wenn ich Probleme mit der Anzeige von Bildern im VSCode-Terminal habe?

Wenn du Probleme bei der Anzeige von Bildern im VSCode-Terminal mit sixel hast:

  1. Stelle sicher, dass die notwendigen Einstellungen in VSCode aktiviert sind:

    "terminal.integrated.enableImages": true
    "terminal.integrated.gpuAcceleration": "auto"
    
  2. Überprüfe die Installation der Sixel-Bibliothek:

    pip install sixel
    
  3. Überprüfe deinen Bilddatenkonvertierungs- und Plot-Code auf Fehler. Zum Beispiel:

    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)
    

Wenn die Probleme weiterhin bestehen, sieh im VSCode-Repository nach und besuche den Abschnitt über die Parameter der Plot-Methode, um weitere Hinweise zu erhalten.

Kann YOLO die Ergebnisse der Videoinferenz mit sixel auf dem Terminal anzeigen?

Die Anzeige von Video-Inferenzergebnissen oder animierten GIF-Frames mit sixel im Terminal ist derzeit nicht getestet und wird möglicherweise nicht unterstützt. Wir empfehlen, mit statischen Bildern zu beginnen und die Kompatibilität zu überprüfen. Das Ausprobieren von Videoergebnissen erfolgt auf eigene Gefahr und unter Berücksichtigung von Leistungseinschränkungen. Weitere Informationen zum Plotten von Schlussfolgerungsergebnissen findest du auf der Seite zum Vorhersagemodus.

Wie behebe ich Probleme mit der python-sixel Bibliothek?

Zur Fehlerbehebung von Problemen mit der python-sixel Bibliothek:

  1. Stelle sicher, dass die Bibliothek in deiner virtuellen Umgebung korrekt installiert ist:

    pip install sixel
    
  2. Überprüfe, ob du die notwendigen Python und Systemabhängigkeiten hast.

  3. Im python-sixel GitHub Repository findest du zusätzliche Dokumentation und Unterstützung durch die Community.

  4. Überprüfe deinen Code auf mögliche Fehler, insbesondere die Verwendung von SixelWriter und Bilddatenkonvertierungsschritte.

Weitere Hilfestellungen zur Arbeit mit YOLO Modellen und der Sixel-Integration findest du auf den Dokumentationsseiten zum Export- und Vorhersagemodus.



Erstellt 2024-03-09, Aktualisiert 2024-07-05
Autoren: glenn-jocher (6), IvorZhu331 (1), Burhan-Q (1)

Kommentare