VSCodeターミナルでYOLOの推論結果を表示する方法#
libsixel ウェブサイトからの画像。
目的#
SSH経由でリモートマシンに接続する場合、画像結果の視覚化は通常不可能であるか、GUIを備えたローカルデバイスへのデータの移動が必要になります。VSCodeの統合ターミナルは画像を直接描画できるため、ファイルをラップトップにコピーしなくても、推論を実行したその場で予測結果を確認できます。このガイドでは、セットアップの有効化とコードの接続方法を順に説明し、よくある質問に回答します。
LinuxおよびmacOSでのみ互換性があります。Windowsサポートの最新情報や、ターミナルでの画像表示における sixel の利用については、VSCode repository、Issue status、またはdocumentationをご確認ください。
統合ターミナルを使用して画像を表示するためのVSCode互換プロトコルは、sixel および iTerm です。このガイドでは、sixel プロトコルの使用方法を示します。
プロセス#
-
まず、VSCodeで設定
terminal.integrated.enableImagesとterminal.integrated.gpuAccelerationを有効にする必要があります。"terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on" "terminal.integrated.enableImages": true
-
仮想環境に
python-sixelライブラリをインストールします。これは、すでにメンテナンスが終了しているPySixelライブラリのforkです。pip install sixel -
モデルをロードして推論を実行し、結果をプロットして変数に格納します。推論引数および結果の処理の詳細については、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)!- 使用できる引数を確認するには、plot メソッドのパラメータを参照してください。
-
次に、OpenCVを使用して
np.ndarrayをbytesデータに変換します。その後、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のオブジェクトのみが必要です。
-
SixelWriterインスタンスを作成し、.draw()メソッドを使用してターミナルに画像を描画します。from sixel import SixelWriter # Create sixel writer object w = SixelWriter() # Draw the sixel image in the terminal w.draw(mem_file)
推論結果の例#
この例を使用した動画やアニメーション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のオブジェクトのみが必要です。 - 使用できる引数を確認するには、plot メソッドのパラメータを参照してください。
ターミナル内の画像の表示を「消去」するために clear の使用が必要になる場合があります。
よくある質問 (FAQ)#
macOSまたはLinux上のVSCodeターミナルでYOLOの推論結果を表示するにはどうすればよいですか?#
macOSまたはLinux上のVSCodeターミナルでYOLOの推論結果を表示するには、次の手順に従ってください。
-
必要なVSCode設定を有効にします:
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto" -
sixelライブラリをインストールします:
pip install sixel -
YOLOモデルをロードして推論を実行します:
from ultralytics import YOLO model = YOLO("yolo26n.pt") results = model.predict(source="ultralytics/assets/bus.jpg") plot = results[0].plot() -
推論結果の画像をバイトデータに変換し、ターミナルに表示します:
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ターミナルで画像を表示する際に問題が発生した場合はどうすればよいですか?#
何も表示されない場合は、順番に以下のチェックを行ってください:
- Processセクションに示されているように、
terminal.integrated.enableImagesとterminal.integrated.gpuAccelerationの両方が有効になっていることを確認してから、設定を反映させるために統合ターミナルを再起動してください。 sixelが、スクリプトを実行している同じ仮想環境(pip install sixel)にインストールされていることを確認します。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のドキュメントを参照してください。