> 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`   | 距離を測定する1つ目の物体のクラス名。検出予測内のクラス名と完全に一致している必要があります。ブロックは検出結果からこのクラス名を検索し、そのバウンディングボックスを距離計算に使用します。例: 検出結果に '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\[*[*`instance_segmentation_prediction`*](/workflows/ja/gaido/developer-guide/kinds/instance-segmentation-prediction.md)*,* [*`object_detection_prediction`*](/workflows/ja/gaido/developer-guide/kinds/object-detection-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` ([`integer`](/workflows/ja/gaido/developer-guide/kinds/integer.md)): 整数値。
  * `distance_pixel` ([`integer`](/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": "car",
	    "object_2_class_name": "person",
	    "reference_axis": "vertical",
	    "calibration_method": "<block_does_not_provide_example>",
	    "reference_object_class_name": "reference-object",
	    "reference_width": 2.5,
	    "reference_height": 2.5,
	    "pixel_ratio": 100
	}
```

</details>
