Xamarin.Forms と Azure Cognitive Services の概要

Microsoft Cognitive Services は、顔認識、音声認識、言語理解などの機能を追加することで、アプリケーションをよりインテリジェントにするために開発者が使用できる API、SDK、サービスのセットです。 この記事では、いくつかの Microsoft Cognitive Service API を呼び出す方法を示すサンプル アプリケーションの概要について説明します。

概要

付属しているサンプルは、次の機能を提供する ToDo リスト アプリケーションです。

  • タスクの一覧を表示します。
  • ソフト キーボードによる、または Microsoft Speech API で音声認識を実行することによる、追加および編集タスク。
  • Bing Spell Check API を使用するスペル チェック タスク。 詳しくは、「Bing Spell Check API を使用したスペル チェック」をご覧ください。
  • Translator API を使用する、英語からドイツ語への翻訳タスク。 詳しくは、「Translator API を使用したテキスト翻訳」をご覧ください。
  • 削除タスク。
  • タスクの状態を '完了' に設定します。

警告

Bing Speech API は非推奨になり、代わりに Azure 音声サービスが使われるようになっています。 Azure 音声サービス専用のサンプルについては、Speech Service API を使用した音声認識に関する記事をご覧ください。

タスクはローカル環境の SQLite データベースに格納されます。 ローカル SQLite データベースの使用について詳しくは、ローカル データベースの操作に関する記事をご覧ください。

アプリケーションを起動すると、TodoListPage が表示されます。 このページには、ローカル データベースに格納されているタスクの一覧が表示され、ユーザーは新しいタスクを作成したり、アプリケーションを評価したりできます。

TodoListPage

新しい項目の作成は、+ ボタンをクリックすると移動する先の TodoItemPage で行うことができます。 このページには、タスクを選んで移動することもできます。

TodoItemPage

TodoItemPage では、タスクの作成、編集、スペル チェック、翻訳、保存、削除を行うことができます。 音声認識を使って、タスクを作成または編集できます。 これを行うには、マイク ボタンを押すと録音が開始し、同じボタンをもう 1 回すと録音が停止して、Bing Speech Recognition API に録音が送信されます。

アプリケーションの構造を理解する

サンプル アプリケーションの共有コード プロジェクトは、次の 5 つのメイン フォルダーで構成されます。

Folder 目的
モデル アプリケーション用のデータ モデル クラスが含まれます。 これには、アプリケーションで使われる 1 つのデータ項目をモデル化する TodoItem クラスが含まれます。 このフォルダーには、さまざまな Microsoft Cognitive Service API から返される JSON 応答をモデル化するために使われるクラスも含まれます。
リポジトリ データベース操作の実行に使われる ITodoItemRepository インターフェイスと TodoItemRepository クラスが含まれます。
サービス さまざまな Microsoft Cognitive Service API にアクセスするために使われるインターフェイスとクラス、およびプラットフォーム プロジェクトでインターフェイスを実装するクラスを探すための DependencyService クラスによって使われるインターフェイスが含まれます。
ユーティリティ 9 分ごとに JWT アクセス トークンを更新するために AuthenticationService クラスによって使われる Timer クラスが含まれます。
ビュー アプリケーション用のページが含まれます。

共有コード プロジェクトには、いくつかの重要なファイルも含まれます。

ファイル 目的
Constants.cs Constants クラスでは、呼び出される Microsoft Cognitive Service API の API キーとエンドポイントが指定されています。 異なる Cognitive Service API にアクセスするには、API キー定数を更新する必要があります。
App.xaml.cs App クラスは、各プラットフォームでアプリケーションによって表示される最初のページと、データベース操作の呼び出しに使われる TodoManager クラスの両方をインスタンス化します。

NuGet パッケージ

サンプル アプリケーションでは、次の NuGet パッケージを使います。

  • Newtonsoft.Json - .NET 用の JSON フレームワークを提供します。
  • PCLStorage - 一連のクロスプラットフォーム ローカル ファイル IO API を提供します。
  • sqlite-net-pcl - SQLite データベース ストレージを提供します。
  • Xam.Plugin.Media - クロスプラットフォームの写真撮影および選択 API を提供します。

さらに、これらの NuGet パッケージにより、それら自体の依存関係もインストールされます。

データのモデル化

サンプル アプリケーションは、TodoItem クラスを使い、表示されてローカル SQLite データベースに格納されるデータをモデル化します。 次に示すのは、TodoItem クラスのコード例です。

public class TodoItem
{
  [PrimaryKey, AutoIncrement]
  public int ID { get; set; }
  public string Name { get; set; }
  public bool Done { get; set; }
}

ID プロパティは、各 TodoItem インスタンスを一意に識別するために使われ、プロパティをデータベースの自動的にインクリメントする主キーにする SQLite 属性で修飾されます。

データベース操作を呼び出す

TodoItemRepository クラスはデータベース操作を実装しており、クラスのインスタンスには App.TodoManager プロパティを通じてアクセスできます。 TodoItemRepository クラスには、データベース操作を呼び出すための次のメソッドがあります。

  • GetAllItemsAsync – ローカル SQLite データベースからすべての項目を取得します。
  • GetItemAsync – ローカル SQLite データベースから指定された項目を取得します。
  • SaveItemAsync – ローカル SQLite データベース内の項目を作成または更新します。
  • DeleteItemAsync – ローカル SQLite データベースから指定された項目を削除します。

プラットフォーム プロジェクトの実装

共有コード プロジェクトの Services フォルダーに含まれる IFileHelperIAudioRecorderService インターフェイスは、DependencyService クラスによって、プラットフォーム プロジェクトでインターフェイスを実装するクラスを検索するために使われます。

IFileHelper インターフェイスは、各プラットフォーム プロジェクトの FileHelper クラスによって実装されます。 このクラスは、SQLite データベースを格納するためのローカル ファイル パスを返す 1 つのメソッド GetLocalFilePath で構成されます。

IAudioRecorderService インターフェイスは、各プラットフォーム プロジェクトの AudioRecorderService クラスによって実装されます。 このクラスは、プラットフォーム API を使ってデバイスのマイクからオーディオを録音し、wav ファイルとして格納する、StartRecordingStopRecording、サポート メソッドで構成されます。 iOS では、AudioRecorderServiceAVFoundation API を使ってオーディオを録音します。 Android では、AudioRecordServiceAudioRecord API を使ってオーディオを録音します。 ユニバーサル Windows プラットフォーム (UWP) では、AudioRecorderServiceAudioGraph API を使ってオーディオを録音します。

Cognitive Services を呼び出す

サンプル アプリケーションは、次の Microsoft Cognitive Services を呼び出します。