はじめに
AIでなんかしたい。この Video Indexer っていろいろできそう!
くらいの感覚で触り始めたVideo Indexer に関する備忘録です。
Video Indexerとは
Microsoftが提供しているAIソリューションである、Azure Cognitive Services ブランドの一部であり、動画をアップロードすることで、その動画に対しあらゆる分析を行うことができる。このvideo indexerには同じくAzure Cognitive Services のText Analytics や Face も内包されていおり、動画内の翻訳や文字認識や顔認識などの機能も行えるようになっていて、動画をベースとした幅広いソリューションに活用できる。
また、Video Indexer webサイトというものが用意されており、既存のAPIとは異なってグラフィカルに動画の分析を行うこともできるので誰でも扱いやすいのが特徴。もちろん、REST API も使用することができるの開発するシステムに組み込むことも可能。
やりたいこと
録画していた会議内容のキーワードでワードクラウドを作成する
【背景】
リモートで行っていた全社向けMTGが、動画を撮っておくことで社員の好きなタイミングで視聴できるようになった。ゆっくり見る時間はないけど、とりあえず何が話されていたかはざっくり把握したい。
【使用するVideo Indexer api】
- POST : Upload Video
- GET : Get Account Access Token
- GET : List Videos (ビデオIDを知るために使用)
- GET : Get Video Index (解析結果)
ワードクラウドを生成するためのd3というライブラリのコードは以下の記事を参考にさせて頂きました。
D3-cloud (d3-v5版) でワードクラウドを作成する
【Get Video Index APIの使用部分を抜粋】
const request = require('request');
const fs = require('fs');
const url ='https://api.videoindexer.ai/{ location }/Accounts/{ accountId }/Videos/{ videoId }/Index?language=ja-JP&accessToken={ APIで取得したToken }'
var d = []
request.get({
uri: url,
headers: {
'Ocp-Apim-Subscription-Key' : { Subscription key }
}
}, function(err, req, data){
var r = JSON.parse(data);
var list = r.videos[0]['insights']['keywords'];
for (li of list) {
d.push({"word":`${li.text}`,"count":`${li.confidence}`});
};
fs.writeFile('words.json', JSON.stringify(d), (err, data) => {
if(err) console.log(err);
else console.log('write end');
})
});
Get Video Index APIを使用すると、Video Indexerによって解析された結果がJSON形式で出力されます。他のCognitive Services の機能の一部を使えるだけあって出力されるデータ量が多いなと感じました。
スクリプトを実行すると、参考にさせていただいたコードと同じくwords.jsonという名前のファイルに動画内のキーワードを書き出していきます。video indexer で検出できるキーワード認識の信頼度(confidenceプロパティ)を、ワードの頻出度とすることで文字サイズを変更します。つまり、認識したキーワードの信頼度が高いと判定されたものほど大きく表示されます。
結果
流石に多少手を加えただけでは、使い物にならなかったです笑
ワードクラウドは表示されますが、会議の要約というにはあまりも分かりづらすぎる、、
以下はテキスト化した際の所感になります。
- 言い淀みを拾い過ぎ
もちろん喋っている人の話し方にもよりますが、それでも「え〜」とか「これはまぁ」とかのノイズが多かったのが印象的でした。機械に読み込ませると、人間が普段無意識のうちに切り捨ててる言葉が顕著に現れて、これはこれで面白かったです。
→ COTOHA から言い淀み除去をするAPIが公開されています。抽出したテキストを一度このAPIに噛ませて使ってみると、かなりマシにになりました。(一度のリクエストで送れる文字数には制限があるので、長すぎると分割する必要があります)
- そもそも認識精度はあまり高くない?
今回取り込んだ動画内で喋っている方は、個人的には、かなり聞きやすい話し方をする方と思っていただけに、抽出結果を見て少し驚きました。この結果からキーワードが分析されると思うので、もちろんキーワードも期待できる結果ではありませんでした。
Video Indexer で生成されたテキストを Text Analytics API でキーフレーズ抽出をしたところ、大分結果が変わったので、何かしらの差異はあるのかもしれないですね。