Object Detection

Roboflow でホストされているオブジェクト検出モデルで推論を実行します。

Roboflow Hosted API を使用して物体検出推論を実行する方法はいくつかあります。さまざまな SDK のいずれかを使用するか、ホストされたエンドポイントに REST リクエストを送信できます。

依存関係をインストールするには、 pip install inference-sdk.

# inference-sdk をインポートする
from inference_sdk import InferenceHTTPClient

CLIENT = InferenceHTTPClient(
    api_url="https://detect.roboflow.com",
    api_key="API_KEY"
)

result = CLIENT.infer(your_image.jpg, model_id="football-players-detection-3zvbc/12")

APIリファレンス

URL

POST https://detect.roboflow.com/:projectId/:versionNumber

名前
タイプ
説明

projectId

string

データセット名の URL セーフなバージョン。これは、Web UI のメインプロジェクトビューの URL を見るか、モデルをトレーニングした後のデータセットバージョンのトレイン結果セクションにある「Get curl command」ボタンをクリックして確認できます。

version

number

データセットのバージョンを識別するバージョン番号

プロジェクト ID とバージョン番号の取得方法を見る ここ.

Hosted Inference API に画像を REST リクエストで送信する方法は 2 つあります:

  • 添付する base64 エンコードされた画像を POST リクエストボディに

  • 画像ファイルの URL を image URL クエリで送信する

    • 例: https://detect.roboflow.com/:datasetSlug/:versionNumber?image=https://imageurl.com

Query Parameters

名前
タイプ
説明

image

string

追加する画像の URL。画像が別の場所にホストされている場合に使用します。(リクエストボディで base64 エンコードされた画像を POST しない場合は必須。) 注意: URL エンコードするのを忘れないでください。

classes

string

予測を特定のクラスのものに制限します。カンマ区切りの文字列で指定してください。 例: dog,cat デフォルト: 指定なし(すべてのクラスを表示)

overlap

number

同一クラスのバウンディングボックス予測が結合されて単一のボックスになる前に許容される最大重なり率(0〜100 の尺度)。

デフォルト: 30

confidence

number

返される予測の閾値(0〜100 の尺度)。低い数値ほど多くの予測を返します。高い数値ほど確信度の高い予測のみを返します。

デフォルト: 40

stroke

number

予測周りに表示されるバウンディングボックスの幅(ピクセル単位)(効果があるのは formatimage).

デフォルト: 1

labels

boolean

予測にテキストラベルを表示するかどうか(効果があるのは formatimage).

デフォルト: false

format

string

オプション:

  • json: JSON の予測配列を返します。(レスポンス形式タブを参照)

  • image: 注釈付き予測を含む画像をバイナリブロブとして返します。その Content-Typeimage/jpeg.

デフォルト: json

api_key

string

あなたの API キー(ワークスペースの API 設定ページから取得)

Request Body

タイプ
説明

string

Base64 エンコードされた画像。(クエリパラメータで画像 URL を渡さない場合は必須。)

コンテンツタイプは次の形式である必要があります application/x-www-form-urlencoded 文字列のボディで。

レスポンス形式

ホストされた API 推論エンドポイントとほとんどの SDK は、次のような JSON 配列 predictions を含むオブジェクトを返します。各 prediction は以下のプロパティを持ちます:

  • x = 検出されたオブジェクトの水平中心点

  • y = 検出されたオブジェクトの垂直中心点

  • width = バウンディングボックスの幅

  • height = バウンディングボックスの高さ

  • class = 検出されたオブジェクトのクラスラベル

  • confidence = 検出されたオブジェクトが正しいラベルと位置座標であるというモデルの確信度

以下は REST API からのサンプルレスポンスオブジェクトです:

{
    "predictions": [
        {
            "x": 189.5,
            "y": 100,
            "width": 163,
            "height": 186,
            "class": "helmet",
            "confidence": 0.544
        }
    ],
    "image": {
        "width": 2048,
        "height": 1371
    }
}

The image attribute は推論に送信した画像の高さと幅を含みます。バウンディングボックスの計算でこれらの値を使用する必要がある場合があります。

Inference API の JSON 出力からボックスを描画する

バウンディングボックスを描画するためのフレームワークやパッケージは位置表現が異なる場合があります。レスポンス JSON オブジェクトのプロパティを考慮すると、次のルールの組み合わせを使って常にバウンディングボックスを描画できます:

  • 中心点は常に (x,y)

  • コーナーポイント (x1, y1) および (x2, y2) は次のように求められます:

    • x1 = x - (width/2)

    • y1 = y - (height/2)

    • x2 = x + (width/2)

    • y2 = y + (height/2)

コーナーポイント方式は一般的なパターンで、例えば以下のようなライブラリで見られます: Pillow を使って box オブジェクトを構築し、Image 内にバウンディングボックスをレンダリングします Image.

検出結果を扱う際は、見つかったすべての検出を反復処理することを忘れないでください predictions!

# Pillow ライブラリのボックスオブジェクトの例
for bounding_box in detections:
    x1 = bounding_box['x'] - bounding_box['width'] / 2
    x2 = bounding_box['x'] + bounding_box['width'] / 2
    y1 = bounding_box['y'] - bounding_box['height'] / 2
    y2 = bounding_box['y'] + bounding_box['height'] / 2
    box = (x1, x2, y1, y2)

Last updated

Was this helpful?