活用例

Examples

店舗モニタリング

機械学習サービス Google Cloud Vision API 活用サンプル

MAGELLAN BLOCKS を使えば、Google の強力な画像認識技術 Cloud Vision API をノンプログラミングで簡単に活用できます。店舗モニタリングと組み合わせることで、店舗の改善やマーケティングなど、多彩な用途に活用できます。

デモビデオ

店舗に設置したカメラから送られてくる画像を自動的に Cloud Vision API で分析し、分析結果を BigQuery に蓄積する例を紹介します。

店舗モニタリングー 機械学習サービス Google Cloud Vision API を活用したサンプル ー

解説

デモビデオで紹介したフローの詳細について解説します。

このフローでは、画像解析ブロックストリームインサートブロックを組み合わせて、画像解析結果を BigQuery のテーブルに格納しています。

  1. 画像解析ブロック: Google Cloud Storage (GCS) 上の画像を解析
  2. ストリームインサートブロック: データを BigQuery のテーブルに格納

なぜ、画像解析ブロックとストリームインサートブロックをつなげるだけで、このようなことが実現できるのでしょうか。以下、画像解析ブロック、ストリームインサートブロックについて、順に詳しく見てその理由を解説します。

画像解析ブロック

画像解析ブロックは、Google Cloud Vision API (Cloud Vision API) を使って、GCS 上の画像を解析します。Cloud Vision API は、解析結果を JSON 形式のデータで返してきます。画像解析ブロックでは、この解析結果を BLOCKS の変数に格納します。これにより、このブロックにつながれた以降のブロックでは、この変数で解析結果を参照できます。

vision_api_block

例えば、以下の画像を画像解析ブロックで解析してみます。

kumamoto_2
【熊本県 菊池渓谷】、経済産業省、クリエイティブ・コモンズ・ライセンス 表示4.0 国際

すると、以下のような JSON 形式のデータが返ってきます(わかりやすくするため、物体検知のみを有効にした画像解析結果です)。画像解析ブロックのデフォルトでは、この解析結果を変数アンダースコア(_)に格納します[1]

{
  "labelAnnotations": [
    {
      "mid": "/m/05fblh",
      "description": "habitat",
      "score": 0.96244305
    },
    {
      "mid": "/m/05h0n",
      "description": "nature",
      "score": 0.9445862
    },
    {
      "mid": "/m/0j2kx",
      "description": "waterfall",
      "score": 0.9099796
    },
    {
      "mid": "/m/03ktm1",
      "description": "body of water",
      "score": 0.89911616
    },
    {
      "mid": "/m/03ybsm",
      "description": "creek",
      "score": 0.89159125
    },
    {
      "mid": "/m/01fnns",
      "description": "vegetation",
      "score": 0.8860265
    },
    {
      "mid": "/m/0j6m2",
      "description": "stream",
      "score": 0.8816693
    },
    {
      "mid": "/m/038hg",
      "description": "green",
      "score": 0.88010365
    },
    {
      "mid": "/m/023bbt",
      "description": "wilderness",
      "score": 0.87627053
    },
    {
      "mid": "/m/0838f",
      "description": "water",
      "score": 0.86826664
    },
    {
      "mid": "/m/03kj4q",
      "description": "watercourse",
      "score": 0.8573946
    },
    {
      "mid": "/m/02py09",
      "description": "natural environment",
      "score": 0.8488707
    },
    {
      "mid": "/m/06cnp",
      "description": "river",
      "score": 0.84827423
    },
    {
      "mid": "/m/07j7r",
      "description": "tree",
      "score": 0.844367
    },
    {
      "mid": "/m/02mhj",
      "description": "ecosystem",
      "score": 0.8341271
    },
    {
      "mid": "/m/02zr8",
      "description": "forest",
      "score": 0.8069322
    },
    {
      "mid": "/m/090j23",
      "description": "water feature",
      "score": 0.7492971
    },
    {
      "mid": "/m/0hnc1",
      "description": "woodland",
      "score": 0.7100596
    },
    {
      "mid": "/m/0d8cn",
      "description": "rainforest",
      "score": 0.69635445
    },
    {
      "mid": "/m/09t49",
      "description": "leaf",
      "score": 0.6817611
    },
    {
      "mid": "/m/06gl1",
      "description": "rapid",
      "score": 0.6793933
    },
    {
      "mid": "/m/01cbzq",
      "description": "rock",
      "score": 0.6587309
    },
    {
      "mid": "/m/025s35_",
      "description": "ravine",
      "score": 0.6046754
    },
    {
      "mid": "/m/042g2h",
      "description": "old growth forest",
      "score": 0.5984761
    },
    {
      "mid": "/m/07yxk",
      "description": "valley",
      "score": 0.5657426
    },
    {
      "mid": "/m/01y3fy",
      "description": "jungle",
      "score": 0.55235815
    }
  ],
  "gcs_url": "gs://my-storage-1703/vision-api/kumamoto_2.jpg",
  "timestamp": 1494307972.0
}

解析結果の詳細は、「画像解析ブロックの画像の解析結果 」でまとめています。また、「検知する情報」ごとの解析結果の具体例を「画像解析ブロック サンプル」でまとめています。

ストリームインサートブロック

ストリームインサートブロックは、BigQuery のストリーミングインサート機能を使って、BigQuery のテーブルへレコードを追加します。追加するデータは、変数アンダースコア(_)に格納されたデータです[2]

stream_insert_block

先ほど解説したとおり、画像解析ブロックの出力(画像の解析結果)は、変数アンダースコア(_)でした。一方、ストリームインサートブロックの入力は、変数アンダースコア(_)です。

よって、画像解析ブロック、ストリームインサートブロックの順につなげると、画像解析ブロックの出力とストリームインサートの入力がつながります。これは、Vision API による画像の解析結果が、画像解析ブロックからストリームインサートブロックに流れることを意味します。

connecting_blocks

なお、BigQuery のテーブルは、フローの実行前に準備してください。スキーマは、「 google-cloud-vision-api-bigquery-schema.json」をダウンロードしてお使いください。スキーマの詳細は、Cloud Vision API のリファレンス を参照してください。

クエリーの例

BigQuery に蓄積された Vision API の解析結果はクエリーを発行することでさまざまな活用が考えられます。

例えば、顔検知の結果をカウントするとカメラに映っている人の数を数えられます(顔が映っている人物のみ)。

SELECT timestamp, COUNT(faceAnnotations.detectionConfidence) as face_count
FROM [vision.annotations]
GROUP BY timestamp
ORDER BY timestamp

顔検知のデータ形式は、「画像解析ブロックの画像の解析結果 > 顔検知」を参照してください。

以下は、検知する情報ごとのクエリーの例です。

ランドマーク検知:

SELECT
  gcs_url,
  timestamp,
  landmarkAnnotations.description as landmark}description
FROM [vision.annotations]
ORDER BY timestamp desc

ランドマーク検知のデータ形式は、「画像解析ブロックの画像の解析結果 > ランドマーク検知」を参照してください。

ロゴ検知:

SELECT
  gcs_url,
  timestamp,
  GROUP_CONCAT_UNQUOTED( logoAnnotations.description, ' / ' ) as logo_description
FROM [vision.annotations]
GROUP BY
  gcs_url,
  timestamp
ORDER BY timestamp desc

ロゴ検知のデータ形式は、「画像解析ブロックの画像の解析結果 > ロゴ検知」を参照してください。

物体検知:

SELECT
  gcs_url,
  timestamp,
  GROUP_CONCAT_UNQUOTED( labelAnnotations.description, ' / ' ) as label_description
FROM [vision.annotations]
GROUP BY
  gcs_url,
  timestamp
ORDER BY timestamp desc

物体検知のデータ形式は、「画像解析ブロックの画像の解析結果 > 物体検知」を参照してください。

OCR (テキスト) 検知:

SELECT
  gcs_url,
  timestamp,
  textAnnotations.description as text_description
FROM [vision.annotations]
ORDER BY timestamp desc

OCR (テキスト) 検知のデータ形式は、「画像解析ブロックの画像の解析結果 > OCR (テキスト) 検知」を参照してください。


[1] 結果を格納する変数は、「結果を格納する変数」プロパティで自由に変更できます。

[2] 追加するデータを参照する変数は、「投入データの変数」プロパティで自由に変更できます