Ultralytics YOLO27:
Get Started

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

libsixelのWebサイトからの画像です。

背景#

SSHでリモートマシンに接続している場合、通常は画像結果を視覚化できないか、GUIを備えたローカルデバイスにデータを移す必要があります。VSCodeの統合ターミナルでは画像を直接表示できるため、ファイルをノートPCにコピーしなくても、推論を実行した場所で予測結果を確認できます。このガイドでは、設定の有効化、コードの接続方法を説明し、よくある質問に回答します。

LinuxおよびmacOSのみ

LinuxおよびmacOSのみで動作します。ターミナルで画像を表示するためのWindowsサポートに関する最新情報は、VSCodeリポジトリ、Issueのステータス、またはドキュメントをご確認ください。sixelを使用します。

統合ターミナルで画像を表示するためにVSCodeが対応しているプロトコルは、sixelとiTermです。このガイドでは、sixelプロトコルの使用方法を説明します。

手順#

  1. まず、VSCodeで設定terminal.integrated.enableImagesとterminal.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. モデルを読み込んで推論を実行し、結果をプロットして変数に格納します。推論引数と結果の扱いについて詳しくは、予測モードのページをご覧ください。

    from ultralytics import YOLO
    
    # モデルを読み込む
    model = YOLO("yolo26n.pt")
    
    # 画像に対して推論を実行する
    results = model.predict(source="https://ultralytics.com/images/bus.jpg")
    
    # 推論結果をプロット
    plot = results[0].plot()  # (1)!
    1. 使用可能な引数については、plotメソッドのパラメーターをご覧ください。
  4. 次に、OpenCVを使ってnp.ndarrayをbytesデータに変換します。その後、io.BytesIOを使って「ファイル風」オブジェクトを作成します。

    import io
    
    import cv2
    
    # 推論結果の画像をバイト列に変換
    im_bytes = cv2.imencode(
        ".png",  # (1)!
        plot,
    )[1].tobytes()  # (2)!
    
    # 画像のバイト列をファイル風オブジェクトに変換
    mem_file = io.BytesIO(im_bytes)
    1. ほかの画像拡張子も使用できます。
    2. 返されるオブジェクトのうち、インデックス1のものだけが必要です。
  5. SixelWriterインスタンスを作成し、.draw()メソッドを使ってターミナルに画像を描画します。

    from sixel import SixelWriter
    
    # sixelライターオブジェクトを作成
    w = SixelWriter()
    
    # ターミナルにsixel画像を描画
    w.draw(mem_file)

推論結果の例#

YOLO inference results displayed in terminal

動画とGIFは未検証です

動画やアニメーションGIFのフレームでこの例を使用したことはありません。ご自身の判断でお試しください。

コード全体の例#

import io

import cv2
from sixel import SixelWriter

from ultralytics import YOLO

# モデルを読み込む
model = YOLO("yolo26n.pt")

# 画像に対して推論を実行する
results = model.predict(source="https://ultralytics.com/images/bus.jpg")

# 推論結果をプロット
plot = results[0].plot()  # (3)!

# 推論結果の画像をバイト列に変換
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を使用する必要がある場合があります。

よくある質問#

  • 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="https://ultralytics.com/images/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)

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

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

  • 何も表示されない場合は、次の項目を順番に確認してください。

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

    問題が解決しない場合は、ターミナルでの画像サポート状況についてVSCodeリポジトリをご確認ください。

  • sixelを使った動画推論結果やアニメーションGIFフレームのターミナル表示は、現在未検証のため、サポートされていない場合があります。まず静止画像で試し、互換性を確認することをおすすめします。パフォーマンス上の制約を考慮し、動画の結果はご自身の判断でお試しください。推論結果のプロットについて詳しくは、予測モードのページをご覧ください。

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

コメント