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
が表示されます。 このページには、ローカル データベースに格納されているタスクの一覧が表示され、ユーザーは新しいタスクを作成したり、アプリケーションを評価したりできます。
新しい項目の作成は、+ ボタンをクリックすると移動する先の 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
フォルダーに含まれる IFileHelper
と IAudioRecorderService
インターフェイスは、DependencyService
クラスによって、プラットフォーム プロジェクトでインターフェイスを実装するクラスを検索するために使われます。
IFileHelper
インターフェイスは、各プラットフォーム プロジェクトの FileHelper
クラスによって実装されます。 このクラスは、SQLite データベースを格納するためのローカル ファイル パスを返す 1 つのメソッド GetLocalFilePath
で構成されます。
IAudioRecorderService
インターフェイスは、各プラットフォーム プロジェクトの AudioRecorderService
クラスによって実装されます。 このクラスは、プラットフォーム API を使ってデバイスのマイクからオーディオを録音し、wav ファイルとして格納する、StartRecording
、StopRecording
、サポート メソッドで構成されます。 iOS では、AudioRecorderService
は AVFoundation
API を使ってオーディオを録音します。 Android では、AudioRecordService
は AudioRecord
API を使ってオーディオを録音します。 ユニバーサル Windows プラットフォーム (UWP) では、AudioRecorderService
は AudioGraph
API を使ってオーディオを録音します。
Cognitive Services を呼び出す
サンプル アプリケーションは、次の Microsoft Cognitive Services を呼び出します。
- Microsoft Speech API。 詳しくは、Microsoft Speech API を使用した音声認識に関する記事をご覧ください。
- Bing Spell Check API。 詳しくは、「Bing Spell Check API を使用したスペル チェック」をご覧ください。
- Translate API。 詳しくは、「Translator API を使用したテキスト翻訳」をご覧ください。