予測のアップロード
7 分
はじめに この例では、既存のデータセットにapiを使用して予測をアップロードする方法を説明します。 開始する前に docid\ q51qlt8c6udmzir8momyr を確認し、 docid\ ikzqfd v1wny08rajmcac について学んでください。 手順 新しいpythonファイルを作成し、以下のライブラリをインポートしてください import requests from kognic auth requests auth session import requestsauthsession base url = "https //dataset app kognic com/v1/" client = requestsauthsession() 1\ データセットのuuidを取得する ツールにアクセスしてurlの dataset/ に続くuuidをコピーするか、datasetsエンドポイントを利用してデータセットのuuidを取得できます client session get("https //dataset app kognic com/v2/datasets") 2\ 既存の予測グループのuuidを取得するか、新しいものを作成する 2 a 既存の予測グループのuuidを取得する 予測をアップロードするには、予測グループが存在する必要があります。予測は任意の目的でグループに整理できます。既存の予測グループのuuidは、urlの predictions/ に続く部分で確認するか、以下のエンドポイントを使用して取得できます client session get(base url + f"/datasets/{datasetuuid}/predictions groups") 2 b 予測グループの作成(オプション) セグメンテーションタスクを含まないデータセットの場合、新しい予測グループは、アプリ内(右上の manage predictions をクリックし、 + create predictions group を選択)で作成するか、以下のコードスニペットを使用して作成できます path = base url + f"/datasets/{datasetuuid}/predictions groups" body = {"name" "my predictions group", "description" "a description of my new predictions group"} try response = client session post(path, json=body) response raise for status() response json = response json() print(f"created predictions group with uuid {response json\['data']}") except requests exceptions requestexception as e msg = e response text print(f"request error {e} {msg}") 特殊なケース セグメンテーションデータセット セグメンテーションデータセットに接続される予測グループは、コードスニペットを使用して作成する必要があり、 classmapping という追加パラメータも必要です。このマッピングは、予測とアノテーション間の不一致を計算する際に使用され、ソート順やギャラリーでの不一致の表示方法に影響します。 classmapping パラメータは辞書のリストで、各辞書には annotated と predicted のキーが含まれます。 annotated キーはアノテーション内のクラス名、 predicted キーは予測内のクラス名です。例えば、異なる樹種をアノテーションしているが、木かどうかのみを予測する場合は {"annotated" "oak", "predicted" "tree"} のようになります。 予測とアノテーションのすべてのクラス名は、マッピングが不要な場合でも、クラスマッピングに含まれている必要があります。アノテーションでは、セグメンテーションされていない領域には background というクラス名が付けられます。 example body = { "name" "my predictions group", "description" "a description of my new predictions group", "classmapping" \[ {"annotated" "oak", "predicted" "tree"}, {"annotated" " background", "predicted" "not tree"}, {"annotated" "only in annotations"} ] } 3\ 予測のアップロード 少量の予測の場合、同期呼び出しで対応できます import requests from kognic auth requests auth session import requestsauthsession base url = "https //dataset app kognic com/v1/" client = requestsauthsession() predictions group uuid = " " openlabel content = {"openlabel" } data = { "sceneuuid" " ", "openlabelcontent" openlabel content, } try response = client session post( base url + f"predictions groups/{predictions group uuid}/predictions", json=data ) response raise for status() response json = response json() print(f"created prediction with uuid {response json\['data']}") except requests exceptions requestexception as e msg = e response text print(f"request error {e} {msg}") 大量の予測の場合は、非同期呼び出しを推奨します。以下の例では、 kognic auth ライブラリの非同期クライアントを使用して100件の非同期呼び出しを行います import asyncio from kognic auth httpx async client import httpxauthasyncclient base url = "https //dataset app kognic com/v1/" predictions group uuid = " " url = base url + f"predictions groups/{predictions group uuid}/predictions" openlabel content = {"openlabel" } max connections = 10 async def upload prediction(payload, session, sem) async with sem response = await session post(url, json=payload) response raise for status() return response json() get("data") async def main(n runs int) client = httpxauthasyncclient() session = await client session sem = asyncio semaphore(max connections) tasks = \[] for i in range(n runs) payload = {"sceneuuid" " ", "openlabelcontent" openlabel content} task = upload prediction(payload, session, sem) tasks append(task) responses = await asyncio gather( tasks) await session aclose() print(responses) if name == ' main ' asyncio run(main(100)) max connections を10より大きい値に設定すると動作しない場合があり、推奨されません。
