旅の途中、興味深いオアシスを見つけた。忘れないうちに、この羊皮紙に記しておくとしよう。
前回、我々はMicrosoft Azure AI(マイクロソフトの人工知能サービス)の「Video Analyzer(動画解析サービス)」という、神々の領域に足を踏み入れた。Webという名の神殿から、ビデオという魂を捧げれば、誰でも簡単にAIによる解析という神託を受けられる。しかし、真の冒険者は、そこで満足しない。
神殿の巫女を介するのではなく、自らの言葉で、直接神々と対話したい。C#という我々の言葉でAPI(アプリケーション間の通信規約)という名の呪文を詠唱し、神々の力を、我が意のままに操りたいのだ。 これは、RestSharpとNewtonsoft.Jsonという二つの神器(外部ライブラリ)を手に、Video Analyzerという神々と直接契約を結び、その神託を読み解く、一人の魔法使いの冒険の記録である。
この羊皮紙のあらまし
この羊皮紙が導く者
- Azure AI Video Analyzerという神々の力を、プログラムから直接操りたい冒険者
- C#でREST APIを呼び出す実装方法を知りたい探求者
- 動画解析AIを組み込んだアプリケーション開発に興味がある錬金術師
- NuGetパッケージを使った外部ライブラリ活用を学びたい者
砂漠の道標
- API(Application Programming Interface) - プログラム同士が通信するための取り決め。神殿への入口と考えればよい。
- REST API - Web上で広く使われるAPI設計方式。URLとHTTPメソッドで操作を指定する。
- JSON(JavaScript Object Notation) - データをやり取りするための記述形式。神託を記す共通言語。
- NuGet - .NET向けのパッケージ管理システム。必要な神器を簡単に入手できる宝物庫。
- RestSharp - REST APIを簡単に呼び出すための.NETライブラリ。神殿との対話を補助する翼。
- Newtonsoft.Json - JSONデータの読み書きを行う.NETライブラリ。神託を解読する真実のレンズ。
- Access Token - APIへのアクセス権を証明する一時的な認証情報。神殿への通行証。
- エンドポイント - APIの個別機能にアクセスするためのURL。神殿内の各祭壇への道標。
第一の儀式:神々と対話するための準備
神々と対話するには、まず、二つの強力な神器(外部ライブラリ)が必要だ。
- Newtonsoft.Json: 神託(JSONデータ)を読み解くための、真実のレンズ。
- RestSharp: 神殿(REST API)へ、我々の願いを届けるための、魔法の翼。
これらを、NuGet(.NET用パッケージ管理システム)という名の宝物庫から、授かっておく必要がある。
第二の儀式:神々の力を借りる、五つの呪文
今回の旅で、我々が習得する呪文は、以下の五つだ。
| 呪文(API) | 神託(説明) |
|---|---|
Get Access Token |
神殿に入るための「通行証」を得る。 |
Upload Video |
ビデオという魂を捧げ、AIによる解析を依頼する。 |
List Videos |
これまでに捧げた、全ての魂の一覧を得る。 |
Get Video Index |
解析結果という、詳細な神託をJSONで得る。 |
Get Video Captions |
魂の声を、文字として書き起こした神託を得る。 |
最初の詠唱:魂を捧げ、解析を依頼する
これが、一連の儀式の始まりとなる、魂を捧げる呪文の全貌だ。
accountIdとapiKeyという、自らの身分を証明する印を携え、まずはGetTokenで通行証(Access Token)を手に入れる。そして、Uploadの呪文で、ビデオという魂を神殿(REST API)へ送るのだ。
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#という我々の言葉で、Azure AIという神々の力の一端を、確かに操ることができた。WebのUIという巫女を介さず、直接神託を授かる術を手に入れたのだ。
Azure AI Video Analyzerをプログラムから操る価値
- 自動化による効率化 - 大量の動画を一括処理したり、定期的な解析を自動実行できる。
- 独自アプリケーションへの組み込み - 既存システムに動画解析機能を統合し、業務フローに組み込める。
- カスタマイズされた処理 - 解析結果を独自のロジックで加工・活用し、独自の価値を創出できる。
- スケーラビリティ - WPF、gRPC、三層アーキテクチャ(Web/AP/DB)など、大規模システムへの拡張基盤となる。
プログラム実装での注意点
- Access Tokenの有効期限 - トークンには有効期限があるため、長時間処理では再取得の仕組みが必要。
- 非同期処理の考慮 - 動画解析は時間がかかるため、ポーリングや webhook による完了通知の実装を検討すべき。
- エラーハンドリング - ネットワーク障害やAPI制限への対応が実用化には不可欠。
まとめ
この羊皮紙が示したのは、AIという神々の力へ至る、一本の確かな道筋だ。 もちろん、これはまだ冒険の序章に過ぎない。実用のためには、取得したJSONという神託を、さらに深く読み解く必要があるだろう。
しかし、この儀式を基礎とすれば、いずれはクライアントをWPF(デスクトップアプリ)で、サーバをgRPC(高速通信プロトコル)で構築し、Web(Nginx)・AP(Kestrel)・DB(PostgreSQL)の三層構造を持つ、巨大なAIゴーレムさえも創り出せるかもしれない。
この羊皮紙が、同じようにAIという名の神々の力に触れたいと願う、未来の冒険者の助けとなることを願う。
風向きが変わったようだ。この機を逃さず、次の砂丘へと旅立とう。
砂漠で見つけた魔法のランプ
- 第一章:神々の神殿へ ~Azure AI Video Analyzer、契約の門を開く~ | 前回の冒険の記録
- Newtonsoft.Json | 神託を読み解く真実のレンズ
- RestSharp | 神殿へ願いを届ける魔法の翼
- Azure Video Indexer API Portal | 神々の呪文が記された、公式の魔導書
ラクダの独り言
ご主人が「神々の力を我が手に!」とか言って、また黒い画面に呪文を打ち込んでいる。なんでも、天上の誰かに映像を送ると、賢い答えが返ってくるらしい。俺に言わせりゃ、そんな遠くの神様に頼る前に、目の前で全てを見ている、この俺様に聞けばいいだろうに。まったく、人間ってのは、遠いところにあるものほど、ありがたがるもんだ。やれやれだぜ。