Zum Inhalt springen

Anzeigen von Inferenz-Ergebnissen in einem Terminal

Sixel-Beispiel eines Bildes im Terminal

Bild von der libsixel Webseite.

Motivation

Beim Verbinden mit einem Remote-Rechner ist die Visualisierung von Bildresultaten normalerweise nicht möglich oder erfordert das Verschieben von Daten auf ein lokales Gerät mit einer GUI. Das integrierte VSCode-Terminal ermöglicht das direkte Rendern von Bildern. Dies ist eine kurze Demonstration, wie man dies in Verbindung mit ultralytics mit Vorhersageergebnisse.

Warnung

Nur kompatibel mit Linux und MacOS. Überprüfen Sie die VSCode-Repository, überprüfen Sie Problemstatus, oder Dokumentation für Updates zur Windows-Unterstützung, um Bilder im Terminal anzuzeigen mit sixel.

Die VSCode-kompatiblen Protokolle zur Anzeige von Bildern über das integrierte Terminal sind sixel und iTerm. Dieser Leitfaden demonstriert die Verwendung von sixel Protokoll.

Prozess

  1. Zuerst 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": true
    

    VSCode-Einstellung für Terminalbilder aktivieren

  2. Installieren Sie das python-sixel -Bibliothek in Ihrer virtuellen Umgebung. Dies ist eine Fork von dem PySixel -Bibliothek, die nicht mehr gewartet wird.

    pip install sixel
    
  3. Laden Sie ein Modell und führen Sie eine Inferenz aus. Stellen Sie dann die Ergebnisse grafisch dar und speichern Sie sie in einer Variablen. Weitere Informationen zu Inferenzargumenten und zur Arbeit mit Ergebnissen finden Sie auf der Seite 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. Unter Parameter der Plot-Methode finden Sie mögliche Argumente für die Verwendung.
  4. Verwenden Sie nun OpenCV um das np.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 Bildformate zu verwenden.
    2. Nur das Objekt am Index 1 das zurückgegeben wird, benötigt wird.
  5. Erstellen Sie eine 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)
    

Beispielhafte Inferenz-Ergebnisse

Bild im Terminal anzeigen

Gefahr

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

Vollständiges Codebeispiel

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 Bildformate zu verwenden.
  2. Nur das Objekt am Index 1 das zurückgegeben wird, benötigt wird.
  3. Unter Parameter der Plot-Methode finden Sie mögliche Argumente für die Verwendung.

Tipp

Sie müssen möglicherweise clear um die Ansicht des Bildes im Terminal zu "löschen".

FAQ

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

Um YOLO-Inferenz-Ergebnisse in einem VSCode-Terminal unter macOS oder Linux anzuzeigen, führen Sie die folgenden Schritte aus:

  1. Aktivieren Sie die notwendigen 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 eine Inferenz aus:

    from ultralytics import YOLO
    
    model = YOLO("yolo11n.pt")
    results = model.predict(source="path_to_image")
    plot = results[0].plot()
    
  4. Konvertieren Sie das Inferenz-Ergebnisbild 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 Informationen finden Sie auf der Seite 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 ist noch in der Entwicklung. Für Updates zur Windows-Kompatibilität überprüfen Sie den VSCode Issue-Status und die Dokumentation.

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

Wenn Probleme bei der Anzeige von Bildern im VSCode-Terminal mit Sixel auftreten:

  1. Stellen Sie sicher, dass die notwendigen 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 Code zur Konvertierung und Darstellung von Bilddaten 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, konsultiere das VSCode-Repository und besuche den Abschnitt Parameter der Plot-Methode für weitere Anleitungen.

Kann YOLO Video-Inferenz-Ergebnisse im Terminal mit Sixel anzeigen?

Die Anzeige von Video-Inferenz-Ergebnissen oder animierten GIF-Frames mit Sixel im Terminal ist derzeit ungetestet und wird möglicherweise nicht unterstützt. Wir empfehlen, mit statischen Bildern zu beginnen und die Kompatibilität zu überprüfen. Versuchen Sie Videoergebnisse auf eigenes Risiko, wobei Sie die Leistungseinschränkungen beachten sollten. Weitere Informationen zum Plotten von Inferenz-Ergebnissen finden Sie auf der Seite Vorhersagemodus.

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

Zur Fehlerbehebung bei Problemen mit der python-sixel -Bibliothek:

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

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

  3. Weitere Dokumentationen und Community-Support finden Sie im python-sixel GitHub Repository.

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

Weitere Unterstützung bei der Arbeit mit YOLO-Modellen und der Sixel-Integration finden Sie auf den Dokumentationsseiten zum Export und Vorhersagemodus.



📅 Vor 1 Jahr erstellt ✏️ Vor 1 Monat aktualisiert

Kommentare