Video Intelligence APIのデモを試してみた
Video Intelligence API面白そうだったのでさっそくいくつか動画をアップして試してみました。
まずは先日に見に行ったイルミネーションの動画をCloud Storageにアップして、Video Intelligence APIで解析させてみました。
まずは全体のラベルから
うん、まぁ間違ってない。
ほぼイルミネーションしか映ってないからね。
次にシーンが切り替わるごとのショットラベル。
これだけだと微妙なので、他の動画も試してみました。
渋谷のスクランブル交差点の動画。
流石にここからじゃ人だとは認識できない様子。
右下に映る建物や市街地だということは認識できている。
信号が変わって、車が映るようになると、ちゃんと車を認識できている。
手前に映る自転車はしっかり認識できている。
奥の電車は残念ながら、輸送手段の乗り物としか認識できてない。
少し後のこちらのシーンだとしっかり電車であることを認識できている。
キュウリ、パプリカ、ズッキーニが認識できてる。
最後に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が触れるようになったら組み込んで何か作ってみたいところ。