> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/models/ja/supported-models/l2cs-net.md).

# L2CS-Net

L2CS-Net は、顔を検出し、各顔の yaw と pitch の角度を予測する視線方向推定モデルです。これを当社の [Serverless Cloud API](https://docs.roboflow.com/deployment/roboflow-cloud/serverless-api).

{% hint style="warning" %}
**セルフホスト型 Inference では非推奨です。** 視線検出は非推奨になりました [Roboflow Inference](https://docs.roboflow.com/deployment/self-hosted/self-hosted) MediaPipe 依存関係が削除されたときに。影響を受けるバージョンでは、 `/gaze/gaze_detection` エンドポイントと `Gaze` モデルクラスは `FeatureDeprecatedError` （HTTP 410 Gone）を発生させ、スタブエンドポイントは削除予定です。 `CORE_MODEL_GAZE_ENABLED=False` に設定すると、完全に無効化できます。この機能が必要な場合は Roboflow にお問い合わせください。
{% endhint %}

## L2CS-Net API

HTTP エンドポイントを使って L2CS-Net を直接実行するには、 `curl`、または [`inference-sdk`](https://docs.roboflow.com/reference/inference/inference-sdk) ラッパーを使用します。

{% tabs %}
{% tab title="HTTP（curl）" icon="webhook" %}
{% stepper %}
{% step %}

### APIキーを取得する

Roboflow アカウントを作成し、 [Roboflow API 設定ページ](https://app.roboflow.com/settings/api) でキーを見つけ、シェルで利用できるようにします。

```bash
export ROBOFLOW_API_KEY="your-key-here"
```

{% endstep %}

{% step %}

### モデルを実行する

次を呼び出します `/gaze/gaze_detection` エンドポイントを `curl`:

```bash
curl --location 'https://serverless.roboflow.com/gaze/gaze_detection' \\
  --header 'Content-Type: application/json' \\
  --header "Authorization: Bearer $ROBOFLOW_API_KEY" \\
  --data '{
    "image": {"type": "url", "value": "https://media.roboflow.com/inference/man.jpg"}
  }'
```

{% endstep %}
{% endstepper %}
{% endtab %}

{% tab title="SDK（Python）" icon="python" %}
{% stepper %}
{% step %}

### APIキーを取得する

Roboflow アカウントを作成し、 [Roboflow API 設定ページ](https://app.roboflow.com/settings/api) でキーを見つけ、シェルで利用できるようにします。

```bash
export ROBOFLOW_API_KEY="your-key-here"
```

{% endstep %}

{% step %}

### 依存関係をインストールする

このパッケージは次のモデルを呼び出します:

```bash
pip install -U inference-sdk supervision
```

{% endstep %}

{% step %}

### モデルを実行する

以下のコードサンプルは `detect_gazes`を呼び出します。これは同じ `/gaze/gaze_detection` エンドポイントにアクセスします:

```python
import os
import supervision as sv
from inference_sdk import InferenceHTTPClient, InferenceConfiguration

image = sv.load_image_from_url("https://media.roboflow.com/inference/man.jpg")

client = InferenceHTTPClient(
    api_url="https://serverless.roboflow.com",
    api_key=os.environ["ROBOFLOW_API_KEY"],
).select_api_v1().configure(InferenceConfiguration(api_key_transport="header"))

result = client.detect_gazes(image)

for prediction in result[0]["predictions"]:
    face = prediction["face"]
    yaw = prediction["yaw"]
    pitch = prediction["pitch"]
    print(f"Face at ({face['x']}, {face['y']}) - yaw: {yaw:.3f}, pitch: {pitch:.3f}")
```

{% endstep %}
{% endstepper %}
{% endtab %}
{% endtabs %}

## L2CS-Net の推論速度

次で測定したレイテンシー [Roboflow Inference](https://docs.roboflow.com/deployment/self-hosted/self-hosted) 1台のNVIDIA L4、バッチサイズ1、ウォームアップ後の平均で測定。

<table data-search="false"><thead><tr><th>モデル</th><th>レイテンシー（ms）</th></tr></thead><tbody><tr><td><code>l2cs-net</code></td><td>6.0</td></tr></tbody></table>

モデルが入力として想定している、単一の顔切り抜きで測定されています。

{% hint style="info" %}
設定する `api_url` をデプロイ先に合わせます:

* `https://serverless.roboflow.com` サーバーレスクラウドAPI用。
* `http://localhost:9001` ローカルの [Inference](https://docs.roboflow.com/deployment/self-hosted/self-hosted) サーバー用。
* あなたの [Dedicated Deployment](https://docs.roboflow.com/deployment/roboflow-cloud/dedicated-deployments) プライベートエンドポイント用のURL。
  {% endhint %}

レスポンスには、 `予測結果` （各項目に `face` バウンディングボックス、 `ランドマーク、`, `yaw、`、 `pitch` （ラジアン単位）、 `時間`, `time_face_det`、 `time_gaze_det`.

セルフホストでのデプロイや追加例については、 [Roboflow Inference ドキュメント](https://docs.roboflow.com/deployment/self-hosted/self-hosted).

## セルフホスト型 Inference で L2CS-Net を実行する

L2CS-Net はローカルの [Inference](https://docs.roboflow.com/deployment/self-hosted/self-hosted) サーバーでも提供できます:

```bash
pip install inference inference-cli inference-sdk
inference server start  # http://localhost:9001 を提供
```

```python
import os
from inference_sdk import InferenceHTTPClient

client = InferenceHTTPClient(
    api_url="http://localhost:9001",
    api_key=os.environ["ROBOFLOW_API_KEY"],
)

client.detect_gazes(inference_input="./image.jpg")
```

モデルは、検出された各顔ごとに1件のエントリを返し、顔 बॉックスとランドマークに加えて `yaw、` と `pitch` ラジアン単位の値も含みます:

```python
[{'face': {'x': 1107.0, 'y': 1695.5, 'width': 1056.0, 'height': 1055.0,
           'confidence': 0.9356, 'class': 'face', 'class_id': 0,
           'landmarks': [{'x': 902.0, 'y': 1441.0}, {'x': 1350.0, 'y': 1449.0},
                         {'x': 1137.0, 'y': 1692.0}, {'x': 1124.0, 'y': 1915.0},
                         {'x': 625.0, 'y': 1551.0}, {'x': 1565.0, 'y': 1571.0}]},
  'pitch': 0.0295,
  'yaw': -0.0410}]
```

yaw と pitch を空間上の点に変換する際は、顔がカメラからおよそ1メートル離れ、縦約250 mm であると仮定します。これは Web カメラ構成の妥当な出発点です。

この [視線検出の例](https://github.com/roboflow/inference) Inference リポジトリでは、Web カメラ上で L2CS-Net を実行し、人がどこを見ているかを計算し、フレームに注釈を付ける方法を示しています。

### Workflowsの実行モード

次の環境で使用する場合： [Workflow](https://docs.roboflow.com/workflows)、視線検出は次の2つのモードのいずれかで動作します:

* **ローカル実行**：モデルはあなたの Inference サーバー上で実行されます。
* **リモート実行**：モデルは、次を介してリモートInferenceサーバー上でHTTP経由で呼び出されます： `detect_gazes()` クライアントメソッド。

## 参考資料

* [視線検出とアイ・トラッキング：ハウツーガイド](https://blog.roboflow.com/gaze-direction-position/)
