旅の途中、興味深いオアシスを見つけた。忘れないうちに、この羊皮紙に記しておくとしよう。
前回、我々はMicrosoft Azure AIサービス「Video Analyzer」という、神々の領域に足を踏み入れた。Webという名の神殿から、ビデオという魂を捧げれば、誰でも簡単にAIによる解析という神託を受けられる。しかし、真の冒険者は、そこで満足しない。
神殿の巫女を介するのではなく、自らの言葉で、直接神々と対話したい。C#という我々の言葉でAPIという名の呪文を詠唱し、神々の力を、我が意のままに操りたいのだ。 これは、RestSharpとNewtonsoft.Jsonという二つの神器を手に、Video Analyzerという神々と直接契約を結び、その神託を読み解く、一人の魔法使いの冒険の記録である。
この羊皮紙のあらまし
この羊皮紙が導く者
- Microsoft Azure AI Video Analyzerという、神々の力に興味がある者
- AIアプリという、未来のゴーレムを、C#という名の魔法で創り出したい探求者
第一の儀式:神々と対話するための準備
神々と対話するには、まず、二つの強力な神器が必要だ。
- Newtonsoft.Json: 神託(JSONデータ)を読み解くための、真実のレンズ。
- RestSharp: 神殿(REST API)へ、我々の願いを届けるための、魔法の翼。
これらを、NuGetという名の宝物庫から、授かっておく必要がある。
第二の儀式:神々の力を借りる、五つの呪文
今回の旅で、我々が習得する呪文は、以下の五つだ。
| 呪文(API) | 神託(説明) |
|---|---|
Get Access Token |
神殿に入るための「通行証」を得る。 |
Upload Video |
ビデオという魂を捧げ、AIによる解析を依頼する。 |
List Videos |
これまでに捧げた、全ての魂の一覧を得る。 |
Get Video Index |
解析結果という、詳細な神託をJSONで得る。 |
Get Video Captions |
魂の声を、文字として書き起こした神託を得る。 |
最初の詠唱:魂を捧げ、解析を依頼する
これが、一連の儀式の始まりとなる、魂を捧げる呪文の全貌だ。
accountIdとapiKeyという、自らの身分を証明する印を携え、まずはGetTokenで通行証を手に入れる。そして、Uploadの呪文で、ビデオという魂を神殿へ送るのだ。
using Newtonsoft.Json; using RestSharp; using System.Net; // 神殿の座標と、我が身の印 const string VideoIndexerUri = @"https://api.videoindexer.ai"; var location = "trial"; var accountId = "<アカウントID>"; var apiKey = "<APIキー>"; // 神殿との対話準備 var client = new RestClient(baseUrl: VideoIndexerUri); client.AddDefaultHeader("Ocp-Apim-Subscription-Key", apiKey); // 儀式の執行 var accessToken = GetToken(); if (accessToken == null) return; var path = @"<ビデオファイル>.mp4"; Upload(path); // 通行証を得る呪文 string? GetToken() { var request = new RestRequest($"Auth/{location}/Accounts/{accountId}/AccessToken", Method.Get); // ... var token = JsonConvert.DeserializeObject<string>(response.Content); return token; } // 魂を捧げる呪文 bool Upload(string path) { var request = new RestRequest($"{location}/Accounts/{accountId}/Videos", Method.Post); request.AlwaysMultipartFormData = true; request.AddParameter("accessToken", accessToken, ParameterType.QueryString); request.AddFile("video_file", path, "application/octet-stream"); // ... return true; }
魂を捧げると、神殿のWebサイトでは、解析の進捗という名の神託が、リアルタイムで表示される。
第二の詠唱:神託を受け取り、読み解く
次に、捧げた魂がどうなったかを知るための、神託を受け取る呪文だ。
ListVideosで魂の一覧を取得し、その状態(state)が「Processed(処理済み)」になっていることを確認する。そして、videoIdという魂の識別子を使い、VideoIndexとVideoCaptionsで、詳細な神託を羊皮紙に書き出す。
// ...(GetTokenは前述の通り)... // 全ての魂の一覧を得る var videosJson = ListVideos(); if (videosJson == null) return; // 神託を読み解き、一つ一つの魂の状態を確認する var obj = JObject.Parse(videosJson); var items = (JArray)obj["results"]; foreach( var item in items) { var videoId = (string)item["id"]; var state = (string)item["state"]; // 解析が完了していなければ、次の魂へ if (state.Equals("Processing")) continue; // 解析情報を羊皮紙へ var index = VideoIndex(videoId, (string)item["sourceLanguage"]); if (index != null) File.WriteAllText(@$"va_{videoId}.json", index); // 文字起こし情報を羊皮紙へ var caption = VideoCaptions(videoId, (string)item["sourceLanguage"]); if (caption != null) File.WriteAllText($@"va_{videoId}.srt", caption); }
羊皮紙を巻く前に
C#という我々の言葉で、神々の力の一端を、確かに操ることができた。 もちろん、これはまだ冒険の序章に過ぎない。実用のためには、取得したJSONという神託を、さらに深く読み解く必要があるだろう。
しかし、この儀式を基礎とすれば、いずれはクライアントをWPFで、サーバをgRPCで構築し、Web(Nginx)・AP(Kestrel)・DB(PostgreSQL)の三層構造を持つ、巨大なAIゴーレムさえも創り出せるかもしれない。その夢想は、また別の旅の物語だ。
この羊皮紙が、同じようにAIという名の神々の力に触れたいと願う、未来の冒険者の助けとなることを願う。
風向きが変わったようだ。この機を逃さず、次の砂丘へと旅立とう。
砂漠で見つけた魔法のランプ
- 第一章:神々の神殿へ ~Azure AI Video Analyzer、契約の門を開く~ | 前回の冒険の記録
- Newtonsoft.Json | 神託を読み解く真実のレンズ
- RestSharp | 神殿へ願いを届ける魔法の翼
- Azure Video Indexer API Portal | 神々の呪文が記された、公式の魔導書
ラクダの独り言
ご主人が「神々の力を我が手に!」とか言って、また黒い画面に呪文を打ち込んでいる。なんでも、天上の誰かに映像を送ると、賢い答えが返ってくるらしい。俺に言わせりゃ、そんな遠くの神様に頼る前に、目の前で全てを見ている、この俺様に聞けばいいだろうに。まったく、人間ってのは、遠いところにあるものほど、ありがたがるもんだ。やれやれだぜ。