streampack の Tana です。
先日の de:code 2018 に参加して MS のビジョン、新製品の発表、交流で色々刺激を受け勉強させていただきました。その中で streampack では Media 関連のサービスにもキャッチアップしておりますので、今回は アップデートされた Video Indexer について試したので共有させていただきます。
Video Indexer とは?
Video Indexer とは、Cognitive Services の一つになります。動画を分析し音声から字幕用のテキストにしたり、動画からフレームごとのOCR抽出、顔検出など様々な分析を一度にやってくれる便利なものです。これができることによって、動画内のメタ検索だったり、特定シーンの検出が可能になります。Video Indexer は API も提供されており、新しく V2バージョン の API が発表になりました。 V1 は残念ながら今年の8月で Duplicated になりますので、V1を使っている人は移行が必要です。
https://azure.microsoft.com/en-us/blog/build-2018-video-indexer-updates/
また、以前は Trial バージョンでしたが、 Previewバージョンが出て料金も発表されております。
https://azure.microsoft.com/en-us/pricing/details/cognitive-services/video-indexer/
Region: Japan East で見る限りでは Video分析は input ファイルの1分あたり ¥7.46 のようです。 Audioのみの分析は ¥1.80 となっております。
API V1 と V2 の違い
V1 では、token をセットして Video Indexer V1 の API を投げれば、アップロードしたり、分析したり、動画リスト抽出が簡単でしたが、V2 では user, account, video ごとに token を取得する必要があり少し複雑になっております。 token も1時間で切れますので、必要に応じて再取得が必要です。
https://docs.microsoft.com/en-us/azure/cognitive-services/video-indexer/migrate-from-v1-to-v2
API にて動画リストを取得するまでのフロー
基本こちらのフローになりますが、 authorization scope という定義があり、少々理解し難いものです。
https://docs.microsoft.com/en-us/azure/cognitive-services/video-indexer/video-indexer-use-apis
今回は試しに List Videos の取得の場合に、必要なフローを要約します。
https://api-portal.videoindexer.ai/docs/services/operations/operations/List-videos?
これで必要なのは、
- location
- accountId
- accessToken(An account access token with read permissions)
APIページ見ても結構情報が多くて混乱しますが、 List Video API で必要な accessToken は account 用のトークンです。 Video, User トークンではなくSubscription key でもないので要注意です。
すでに、Video Indexer に Sign up 済みという前提で進めます。
1. 動画アップロード
上記の Upload から動画をアップロードしておきます。
2. APIのサブスクリプション
下記のページにて、登録します。
https://api-portal.videoindexer.ai/products/authorization
登録完了すると、primary と secondary keys の Subscription Key が取得できます。これをメモしておきます。
3. AccountIDの取得
色々な API をコールするには AccountID が必須です。
下記のページから AccountID を取得します。
https://api-portal.videoindexer.ai/docs/services/authorization/operations/Get-Accounts/console
Query Parameters に下記をセットします。
- location:
trial
Headers の Ocp-Apim-Subscription-Key は自動で先ほど登録した Subscription key を API Console 側でセットしてくれます。
[{ "id": "xxxxx-91ae-4831-b0bb-xxxxxxxxxxx", "name": "xxxxx-xx89xx", "location": "Trial", "accountType": "Trial", "url": "https://www.videoindexer.ai/", "accessToken": null }]
4. Accounts のアクセストークンを取得
ここでは、Query Parameter に location と 先ほど取得した accountID をセットして
コールします。うまく行けば下記のようにテキストの “account token” が返ってきます。
Pragma: no-cache Strict-Transport-Security: max-age=31536000 X-Content-Type-Options: nosniff Cache-Control: no-cache Date: Fri, 25 May 2018 04:38:33 GMT X-Powered-By: ASP.NET Content-Length: 423 Content-Type: application/json; charset=utf-8 Expires: -1 "account token"
5. 動画リスト取得
https://api-portal.videoindexer.ai/docs/services/operations/operations/List-videos?
動画の取得は
- location:
trial
- accountId:
xxxxx-91ae-4831-b0bb-xxxxxxxxxxx
- accessToken:
accesstoken
<- 4番で取得したtoken
{ "results": [{ "accountId": "xxxxx-91ae-4831-b0bb-xxxxxxxxxxx", "id": "xxxxxx", "partition": null, "externalId": "2101axxxxx", "metadata": null, "name": "Demo動画", "description": null, "created": "2017-08-23T06:49:17.587+00:00", "lastModified": "2018-03-08T05:17:09.801+00:00", "lastIndexed": "2018-03-08T05:17:09.801+00:00", "privacyMode": "Public", "userName": "Tana", "isOwned": true, "isBase": true, "state": "Processed", "processingProgress": "", "durationInSeconds": 85, "thumbnailVideoId": "4877a7xxxx", "thumbnailId": "0b6866ef-0532-4e6b-b06a-xxxxxxxxxx", "searchMatches": [], "indexingPreset": "Default", "streamingPreset": "Default", "sourceLanguage": "ja-JP" }, {
これで一通り取得まで行けました。
あとはこれで、Get-Video-Index にて分析結果を取得したり、
https://api-portal.videoindexer.ai/docs/services/operations/operations/Get-Video-Index?
アップロード API を使ってアップロードできれば、組み込みはスムーズには行けるかと思います。
V1 と違って Brand や Language Model などの新しいものができてますので、その辺りも理解を深める必要があるかもしれません。
結論
ビデオ分析を自前でやろうとすると、Machine Learningの知識・経験、ハイスペックな環境、組み込みなどかなり労力が必要になりますが、たかが API されど API で諸々やってくれるので、試してみる価値はあるかと思います。