環境
- Windows 10 x64
- Visual Studio C# 2015
Addin (NuGet)
Google Cloud Vision
GCP (Google Cloud Platform) は、大きなクラウドサービスで、たくさんの機能を提供している。だから、「何のためのもの」という説明が難しい。
ともかく、その機能のひとつに「Cloud Vision API」がある。これ、画像認識(に使える)。
なんに使って遊ぶものかは知りませんが、上の URL の中でテストできるところがあるので、それでおおよそわかる感じ。
ゲームのキャラクター画像で試してみたところ、 bestGuessLabels というパラメーターがキャラクターの名前を言い当てていた。しかも、アダルトの警戒レベルがひとつ上がっています。
あと、ニドラン♀の画像で試したら、「nidoran」だった。おしい。
作り方
基本的には、この記事がわかりやすい。
ただ、前準備の項目は以下が抜けている(か、省略されている)ので、この記事は、次の補足を目的とした記事です。
- 環境変数の追加
- 課金の設定
環境変数の追加
Windows の場合は、普通に環境変数に追加すればよいです。私はシステム環境変数に追加しました。
このときは、「システム」>「システムの詳細設定」>「環境変数」でアクセスします。
GOOGLE_APPLICATION_CREDENTIALS は、jsonファイルへのパスを単純に指定しているだけです。
なので、次のコードが動かなかったら、環境変数の変数に誤りがあるはず。(ImageAnnotatorClient.Create(); が例外になる)
var path = Environment.GetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS"); using (var file = File.OpenRead(path)) { var p = NewtonsoftJsonSerializer.Instance.Deserialize<JsonCredentialParameters>(file); }
File.OpenRead でエラーになったら、通常のファイルパス指定に誤りがあるはずって感じです。
課金の設定
実際のところで費用は発生しないけど、請求先アカウント管理者を設定しておかないと、以下のエラーがプログラム実行時に発生しました。テストとはいえ(テストだからこそ?)ユーザーがいないとダメみたいですね。
This API method requires billing to be enabled. Please enable billing on project #************ by visiting https://console.developers.google.com/billing/enable?project=********** then retry. If you enabled billing for this project recently, wait a few minutes for the action to propagate to our systems and retry.
無料トライアル中はヘッダー部分に大きく「トライアル」であることが表示されています。安心。
また、途中から勝手に有料に切り替えられることもないみたいです。今のところ。
実行時の結果
一応、コードはこんな感じ。
static void Main(string[] args) { var client = ImageAnnotatorClient.Create(); var fileName = Console.ReadLine(); var image = Image.FromFile(fileName); var response = client.DetectLabels(image); var info = client.DetectWebInformation(image); Console.WriteLine($"About file: {fileName} is ..."); foreach (var label in response) { Console.WriteLine(label.Description); } var name = info.BestGuessLabels; Console.WriteLine($"{name[0]?.Label ?? "error"}"); Console.ReadKey(); }
すごい。こんな手軽に画像認識できるんですね。
リセットの画像を調べると、画像情報から「hime cut」という ほんまどうでもいいことを教えてくれました。ありがとうございます。
ニドランは、残念ながら性別の情報は得られませんでした。種族値や個体値は教えてくれませんでした。
はじめて GCP を使ってみたけど、それなりの成果は得られた感じです。
最後に API のダッシュボードを見ると、私にはすぎるだけの機能レポートがありました。これ、なんに使うんでしょうかね。
テストコード
「GCPVisionSample」というサンプルをあげています。