コンテンツへスキップ

推論結果をターミナルで見る

ターミナルでの画像の例

画像はlibsixelウェブサイトより。

モチベーション

リモートマシンに接続する場合、通常、画像結果を視覚化することは不可能であるか、GUIを持つローカルデバイスにデータを移動する必要があります。VSCode統合ターミナルは、画像を直接レンダリングすることができます。これは、VSCode統合ターミナルを使用した簡単なデモンストレーションです。 ultralytics と 予測結果.

警告

LinuxとMacOSのみ対応。VSCodeを確認する リポジトリチェック 問題ステータスあるいは ドキュメンテーション を使用してターミナルで画像を表示するためのWindowsサポートに関する最新情報については、こちらをご覧ください。 sixel.

統合端末を使用して画像を表示するためのVSCode互換プロトコルは次のとおりです。 sixel そして iTerm.このガイドでは sixel プロトコルを使用する。

プロセス

  1. まず、設定を有効にします。 terminal.integrated.enableImages そして terminal.integrated.gpuAcceleration をVSCodeに追加した。

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

VSCodeイネーブル端末画像設定

  1. をインストールします。 python-sixel ライブラリーを仮想環境にインストールします。これは フォーク の PySixel 現在はメンテナンスされていない。

    pip install sixel
    
  2. 関連ライブラリのインポート

    import io
    
    import cv2 as cv
    
    from ultralytics import YOLO
    from sixel import SixelWriter
    
  3. モデルをロードして推論を実行し、結果をプロットして変数に格納します。推論の引数と結果の操作については、predict modeのページを参照してください。

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolov8n.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 を使って numpy.ndarray への bytes データを使用します。そして io.BytesIO で「ファイルのような」オブジェクトを作る。

    # Results image as bytes
    im_bytes = cv.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() メソッドを使って端末に画像を描画する。

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

推論結果の例

ターミナルで画像を見る

危険

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

コード例

import io

import cv2 as cv

from ultralytics import YOLO
from sixel import SixelWriter

# Load a model
model = YOLO("yolov8n.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 = cv.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 をクリックすると、端末内の画像の表示を「消す」ことができる。



作成 2024-03-09 更新 2024-03-09
著者Burhan-Q(1)

コメント