Zum Inhalt springen

Anzeigen von Ableitungsergebnissen in einem Terminal

Sixel Beispiel eines Bildes im Terminal

Bild von der libsixel-Website.

Motivation

Wenn eine Verbindung zu einem entfernten Rechner besteht, ist es normalerweise nicht möglich, 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 man dies in Verbindung mit ultralytics mit Vorhersageergebnisse.

Warnung

Nur kompatibel mit Linux und MacOS. Prüfen Sie die VSCode-Repository, prüfen Status der Ausgabe, oder Dokumentation für Aktualisierungen der Windows-Unterstützung zur 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. Zunächst müssen Sie 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 Ihrer virtuellen Umgebung. Dies ist eine Gabel der PySixel Bibliothek, die nicht mehr gepflegt wird.

    pip install sixel
    
  3. Laden Sie ein Modell und führen Sie die Inferenz aus, stellen Sie die Ergebnisse dar und speichern Sie sie in einer Variablen. Weitere Informationen über Inferenzargumente und die Arbeit mit Ergebnissen finden Sie auf der Seite zum Vorhersagemodus.

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo11n.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 die möglichen Argumente zu sehen, die verwendet werden können.
  4. Verwenden Sie nun OpenCV zur Umwandlung der numpy.ndarray zu bytes Daten. Verwenden Sie dann 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.
  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("yolo11n.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.
  3. Siehe Parameter der Plot-Methode, um die möglichen Argumente zu sehen, die verwendet werden können.

Tipp

Sie müssen möglicherweise Folgendes verwenden 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?

Gehen Sie folgendermaßen vor, um die Ergebnisse von YOLO in einem VSCode-Terminal unter macOS oder Linux anzuzeigen:

  1. Aktivieren Sie die erforderlichen VSCode-Einstellungen:

    "terminal.integrated.enableImages": true
    "terminal.integrated.gpuAcceleration": "auto"
    
  2. Installieren Sie die sixel-Bibliothek:

    pip install sixel
    
  3. Laden Sie Ihr YOLO Modell und führen Sie die Inferenz durch:

    from ultralytics import YOLO
    
    model = YOLO("yolo11n.pt")
    results = model.predict(source="path_to_image")
    plot = results[0].plot()
    
  4. Konvertieren Sie das Ergebnisbild der Inferenz in Bytes und zeigen Sie 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 Einzelheiten finden Sie 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 Terminalgrafiken mit sixel befindet sich noch in der Entwicklung. Aktuelle Informationen zur Windows-Kompatibilität finden Sie im VSCode Issue Status und in der Dokumentation.

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

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

  1. Stellen Sie sicher, dass die erforderlichen Einstellungen in VSCode aktiviert sind:

    "terminal.integrated.enableImages": true
    "terminal.integrated.gpuAcceleration": "auto"
    
  2. Überprüfen Sie die Installation der sixel-Bibliothek:

    pip install sixel
    
  3. Überprüfen Sie Ihren Bilddatenkonvertierungs- und Plotting-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)
    

Sollten die Probleme weiterhin bestehen, konsultieren Sie das VSCode-Repository und besuchen Sie den Abschnitt über die Parameter der Plot-Methode, um weitere Hinweise zu erhalten.

Kann YOLO mit Hilfe von sixel die Ergebnisse der Videoinferenz 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 Inferenzergebnissen finden Sie auf der Seite zum Vorhersagemodus.

Wie kann ich Probleme mit dem System beheben? python-sixel Bibliothek?

Zur Fehlerbehebung bei Problemen mit dem python-sixel Bibliothek:

  1. Stellen Sie sicher, dass die Bibliothek in Ihrer virtuellen Umgebung korrekt installiert ist:

    pip install sixel
    
  2. Stellen Sie sicher, dass Sie über die erforderlichen Python und Systemabhängigkeiten verfügen.

  3. Weitere Dokumentation und Unterstützung durch die Community finden Sie im python-sixel GitHub-Repository.

  4. Überprüfen Sie Ihren Code doppelt auf mögliche Fehler, insbesondere die Verwendung von SixelWriter und Bilddatenkonvertierungsschritte.

Weitere Hilfestellungen zur Arbeit mit YOLO Modellen und zur Integration von sixel finden Sie auf den Dokumentationsseiten zum Export- und Vorhersagemodus.

📅 Erstellt vor 9 Monaten ✏️ Aktualisiert vor 2 Monaten

Kommentare