> 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/workflows/ja/burokku/blocks/classical-computer-vision/distance-measurement.md).

# 距離測定

2D平面上でバウンディングボックス座標を使用して、検出された2つのオブジェクト間の距離を計算します。指定した軸に沿った水平方向または垂直方向の距離測定をサポートし、2つのキャリブレーション方法（既知の寸法を持つ参照オブジェクト、またはピクセル対センチメートル比）でピクセル距離を実世界の測定値に変換し、空間解析、オブジェクト間隔の評価、安全監視、計測ワークフローに利用できます。

## このブロックの仕組み

このブロックは、バウンディングボックスの位置を解析し、ピクセル距離を実世界の単位（センチメートル）に変換することで、検出された2つのオブジェクト間の距離を測定します。このブロックは次の処理を行います：

1. 画像内のオブジェクトに対するバウンディングボックスとクラス名を含む検出予測を受け取ります
2. object\_1\_class\_name と object\_2\_class\_name というクラス名を使用して、2つの対象オブジェクトを識別します：
   * すべての検出結果を検索し、指定されたクラス名に一致するバウンディングボックスを見つけます
   * 両方のオブジェクトのバウンディングボックス座標（x\_min, y\_min, x\_max, y\_max）を抽出します
   * 検出結果内で両方のオブジェクトが見つかったことを検証します
3. 距離測定のためにオブジェクトの位置を検証します：
   * バウンディングボックスが重なっていないか確認します（重なっている場合、距離は0に設定されます）
   * 指定した参照軸（水平方向または垂直方向）に沿ってオブジェクトの間に隙間があるか確認します
   * オブジェクトが重なっている場合、または選択した軸に対して位置が不適切な場合は距離0を返します
4. キャリブレーション方法を判定し、キャリブレーションを実行します：

   **参照オブジェクトのキャリブレーションの場合：**

   * 既知の実世界寸法を持つ参照オブジェクト（reference\_object\_class\_name）を検出結果から検索します
   * 参照オブジェクトのバウンディングボックス座標を抽出します
   * 参照オブジェクトの寸法をピクセル単位で測定します（幅と高さ）
   * ピクセル対センチメートル比を計算します：
     * 幅の比：reference\_width\_pixels / reference\_width (cm)
     * 高さの比：reference\_height\_pixels / reference\_height (cm)
   * 幅と高さの比から平均ピクセル比を算出し、より正確なスケーリングを行います
   * 平均比を使用して、すべてのピクセル測定値をセンチメートルに変換します

   **ピクセル対センチメートル比のキャリブレーションの場合：**

   * 提供された pixel\_ratio を直接使用します（例：100ピクセル = 1センチメートル）
   * その比率を適用して、ピクセル距離をセンチメートル距離に変換します
   * ピクセルと実世界のスケールがすでに分かっている、またはキャリブレーション済みの場合に適しています
5. 指定した軸に沿った2つのオブジェクト間のピクセル距離を測定します：
   * **垂直距離の場合**: Y軸に沿った距離（垂直方向の分離）を計算します
     * バウンディングボックス間の垂直方向の隙間を見つけます
     * 上側のオブジェクトの下端から下側のオブジェクトの上端までの距離（またはその逆）を測定します
     * バウンディングボックスの位置を考慮して、実際の隙間距離を求めます
   * **水平方向距離の場合**: X軸に沿った距離（水平方向の分離）を計算します
     * バウンディングボックス間の水平方向の隙間を見つけます
     * 左側のオブジェクトの右端から右側のオブジェクトの左端までの距離（またはその逆）を測定します
     * バウンディングボックスの位置を考慮して、実際の隙間距離を求めます
6. ピクセル距離をセンチメートル距離に変換します：
   * ピクセル対センチメートル比（キャリブレーションから得た値）でピクセル距離を割ります
   * 実世界の距離測定値をセンチメートルで出力します
7. ピクセル距離とセンチメートル距離の両方を返します

このブロックは、透視歪みが最小になる垂直なカメラ視点（トップダウンまたは正面）を前提としており、正確な2D距離測定を保証します。距離は、オブジェクトの中心間の対角距離ではなく、指定した軸（水平方向または垂直方向）に沿ったバウンディングボックス間の隙間として測定されます。キャリブレーション処理では、既知の寸法を持つ参照オブジェクト（異なるスケールで動作するため柔軟性が高い）または直接のピクセル比（より簡単だが事前キャリブレーションが必要）のいずれかを使用して、ピクセル測定値を実世界の単位に変換します。これにより、監視、分析、制御アプリケーション向けの正確な空間測定が可能になります。

## 一般的な使用例

* **安全監視**: オブジェクト間の距離を測定して安全な間隔を確保します（例：人と人の距離を測ってソーシャルディスタンスを確保する、車両間隔を監視する、産業現場で安全な隙間を確保する）ことで、安全監視ワークフローを実現します
* **倉庫管理**: 保管・物流における品目やオブジェクト間の間隔を測定します（例：荷物間の隙間を測る、棚の間隔を評価する、オブジェクトの配置を監視する）ことで、倉庫管理ワークフローを実現します
* **品質管理**: 製造および組み立てにおけるオブジェクトの間隔と位置を確認します（例：部品間の隙間を測る、組立ラインの間隔を検証する、配置精度を確認する）ことで、品質管理ワークフローを実現します
* **交通分析**: 交通監視において車両やオブジェクト間の距離を測定します（例：車両間隔を測る、安全な追従距離を評価する、交通の隙間を監視する）ことで、交通分析ワークフローを実現します
* **小売分析**: 小売環境における商品や顧客間の間隔を測定します（例：棚上の商品間隔を測る、顧客間の距離を評価する、陳列配置を監視する）ことで、小売分析ワークフローを実現します
* **農業モニタリング**: 農業監視において作物、植物、または農業対象物の間隔を測定します（例：作物の間隔を測る、植物間の隙間を評価する、圃場の配置を監視する）ことで、農業監視ワークフローを実現します

## 他のブロックへの接続

このブロックは検出予測を受け取り、distance\_cm と distance\_pixel の値を出力します：

* **物体検出またはインスタンスセグメンテーションブロックの後** 検出されたオブジェクト間の距離を測定するために（例：検出されたオブジェクト間の距離を測る、検出結果から間隔を計算する、オブジェクトの関係を分析する）ことで、検出から計測へのワークフローを実現します
* **ロジックブロックの前** Continue If のように、距離測定に基づいて判断します（例：距離が安全なら継続する、間隔要件に基づいてフィルタリングする、距離しきい値を使って判断する）ことで、距離ベースの判断ワークフローを実現します
* **分析ブロックの前** オブジェクト間の空間関係を分析するために（例：オブジェクト間隔を分析する、距離測定を処理する、空間データを扱う）ことで、空間分析ワークフローを実現します
* **通知ブロックの前** 距離がしきい値を超えた場合に警告するために（例：間隔が近すぎるとアラートを送信する、距離違反を通知する、測定値に基づいてアクションをトリガーする）ことで、距離ベースの通知ワークフローを実現します
* **データ保存ブロックの前** 距離測定を記録するために（例：距離測定値を保存する、間隔データをログに記録する、空間メトリクスを記録する）ことで、距離測定ログワークフローを実現します
* **計測パイプラインでは** 距離計算が、より大きな空間解析ワークフローの一部である場合（例：解析パイプラインで距離を測定する、監視システムで間隔を計算する、チェーン内で空間測定を処理する）に、空間計測パイプラインワークフローを実現します

## 要件

このブロックには、バウンディングボックスとクラス名を含む検出予測が必要です。画像は、透視歪みを最小限に抑え、正確な2D距離測定を保証するために、垂直なカメラ視点（トップダウンまたは正面）で撮影する必要があります。参照オブジェクトのキャリブレーションでは、既知の寸法を持つ参照オブジェクトが検出結果に含まれている必要があります。ピクセル対センチメートル比のキャリブレーションでは、カメラ構成に対してピクセル比が事前にキャリブレーション済み、または既知である必要があります。オブジェクトは重なっていてはならず、指定された測定軸（水平方向または垂直方向）に沿って隙間が必要です。このブロックは、正確な2D測定のためにオブジェクトが同一平面上にあることを前提とします。

### 型識別子

ステップで次の識別子を使用してください `"type"` フィールド： `roboflow_core/distance_measurement@v1` ワークフローにこのブロックをステップとして追加するには。

### プロパティ

| **名前**                        | **型**   | **説明**                                                                                                                                                                                                                                                                                                                                                                                    | 参照 |
| ----------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -- |
| `name`                        | `str`   | このステップの一意の識別子を入力してください。                                                                                                                                                                                                                                                                                                                                                                   | ❌  |
| `object_1_class_name`         | `str`   | 距離を測定する最初のオブジェクトのクラス名。検出予測内のクラス名と完全に一致する必要があります。このブロックは検出結果からこのクラス名を検索し、そのバウンディングボックスを距離計算に使用します。例：検出に 'person'、'car'、'bicycle' というラベルのオブジェクトが含まれている場合、人から別のオブジェクトまでの距離を測定するには 'person' を使用します。クラス名は大文字小文字を区別し、完全一致である必要があります。                                                                                                                                                            | ❌  |
| `object_2_class_name`         | `str`   | 距離を測定する2つ目のオブジェクトのクラス名。検出予測内のクラス名と完全に一致する必要があります。このブロックは検出結果からこのクラス名を検索し、そのバウンディングボックスを距離計算に使用します。例：検出に 'person'、'car'、'bicycle' というラベルのオブジェクトが含まれている場合、別のオブジェクトから人までの距離を測定するには 'person' を使用します。クラス名は大文字小文字を区別し、完全一致である必要があります。このブロックは、指定した reference\_axis に沿った object\_1 と object\_2 の隙間を測定します。                                                                                         | ❌  |
| `reference_axis`              | `str`   | 2つのオブジェクト間の距離を測定する軸です。オプション：'horizontal' はX軸に沿った距離（オブジェクト間の左右の隙間、横並びのオブジェクトに有用）を測定し、'vertical' はY軸に沿った距離（オブジェクト間の上下の隙間、縦に積み重なったオブジェクトに有用）を測定します。距離は、選択した軸に沿ったバウンディングボックス間の隙間として測定されます。正確に測定するには、オブジェクトがこの軸上に隙間を持ち（重なっていない）必要があります。オブジェクトの向きに応じて選択してください：横並びのオブジェクトには horizontal、縦に積み重なったオブジェクトには vertical。                                                                                | ❌  |
| `calibration_method`          | `str`   | ピクセル測定値を実世界の単位（センチメートル）にキャリブレーションする方法です。オプション：'reference object'（画像内の既知の寸法を持つ参照オブジェクトを使用して、ピクセル対センチメートル比を自動計算します。さまざまなスケールに柔軟に対応）、または 'pixel to centimeter'（事前にキャリブレーションされたピクセル比を直接使用します。より簡単ですが、既知のスケールが必要です）。参照オブジェクト方式では、既知の幅と高さを持つ参照オブジェクトが検出結果に存在している必要があります。ピクセル比方式では、カメラ構成に対して pixel\_ratio が事前にキャリブレーションされている必要があります。                                                             | ❌  |
| `reference_object_class_name` | `str`   | キャリブレーションに使用する参照オブジェクトのクラス名（calibration\_method が 'reference object' の場合のみ使用）。検出予測内のクラス名と完全に一致する必要があります。参照オブジェクトには、既知の実世界寸法（reference\_width と reference\_height）が必要です。このブロックは、参照オブジェクトのピクセル寸法を測定し、すべての距離測定を変換するためのピクセル対センチメートル比を計算します。デフォルトは 'reference-object' です。参照オブジェクトは検出結果に含まれている必要があり、はっきり見えて正しく検出されている必要があります。                                                                   | ✅  |
| `reference_width`             | `float` | 参照オブジェクトの実世界での幅（センチメートル単位）（calibration\_method が 'reference object' の場合のみ使用）。0より大きい必要があります。これは参照オブジェクトの実際の物理的な幅です。このブロックは、参照オブジェクトの幅をピクセルで測定し、この値で割ってピクセル対センチメートル比を計算します。最良の結果のために正確な測定値を使用してください。例：参照オブジェクトが幅2.5cmのカードであれば、2.5を使用します。reference\_width と reference\_height は、別々の幅・高さの比を計算し、より正確なスケーリングのために平均化するために使用されます。                                                                 | ✅  |
| `reference_height`            | `float` | 参照オブジェクトの実世界での高さ（センチメートル単位）（calibration\_method が 'reference object' の場合のみ使用）。0より大きい必要があります。これは参照オブジェクトの実際の物理的な高さです。このブロックは、参照オブジェクトの高さをピクセルで測定し、この値で割ってピクセル対センチメートル比を計算します。最良の結果のために正確な測定値を使用してください。例：参照オブジェクトが高さ2.5cmのカードであれば、2.5を使用します。reference\_width と reference\_height は、別々の幅・高さの比を計算し、より正確なスケーリングのために平均化するために使用されます。                                                             | ✅  |
| `pixel_ratio`                 | `float` | 画像のピクセル対センチメートル変換比（calibration\_method が 'pixel to centimeter' の場合のみ使用）。0より大きい必要があります。この値は、何ピクセルが1センチメートルに相当するかを表します。例：100ピクセル = 1センチメートルの場合、100を使用します。このブロックは、ピクセル距離をこの比率で割ってセンチメートルに変換します。この比率は、特定のカメラ設定、視距離、画像解像度に対して事前にキャリブレーションしておく必要があります。一般的な値は、カメラ距離と解像度に応じて10〜500の範囲です。比率が高いほど1センチメートルあたりのピクセル数が多くなり（オブジェクトが大きく見え、カメラが近い）、比率が低いほど1センチメートルあたりのピクセル数が少なくなります（オブジェクトが小さく見え、カメラが遠い）。 | ✅  |

この **参照** 列は、で利用可能な動的値を使ってプロパティをパラメータ化できる可能性を示します `ワークフロー` 実行時。参照 *バインディング* 詳細は。

### 入力と出力のバインディング

利用可能な接続は、そのバインディング種別によって異なります。どのバインディング種別が `距離測定` のバージョン `v1` あるか確認してください。

<details>

<summary>入力と出力のバインディング</summary>

* 入力
  * `predictions` (*Union\[*[*`object_detection_prediction`*](/workflows/ja/gaido/developer-guide/kinds/object-detection-prediction.md)*,* [*`instance_segmentation_prediction`*](/workflows/ja/gaido/developer-guide/kinds/instance-segmentation-prediction.md)*]*): 画像内のオブジェクトに対するバウンディングボックスとクラス名を含む検出予測。測定する2つのオブジェクト（object\_1\_class\_name と object\_2\_class\_name）の検出結果、そして必要に応じて参照オブジェクト（参照オブジェクトのキャリブレーション方法を使う場合）を含める必要があります。バウンディングボックスは、オブジェクト間の距離計算に使用されます。オブジェクト検出予測とインスタンスセグメンテーション予測の両方がサポートされています。検出結果には、オブジェクトを識別するための class\_name 情報が含まれている必要があります。
  * `reference_object_class_name` ([*`string`*](/workflows/ja/gaido/developer-guide/kinds/string.md)): キャリブレーションに使用する参照オブジェクトのクラス名（calibration\_method が 'reference object' の場合のみ使用）。検出予測内のクラス名と完全に一致する必要があります。参照オブジェクトには、既知の実世界寸法（reference\_width と reference\_height）が必要です。このブロックは、参照オブジェクトのピクセル寸法を測定し、すべての距離測定を変換するためのピクセル対センチメートル比を計算します。デフォルトは 'reference-object' です。参照オブジェクトは検出結果に含まれている必要があり、はっきり見えて正しく検出されている必要があります。
  * `reference_width` ([*`float`*](/workflows/ja/gaido/developer-guide/kinds/float.md)): 参照オブジェクトの実世界での幅（センチメートル単位）（calibration\_method が 'reference object' の場合のみ使用）。0より大きい必要があります。これは参照オブジェクトの実際の物理的な幅です。このブロックは、参照オブジェクトの幅をピクセルで測定し、この値で割ってピクセル対センチメートル比を計算します。最良の結果のために正確な測定値を使用してください。例：参照オブジェクトが幅2.5cmのカードであれば、2.5を使用します。reference\_width と reference\_height は、別々の幅・高さの比を計算し、より正確なスケーリングのために平均化するために使用されます。
  * `reference_height` ([*`float`*](/workflows/ja/gaido/developer-guide/kinds/float.md)): 参照オブジェクトの実世界での高さ（センチメートル単位）（calibration\_method が 'reference object' の場合のみ使用）。0より大きい必要があります。これは参照オブジェクトの実際の物理的な高さです。このブロックは、参照オブジェクトの高さをピクセルで測定し、この値で割ってピクセル対センチメートル比を計算します。最良の結果のために正確な測定値を使用してください。例：参照オブジェクトが高さ2.5cmのカードであれば、2.5を使用します。reference\_width と reference\_height は、別々の幅・高さの比を計算し、より正確なスケーリングのために平均化するために使用されます。
  * `pixel_ratio` ([*`float`*](/workflows/ja/gaido/developer-guide/kinds/float.md)): 画像のピクセル対センチメートル変換比（calibration\_method が 'pixel to centimeter' の場合のみ使用）。0より大きい必要があります。この値は、何ピクセルが1センチメートルに相当するかを表します。例：100ピクセル = 1センチメートルの場合、100を使用します。このブロックは、ピクセル距離をこの比率で割ってセンチメートルに変換します。この比率は、特定のカメラ設定、視距離、画像解像度に対して事前にキャリブレーションしておく必要があります。一般的な値は、カメラ距離と解像度に応じて10〜500の範囲です。比率が高いほど1センチメートルあたりのピクセル数が多くなり（オブジェクトが大きく見え、カメラが近い）、比率が低いほど1センチメートルあたりのピクセル数が少なくなります（オブジェクトが小さく見え、カメラが遠い）。
* 出力
  * `distance_cm` ([`整数`](/workflows/ja/gaido/developer-guide/kinds/integer.md)）：整数値。
  * `distance_pixel` ([`整数`](/workflows/ja/gaido/developer-guide/kinds/integer.md)）：整数値。

</details>

<details>

<summary>JSON 定義の例</summary>

```json
{
	    "name": "<your_step_name_here>",
	    "type": "roboflow_core/distance_measurement@v1",
	    "predictions": "$steps.model.predictions",
	    "object_1_class_name": "車",
	    "object_2_class_name": "人",
	    "reference_axis": "垂直",
	    "calibration_method": "<ブロックは例を提供しません>",
	    "reference_object_class_name": "参照オブジェクト",
	    "reference_width": 2.5,
	    "reference_height": 2.5,
	    "pixel_ratio": 100
	}
```

</details>
