🚀 [omlab/omdet - turbo - swin - tiny - hfのフォーク版によるゼロショット物体検出推論エンドポイント]
このリポジトリは、🤗 Inference Endpointsにおけるゼロショット物体検出
のカスタム
タスクを実装しています。これにより、特定の物体検出タスクを柔軟に実行できます。
🚀 クイックスタート
このリポジトリは、🤗 Inference Endpoints用のゼロショット物体検出
のカスタム
タスクを実装しています。カスタマイズされたハンドラーのコードは、[handler.py](https://huggingface.co/Blueway/inference - endpoint - for - omdet - turbo - swin - tiny - hf/blob/main/handler.py)にあります。
このモデルを推論エンドポイントとしてデプロイするには、タスクとしてCustom
を選択してhandler.py
ファイルを使用する必要があります。
リポジトリには、timmライブラリをダウンロードするためのrequirements.txtが含まれています。
期待されるリクエストペイロード
{
"inputs": {
"image": "/9j/4AAQSkZJRgABAQEBLAEsAAD/2wBDAAMCAgICAgMC....",
"candidates": ["broken curb", "broken road", "broken road sign", "broken sidewalk"]
}
}
以下は、Pythonとrequests
を使用してリクエストを実行する例です。
💻 使用例
基本的な使用法
import json
from typing import List
import requests as r
import base64
ENDPOINT_URL = ""
HF_TOKEN = ""
def predict(path_to_image: str = None, candidates: List[str] = None):
with open(path_to_image, "rb") as i:
b64 = base64.b64encode(i.read())
payload = {"inputs": {"image": b64.decode("utf-8"), "candidates": candidates}}
response = r.post(
ENDPOINT_URL, headers={"Authorization": f"Bearer {HF_TOKEN}"}, json=payload
)
return response.json()
prediction = predict(
path_to_image="image/brokencurb.jpg", candidates=["broken curb", "broken road", "broken road sign", "broken sidewalk"]
)
print(json.dumps(prediction, indent=2))
期待される出力
{
"boxes": [
[
1.919342041015625,
231.1556396484375,
1011.4019775390625,
680.3773193359375
],
[
610.9949951171875,
397.6180419921875,
1019.9259033203125,
510.8144226074219
],
[
1.919342041015625,
231.1556396484375,
1011.4019775390625,
680.3773193359375
],
[
786.1240234375,
68.618896484375,
916.1265869140625,
225.0513458251953
]
],
"scores": [
0.4329715967178345,
0.4215811491012573,
0.3389397859573364,
0.3133399784564972
],
"candidates": [
"broken sidewalk",
"broken road sign",
"broken road",
"broken road sign"
]
}
ボックスは{x_min, y_min, x_max, y_max}の形式で構成されています。
高度な使用法
結果を可視化するには、次のコードを実装できます。
prediction = predict(
path_to_image="image/cat_and_remote.jpg", candidates=["cat", "remote", "pot hole"]
)
import matplotlib.pyplot as plt
import matplotlib.patches as patches
with open("image/cat_and_remote.jpg", "rb") as i:
image = plt.imread(i)
fig, ax = plt.subplots(1)
ax.imshow(image)
for score, class_name, box in zip(
prediction["scores"], prediction["candidates"], prediction["boxes"]
):
rect = patches.Rectangle([int(box[0]), int(box[1])], int(box[2] - box[0]), int(box[3] - box[1]), linewidth=1, edgecolor='r', facecolor='none')
ax.add_patch(rect)
ax.text(int(box[0]), int(box[1]), str(round(score, 2)) + " " + str(class_name), color='white', fontsize=6, bbox=dict(facecolor='red', alpha=0.5))
plt.savefig('image_result/cat_and_remote_with_bboxes_zero_shot.jpeg')
結果
出力画像
📄 ライセンス
このプロジェクトは、Apache - 2.0ライセンスの下で提供されています。
参考情報
このHugging Face推論エンドポイントへの適応は、@philschmidの[philschmid/clip - zero - shot - image - classification](https://huggingface.co/philschmid/clip - zero - shot - image - classification)における作業に触発されています。