個人用防護具(PPE)検出ガイド

コンソールの人物ぼかしモデルカード

個人用防護具(PPE)検出器モデルは、職場や地域の環境で危険への曝露を制限する機器の存在を確認するのに役立ちます。

このモデルは、特定の人物とその人物が着用している PPE アイテム(手袋、マスク、ヘルメット)を検出します。このモデルは、PPE アイテムを検出し、アイテムが対応する人体の部位を覆っているかどうかを判断します。モデルは、このカバレッジ情報を [0, 1] の範囲のカバレッジ スコアとして報告します。このモデルは、動画ストリームを入力として受け取ります。モデルは、BigQuery で表示できるプロトコル バッファとして検出結果を出力します。モデルは 1 FPS で実行されます。

PPE 検出演算子には、設定できる 3 つの制御パラメータがあります。

  • 頭部カバー: オペレーターは、頭部カバーに関連する PPE アイテム情報を出力します。この値は Google Cloud コンソールで設定するか、PersonalProtectiveEquipmentDetectionConfigenableHeadCoverageDetection を true に設定します。
  • 顔面カバー: オペレーターは、顔の覆いに関する PPE アイテム情報を出力します。この値は Google Cloud コンソールで設定するか、PersonalProtectiveEquipmentDetectionConfigenableFaceCoverageDetection を true に設定します。
  • 手袋: オペレーターは、手覆い関連の PPE アイテム情報を出力します。この値は Google Cloud コンソールで設定するか、PersonalProtectiveEquipmentDetectionConfigenableHandsCoverageDetection を true に設定します。

PPE 検出モデルアプリの仕様

次の手順で、Google Cloud コンソールで PPE 検出モデルを作成します。

コンソール

コンソールでアプリを作成する Google Cloud

  1. PPE 検出アプリを作成するには、アプリを作成するの手順に沿って操作します。

    [アプリケーション] タブに移動

PPE 検出モデルを追加する

  1. モデルノードを追加するときに、事前トレーニング済みモデルのリストから PPE 検出機能を選択します。

  2. オプション メニューで、検出する PPE の種類を設定します。

BigQuery コネクタを追加する

  1. 出力を使用するには、アプリを BigQuery コネクタに接続します。

    BigQuery コネクタの使用方法については、BigQuery にデータを接続して保存するをご覧ください。BigQuery の料金については、BigQuery の料金ページをご覧ください。

BigQuery で出力結果を表示する

モデルが BigQuery にデータを出力したら、BigQuery ダッシュボードで出力アノテーションを表示します。

BigQuery パスを指定しなかった場合、Vertex AI Vision の Studio ページでシステムによって作成されたパスを確認できます。

  1. Google Cloud コンソールで、[BigQuery] ページを開きます。

    BigQuery に移動

  2. ターゲット プロジェクト、データセット名、アプリケーション名の横にある [展開] を選択します。

    BigQuery でアプリテーブルを選択する

  3. テーブルの詳細ビューで [プレビュー] をクリックします。結果は [アノテーション] 列に表示されます。出力形式の詳細については、モデル出力をご覧ください。

アプリは結果を時系列で保存します。最も古い結果がテーブルの先頭に、最新の結果がテーブルの末尾に追加されます。最新の結果を確認するには、ページ番号をクリックして最後のテーブル ページに移動します。

モデル出力

モデルの出力には、タイムスタンプ、検出ボックス、ボックスに対応するオブジェクトラベル、そのオブジェクトの信頼度スコアが含まれます。出力ストリームのレートのレートは 1 秒あたり 1 フレームです。

モデルの出力は、動画フレームと PPE 検出予測結果に関する情報が含まれるプロトコル バッファ形式です。このモデルの目的は、作業者が保護具を適切に着用しているかどうかを確認することです。その結果、モデルは人物とその人物が着用している PPE の検出に重点を置きます。モデルの出力は人物検出に重点を置いています。検出された人物ごとに、その人物の周囲の PPE と、各機器のカバレッジ スコアが一覧表示されます。

次のプロトコル バッファの例では、次の点に注意してください。

  • 現在の時刻 - 推論結果が生成された時刻をタイムスタンプで示します。
  • 検出された人物 - 人物が特定された 1 つのボックス、PPE が特定された複数のボックス、各身体部位のカバレッジ スコアを含むメインの検出結果。
  • 人物の識別ボックス - 境界ボックス、信頼度スコア、人物エンティティ。
  • PPE の識別ボックス - 境界ボックス、信頼度スコア、PPE エンティティ。

アノテーション出力の JSON オブジェクトの例

{
  "currentTime": "2022-11-10T21:02:13.499255040Z",
  "detectedPersons": [
    {
      "personId": "0",
      "detectedPersonIdentifiedBox": {
        "boxId": "0",
        "normalizedBoundingBox": {
          "xmin": 0.486749,
          "ymin": 0.35927793,
          "width": 0.048630536,
          "height": 0.21746585
        },
        "confidenceScore": 0.31775203,
        "personEntity":{
          "personEntityId":"0"
        }
      },
      "detected_ppe_identified_boxes": {
        "normalized_bounding_box": {
          "xmin": 0.07268746,
          "ymin": 0.80575824,
          "width": 0.22973709,
          "height": 0.18754286
        },
        "confidence_score": 0.45171335,
        "ppe_entity": {
          "ppe_label_string": "Glove",
          "ppe_supercategory_label_string": "Hand Coverage"
        }
      },
      "detected_ppe_identified_boxes":{
        "normalized_bounding_box":{
          "xmin": 0.35457548,
          "ymin": 0.016402662,
          "width": 0.31828704,
          "height": 0.18849815
        },
        "confidence_score": 0.44129524,
        "ppe_entity":{
          "ppe_label_string": "Helmet",
          "ppe_supercategory_label_string": "Head Coverage"
          }
      }
    }
  ]
}

プロトコル バッファの定義

// Output format for Personal Protective Equipment Detection Operator
message PersonalProtectiveEquipmentDetectionOutput {
 // Current timestamp
 protobuf.Timestamp current_time = 1;

 // The entity info for annotations from person detection prediction result
 message PersonEntity {

   // Entity id
   int64 person_entity_id = 1;
 }

 // The entity info for annotations from PPE detection prediction result
 message PPEEntity {
   // Label id
   int64 ppe_label_id = 1;
   // Human readable string of the label (Examples: helmet, glove, mask)
   string ppe_label_string = 2;
   // Human readable string of the super category label (Examples: head_cover,
   // hands_cover, face_cover)
   string ppe_supercategory_label_string = 3;
   // Entity id
   int64 ppe_entity_id = 4;
 }

 // Bounding Box in the normalized coordinates
 message NormalizedBoundingBox {
   // Min in x coordinate
   float xmin = 1;
   // Min in y coordinate
   float ymin = 2;
   // Width of the bounding box
   float width = 3;
   // Height of the bounding box
   float height = 4;
 }

 // PersonIdentified box contains the location and the entity info of the
 // person
 message PersonIdentifiedBox {
   // An unique id for this box
   int64 box_id = 1;
   // Bounding Box in the normalized coordinates
   NormalizedBoundingBox normalized_bounding_box = 2;
   // Confidence score associated with this box
   float confidence_score = 3;
   // Person entity info
   PersonEntity person_entity = 4;
 }

 // PPEIdentified box contains the location and the entity info of the PPE
 message PPEIdentifiedBox {
   // An unique id for this box
   int64 box_id = 1;
   // Bounding Box in the normalized coordinates
   NormalizedBoundingBox normalized_bounding_box = 2;
   // Confidence score associated with this box
   float confidence_score = 3;
   // PPE entity info
   PPEEntity ppe_entity = 4;
 }

 // Detected Person contains the detected person and their associated
 // PPE and their protecting information
 message DetectedPerson {
   // The id of detected person
   int64 person_id = 1;
   // The info of detected person identified box
   PersonIdentifiedBox detected_person_identified_box = 2;
   // The info of detected person associated ppe identified boxes
   repeated PPEIdentifiedBox detected_ppe_identified_boxes = 3;

   // Coverage score for each body part


   // Coverage score for face
   optional float face_coverage_score = 4;
   // Coverage score for eyes
   optional float eyes_coverage_score = 5;
   // Coverage score for head
   optional float head_coverage_score = 6;
   // Coverage score for hands
   optional float hands_coverage_score = 7;
   // Coverage score for body
   optional float body_coverage_score = 8;
   // Coverage score for feet
   optional float feet_coverage_score = 9;
 }

 // A list of DetectedPersons
 repeated DetectedPerson detected_persons = 2;
}

ベスト プラクティスと制限事項

PPE 検出機能を使用する際に最良の結果を得るには、データの取得とモデルの使用時に次の点を考慮してください。

ソースデータに関する推奨事項

推奨: 可能であれば、検出対象を静止させてカメラに向けます。

PPE 検出機能で正しく処理できる画像データのサンプル:

顔を覆ってカメラに向かっている人のサンプル画像
画像の出典: Ani KolleshiUnsplash より。
顔を覆ってカメラに向かっている人物のサンプル画像
画像の出典: AhsanizationUnsplash より。
顔を覆ってカメラに向かっている人のサンプル画像
画像の出典: Anastasiia ChepinskaUnsplash より。

推奨されない: フレーム内の重要な PPE アイテムが小さすぎる画像データは避けてください。

PPE 検出機能で正しく処理できない画像データの例:

検出できないほど小さい PPE アイテムのサンプル画像
画像の出典: Josue Isai Ramos FigueroaUnsplash より

推奨されない: 主な PPE アイテムを珍しい視点や不規則な角度から撮影した画像データは避けてください。

PPE 検出機能で正しく処理できない画像データの例:

検出できないほど珍しい角度から撮影された PPE アイテムのサンプル画像
画像の出典: Niclas MoserUnsplash より。

制限事項

  • 解像度: 推奨される入力動画の最大解像度は 1,920 x 1,080、最小解像度は 160 x 120 です。
  • 検出可能な最小オブジェクト サイズ: フレームサイズの 5% 未満を占有するシーン内のオブジェクトはすべて無視されます。
  • 照明: 動画の照明は通常の状態である必要があります。動画データの明るさや暗さが極端な場合、検出機能のパフォーマンスが低下することがあります。
  • PPE アイテムの配置: PPE モデルは、ユーザーが PPE アイテムを適切に使用しているかどうかを分析することに重点を置いています。その結果、PPE を着用していない場合は、モデルはそのアイテムを無視します。
  • PPE アイテムの種類: このモデルは、医療用 PPE アイテムではなく、建設用保護具に重点を置いています。そのため、医療センターや病院では検出機能がうまく機能しないことがあります。
  • カスタム PPE タイプ: PPE モデルは、お客様が定義した PPE アイテムをサポートしていません。このモデルは、ヘルメット、マスク、手袋の検出をサポートしています。

このリストはすべてを網羅しているわけではなく、これらの制限と機能は今後のプロダクトの変更によって変わる可能性があります。