Video Intelligence APIのデモを試してみた

Video Intelligence API面白そうだったのでさっそくいくつか動画をアップして試してみました。

cloud.google.com

まずは先日に見に行ったイルミネーションの動画をCloud Storageにアップして、Video Intelligence APIで解析させてみました。

まずは全体のラベルから

f:id:hapoon:20170310161742p:plain

うん、まぁ間違ってない。
ほぼイルミネーションしか映ってないからね。

次にシーンが切り替わるごとのショットラベル。

f:id:hapoon:20170310162214p:plain

f:id:hapoon:20170310162240p:plain

これだけだと微妙なので、他の動画も試してみました。

渋谷のスクランブル交差点の動画。

f:id:hapoon:20170310173115p:plain

流石にここからじゃ人だとは認識できない様子。
右下に映る建物や市街地だということは認識できている。

f:id:hapoon:20170310173317p:plain

信号が変わって、車が映るようになると、ちゃんと車を認識できている。

f:id:hapoon:20170310173444p:plain

手前に映る自転車はしっかり認識できている。
奥の電車は残念ながら、輸送手段の乗り物としか認識できてない。

f:id:hapoon:20170310173657p:plain

少し後のこちらのシーンだとしっかり電車であることを認識できている。

f:id:hapoon:20170310173820p:plain

キュウリ、パプリカ、ズッキーニが認識できてる。


最後にAPIについて。

まず
ボディに

{
  "inputUri": "gs://hapoon-sample-1/movie/sample.mp4",
  "features": [
    "LABEL_DETECTION",
    "SHOT_CHANGE_DETECTION"
  ]
}

をつけて

https://videointelligence.googleapis.com/v1beta1/videos:annotate?key=YOUR_API_KEY_HERE

にリクエストをすると、

{
  "name": "asia-east1.4905105012973219553"
}

という形でレスポンスが返ってくるらしい。

レスポンスで返ってきた値を利用して

https://videointelligence.googleapis.com/v1/operations/asia-east1.4905105012973219553?key=YOUR_API_KEY_HERE

にリクエストを送ると、以下のようなレスポンスが返ってくる。

まだドキュメントが見れないので、確かなことはわからないけど、doneがtrueになったら解析完了ってことなのかな。
おそらくmetadata.annotationProgressで進行度が分かるからクライアント側の表示に使うことを想定している感じ。
そして肝心のラベルはresponse.annotationResultsに羅列されている。
全体のラベルかショットのラベルかはlevelで判定。
ショットラベルは開始時間と終了時間のオフセットがあって、それでどのショットのラベルかを判別する感じ。
ショットがいくつかなどの情報はshotAnnotationsに格納されている。

{
  "name": "asia-east1.4905105012973219553",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.videointelligence.v1beta1.AnnotateVideoProgress",
    "annotationProgress": [
      {
        "inputUri": "/hapoon-sample-1/movie/sample.mp4",
        "progressPercent": 100,
        "startTime": "2017-03-10T06:58:12.237347Z",
        "updateTime": "2017-03-10T06:58:51.115711Z"
      },
      {
        "inputUri": "/hapoon-sample-1/movie/sample.mp4",
        "progressPercent": 100,
        "startTime": "2017-03-10T06:58:12.237347Z",
        "updateTime": "2017-03-10T06:58:42.977887Z"
      }
    ]
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.videointelligence.v1beta1.AnnotateVideoResponse",
    "annotationResults": [
      {
        "inputUri": "/hapoon-sample-1/movie/sample.mp4",
        "labelAnnotations": [
          {
            "description": "Christmas Day",
            "languageCode": "en-us",
            "locations": [
              {
                "segment": {
                  "startTimeOffset": "-1",
                  "endTimeOffset": "-1"
                },
                "confidence": 0.5487966,
                "level": "VIDEO_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "14766651",
                  "endTimeOffset": "35233313"
                },
                "confidence": 0.6992136,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "85766669",
                  "endTimeOffset": "90333334"
                },
                "confidence": 0.6354697,
                "level": "SHOT_LEVEL"
              }
            ]
          },
          {
            "description": "Christmas decoration",
            "languageCode": "en-us",
            "locations": [
              {
                "segment": {
                  "startTimeOffset": "-1",
                  "endTimeOffset": "-1"
                },
                "confidence": 0.7745933,
                "level": "VIDEO_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "14766651",
                  "endTimeOffset": "35233313"
                },
                "confidence": 0.839413,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "85766669",
                  "endTimeOffset": "90333334"
                },
                "confidence": 0.7971116,
                "level": "SHOT_LEVEL"
              }
            ]
          },
          {
            "description": "Christmas lights",
            "languageCode": "en-us",
            "locations": [
              {
                "segment": {
                  "startTimeOffset": "-1",
                  "endTimeOffset": "-1"
                },
                "confidence": 0.9219488,
                "level": "VIDEO_LEVEL"
              },
              {
                "segment": {
                  "endTimeOffset": "14733370"
                },
                "confidence": 0.8843523,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "14766651",
                  "endTimeOffset": "35233313"
                },
                "confidence": 0.93007386,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "35266722",
                  "endTimeOffset": "62900063"
                },
                "confidence": 0.8422565,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "62933344",
                  "endTimeOffset": "85733388"
                },
                "confidence": 0.66912746,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "85766669",
                  "endTimeOffset": "90333334"
                },
                "confidence": 0.8855732,
                "level": "SHOT_LEVEL"
              }
            ]
          },
          {
            "description": "Christmas ornament",
            "languageCode": "en-us",
            "locations": [
              {
                "segment": {
                  "startTimeOffset": "14766651",
                  "endTimeOffset": "35233313"
                },
                "confidence": 0.44660938,
                "level": "SHOT_LEVEL"
              }
            ]
          },
          {
            "description": "Christmas tree",
            "languageCode": "en-us",
            "locations": [
              {
                "segment": {
                  "startTimeOffset": "14766651",
                  "endTimeOffset": "35233313"
                },
                "confidence": 0.72451514,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "85766669",
                  "endTimeOffset": "90333334"
                },
                "confidence": 0.5763006,
                "level": "SHOT_LEVEL"
              }
            ]
          },
          {
            "description": "Cityscape",
            "languageCode": "en-us",
            "locations": [
              {
                "segment": {
                  "endTimeOffset": "14733370"
                },
                "confidence": 0.4499087,
                "level": "SHOT_LEVEL"
              }
            ]
          },
          {
            "description": "Fir",
            "languageCode": "en-us",
            "locations": [
              {
                "segment": {
                  "startTimeOffset": "85766669",
                  "endTimeOffset": "90333334"
                },
                "confidence": 0.45190096,
                "level": "SHOT_LEVEL"
              }
            ]
          },
          {
            "description": "Glitter",
            "languageCode": "en-us",
            "locations": [
              {
                "segment": {
                  "startTimeOffset": "-1",
                  "endTimeOffset": "-1"
                },
                "confidence": 0.40361568,
                "level": "VIDEO_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "35266722",
                  "endTimeOffset": "62900063"
                },
                "confidence": 0.40361568,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "62933344",
                  "endTimeOffset": "85733388"
                },
                "confidence": 0.58243823,
                "level": "SHOT_LEVEL"
              }
            ]
          },
          {
            "description": "Landscape lighting",
            "languageCode": "en-us",
            "locations": [
              {
                "segment": {
                  "endTimeOffset": "14733370"
                },
                "confidence": 0.66704077,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "14766651",
                  "endTimeOffset": "35233313"
                },
                "confidence": 0.46998933,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "85766669",
                  "endTimeOffset": "90333334"
                },
                "confidence": 0.4731566,
                "level": "SHOT_LEVEL"
              }
            ]
          },
          {
            "description": "Light",
            "languageCode": "en-us",
            "locations": [
              {
                "segment": {
                  "startTimeOffset": "-1",
                  "endTimeOffset": "-1"
                },
                "confidence": 0.83027405,
                "level": "VIDEO_LEVEL"
              },
              {
                "segment": {
                  "endTimeOffset": "14733370"
                },
                "confidence": 0.62223655,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "14766651",
                  "endTimeOffset": "35233313"
                },
                "confidence": 0.83027405,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "35266722",
                  "endTimeOffset": "62900063"
                },
                "confidence": 0.75799024,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "62933344",
                  "endTimeOffset": "85733388"
                },
                "confidence": 0.62978107,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "85766669",
                  "endTimeOffset": "90333334"
                },
                "confidence": 0.4503784,
                "level": "SHOT_LEVEL"
              }
            ]
          },
          {
            "description": "Light-emitting diode",
            "languageCode": "en-us",
            "locations": [
              {
                "segment": {
                  "startTimeOffset": "-1",
                  "endTimeOffset": "-1"
                },
                "confidence": 0.47539055,
                "level": "VIDEO_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "14766651",
                  "endTimeOffset": "35233313"
                },
                "confidence": 0.47539055,
                "level": "SHOT_LEVEL"
              }
            ]
          },
          {
            "description": "Lighting",
            "languageCode": "en-us",
            "locations": [
              {
                "segment": {
                  "startTimeOffset": "-1",
                  "endTimeOffset": "-1"
                },
                "confidence": 0.85093576,
                "level": "VIDEO_LEVEL"
              },
              {
                "segment": {
                  "endTimeOffset": "14733370"
                },
                "confidence": 0.7995617,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "14766651",
                  "endTimeOffset": "35233313"
                },
                "confidence": 0.8676851,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "35266722",
                  "endTimeOffset": "62900063"
                },
                "confidence": 0.7995617,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "62933344",
                  "endTimeOffset": "85733388"
                },
                "confidence": 0.7142249,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "85766669",
                  "endTimeOffset": "90333334"
                },
                "confidence": 0.683655,
                "level": "SHOT_LEVEL"
              }
            ]
          },
          {
            "description": "Metropolis",
            "languageCode": "en-us",
            "locations": [
              {
                "segment": {
                  "endTimeOffset": "14733370"
                },
                "confidence": 0.45952943,
                "level": "SHOT_LEVEL"
              }
            ]
          },
          {
            "description": "Neon",
            "languageCode": "en-us",
            "locations": [
              {
                "segment": {
                  "startTimeOffset": "-1",
                  "endTimeOffset": "-1"
                },
                "confidence": 0.56372297,
                "level": "VIDEO_LEVEL"
              },
              {
                "segment": {
                  "endTimeOffset": "14733370"
                },
                "confidence": 0.48607495,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "14766651",
                  "endTimeOffset": "35233313"
                },
                "confidence": 0.6263982,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "35266722",
                  "endTimeOffset": "62900063"
                },
                "confidence": 0.56372297,
                "level": "SHOT_LEVEL"
              }
            ]
          },
          {
            "description": "Night",
            "languageCode": "en-us",
            "locations": [
              {
                "segment": {
                  "startTimeOffset": "-1",
                  "endTimeOffset": "-1"
                },
                "confidence": 0.7992863,
                "level": "VIDEO_LEVEL"
              },
              {
                "segment": {
                  "endTimeOffset": "14733370"
                },
                "confidence": 0.86590075,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "14766651",
                  "endTimeOffset": "35233313"
                },
                "confidence": 0.80786514,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "35266722",
                  "endTimeOffset": "62900063"
                },
                "confidence": 0.49436265,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "85766669",
                  "endTimeOffset": "90333334"
                },
                "confidence": 0.8034352,
                "level": "SHOT_LEVEL"
              }
            ]
          },
          {
            "description": "Psychedelic art",
            "languageCode": "en-us",
            "locations": [
              {
                "segment": {
                  "startTimeOffset": "62933344",
                  "endTimeOffset": "85733388"
                },
                "confidence": 0.51594055,
                "level": "SHOT_LEVEL"
              }
            ]
          },
          {
            "description": "Tourism",
            "languageCode": "en-us",
            "locations": [
              {
                "segment": {
                  "startTimeOffset": "-1",
                  "endTimeOffset": "-1"
                },
                "confidence": 0.52742225,
                "level": "VIDEO_LEVEL"
              },
              {
                "segment": {
                  "endTimeOffset": "14733370"
                },
                "confidence": 0.67389864,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "14766651",
                  "endTimeOffset": "35233313"
                },
                "confidence": 0.63670295,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "85766669",
                  "endTimeOffset": "90333334"
                },
                "confidence": 0.49774462,
                "level": "SHOT_LEVEL"
              }
            ]
          },
          {
            "description": "Tourist destination",
            "languageCode": "en-us",
            "locations": [
              {
                "segment": {
                  "endTimeOffset": "14733370"
                },
                "confidence": 0.4517945,
                "level": "SHOT_LEVEL"
              },
              {
                "segment": {
                  "startTimeOffset": "85766669",
                  "endTimeOffset": "90333334"
                },
                "confidence": 0.4342352,
                "level": "SHOT_LEVEL"
              }
            ]
          }
        ],
        "shotAnnotations": [
          {
            "endTimeOffset": "14733370"
          },
          {
            "startTimeOffset": "14766651",
            "endTimeOffset": "35233313"
          },
          {
            "startTimeOffset": "35266722",
            "endTimeOffset": "62900063"
          },
          {
            "startTimeOffset": "62933344",
            "endTimeOffset": "85733388"
          },
          {
            "startTimeOffset": "85766669",
            "endTimeOffset": "90333334"
          }
        ]
      }
    ]
  }
}

プライベートβのAPIが触れるようになったら組み込んで何か作ってみたいところ。