YOLO Vision 2026:

VSCodeターミナルでYOLOの推論結果を表示する方法#

Sixel example of image in Terminal

libsixel ウェブサイトからの画像。

目的#

SSH経由でリモートマシンに接続する場合、画像結果の視覚化は通常不可能であるか、GUIを備えたローカルデバイスへのデータの移動が必要になります。VSCodeの統合ターミナルは画像を直接描画できるため、ファイルをラップトップにコピーしなくても、推論を実行したその場で予測結果を確認できます。このガイドでは、セットアップの有効化とコードの接続方法を順に説明し、よくある質問に回答します。

LinuxおよびmacOSのみ

LinuxおよびmacOSでのみ互換性があります。Windowsサポートの最新情報や、ターミナルでの画像表示における sixel の利用については、VSCode repositoryIssue status、またはdocumentationをご確認ください。

統合ターミナルを使用して画像を表示するためのVSCode互換プロトコルは、sixel および iTerm です。このガイドでは、sixel プロトコルの使用方法を示します。

プロセス#

  1. まず、VSCodeで設定 terminal.integrated.enableImagesterminal.integrated.gpuAcceleration を有効にする必要があります。

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

    VSCode enable terminal images setting

  2. 仮想環境に python-sixel ライブラリをインストールします。これは、すでにメンテナンスが終了している PySixel ライブラリのforkです。

    pip install sixel
  3. モデルをロードして推論を実行し、結果をプロットして変数に格納します。推論引数および結果の処理の詳細については、predict モードページを参照してください。

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n.pt")
    
    # Run inference on an image
    results = model.predict(source="ultralytics/assets/bus.jpg")
    
    # Plot inference results
    plot = results[0].plot()  # (1)!
    1. 使用できる引数を確認するには、plot メソッドのパラメータを参照してください。
  4. 次に、OpenCVを使用して np.ndarraybytes データに変換します。その後、io.BytesIO を使用して「ファイル風」オブジェクトを作成します。

    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. 他の画像拡張子を使用することも可能です。
    2. 返されたインデックス 1 のオブジェクトのみが必要です。
  5. SixelWriter インスタンスを作成し、.draw() メソッドを使用してターミナルに画像を描画します。

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

推論結果の例#

YOLO inference results displayed in terminal

動画とGIFは未検証です

この例を使用した動画やアニメーションGIFフレームはテストされていません。ご自身の責任でお試しください。

完全なコード例#

import io

import cv2
from sixel import SixelWriter

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.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. 他の画像拡張子を使用することも可能です。
  2. 返されたインデックス 1 のオブジェクトのみが必要です。
  3. 使用できる引数を確認するには、plot メソッドのパラメータを参照してください。

画像の消去

ターミナル内の画像の表示を「消去」するために clear の使用が必要になる場合があります。

よくある質問 (FAQ)#

macOSまたはLinux上のVSCodeターミナルでYOLOの推論結果を表示するにはどうすればよいですか?#

macOSまたはLinux上のVSCodeターミナルでYOLOの推論結果を表示するには、次の手順に従ってください。

  1. 必要なVSCode設定を有効にします:

    "terminal.integrated.enableImages": true
    "terminal.integrated.gpuAcceleration": "auto"
  2. sixelライブラリをインストールします:

    pip install sixel
  3. YOLOモデルをロードして推論を実行します:

    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    results = model.predict(source="ultralytics/assets/bus.jpg")
    plot = results[0].plot()
  4. 推論結果の画像をバイトデータに変換し、ターミナルに表示します:

    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)

詳細については、predict モードページをご覧ください。

なぜsixelプロトコルはLinuxとmacOSでしか動作しないのですか?#

sixelプロトコルは、sixelグラフィックスと互換性のあるネイティブターミナル機能をこれらのプラットフォームが備えているため、現在LinuxおよびmacOSでのみサポートされています。sixelを使用したターミナルグラフィックスのWindowsサポートは現在開発中です。Windowsの互換性に関する更新情報については、VSCode Issueのステータスドキュメントをご確認ください。

VSCodeターミナルで画像を表示する際に問題が発生した場合はどうすればよいですか?#

何も表示されない場合は、順番に以下のチェックを行ってください:

  1. Processセクションに示されているように、terminal.integrated.enableImagesterminal.integrated.gpuAcceleration の両方が有効になっていることを確認してから、設定を反映させるために統合ターミナルを再起動してください。
  2. sixel が、スクリプトを実行している同じ仮想環境(pip install sixel)にインストールされていることを確認します。
  3. cv2.imencode は画像が空である場合や有効な配列でない場合にエラーを発生させるため、エンコードする前に plot が有効な np.ndarray であることを確認してください。results[0].plot() が受け入れる値については、plot method parametersを参照してください。

問題が解決しない場合は、ターミナル画像サポートのステータスについてVSCodeリポジトリを参照してください。

YOLOはsixelを使用してターミナルに動画の推論結果を表示できますか?#

ターミナルでsixelを使用してビデオ推論結果やアニメーションGIFフレームを表示することは現在テストされておらず、サポートされていない可能性があります。静止画から始めて互換性を確認することをお勧めします。パフォーマンスの制約に留意しながら、ご自身の責任でビデオ結果をお試しください。推論結果のプロットの詳細については、predict モードページをご覧ください。

python-sixel ライブラリに関する問題をトラブルシューティングするにはどうすればよいですか?#

sixel パッケージは、メンテナンスが終了した PySixel ライブラリのforkであり、Pillow(PIL)の薄いPythonラッパーです。import sixel が失敗するか SixelWriter().draw() がエラーを発生させる場合は、アクティブな仮想環境にパッケージがインストールされていることを確認し、Pillowが利用可能であることを確かめ、プラットフォーム固有の注意事項についてpython-sixel GitHub repositoryをご確認ください。draw() に渡す画像の生成方法の詳細については、predict modeのドキュメントを参照してください。

コメント