Xamarin.Forms 和 Azure 认知服务简介
Microsoft 认知服务是一组可供开发人员使用的 API、SDK 和服务,通过添加面部识别、语音识别和语言理解等功能,使应用程序更加智能。 本文将介绍一个示例应用程序,用于演示如何调用某些 Microsoft 认知服务 API。
概述
随附的示例是一个待办事项列表应用程序,可提供以下功能:
- 查看任务列表。
- 通过软键盘或使用 Microsoft 语音 API 执行语音识别来添加和编辑任务。
- 使用必应拼写检查 API 对任务进行拼写检查。 有关详细信息,请参阅使用必应拼写检查 API 进行拼写检查。
- 使用翻译器 API 将任务从英语翻译成德语。 有关详细信息,请参阅使用翻译器 API 进行文本翻译。
- 删除任务。
- 将任务的状态设置为“完成”。
警告
必应语音 API 已弃用,取而代之的是 Azure 语音服务。 有关专门针对 Azure 语音服务的示例,请参阅使用语音服务 API 进行语音识别。
任务存储在本地 SQLite 数据库中。 有关使用本地 SQLite 数据库的详细信息,请参阅使用本地数据库。
启动应用程序时会显示 TodoListPage
。 此页显示存储在本地数据库中的任何任务的列表,并允许用户创建新任务或对应用程序进行评分:
可以通过单击 + 按钮来创建新项目,该按钮将导航到 TodoItemPage
。 也可以通过选择任务导航到此页:
TodoItemPage
允许创建、编辑、拼写检查、翻译、保存和删除任务。 语音识别可用于创建或编辑任务。 这是通过按麦克风按钮开始录制,并再次按同一按钮停止录制来实现的,此操作会将录制内容发送到必应语音识别 API。
了解应用程序剖析
示例应用程序的共享代码项目由五个主要文件夹组成:
Folder | 目的 |
---|---|
模型 | 包含应用程序的数据模型类。 这包括 TodoItem 类,该类对应用程序使用的单个数据项进行建模。 该文件夹还包括用于对从不同 Microsoft 认知服务 API 返回的 JSON 响应进行建模的类。 |
存储库 | 包含用于执行数据库操作的 ITodoItemRepository 接口和 TodoItemRepository 类。 |
服务 | 包含用于访问不同 Microsoft 认知服务 API 的接口和类,以及 DependencyService 类查找在平台项目中实现接口的类所使用的接口。 |
Utils | 包含 Timer 类,AuthenticationService 类使用该类每 9 分钟更新一个 JWT 访问令牌。 |
视图 | 包含应用程序的页面。 |
共享代码项目还包含一些重要文件:
文件 | 目的 |
---|---|
Constants.cs | Constants 类,用于指定调用的 Microsoft 认知服务 API 的 API 密钥和终结点。 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
类实现。 此类由单个方法 GetLocalFilePath
组成,该方法返回用于存储 SQLite 数据库的本地文件路径。
IAudioRecorderService
接口由每个平台项目中的 AudioRecorderService
类实现。 此类由 StartRecording
、StopRecording
和支持方法组成,这些方法使用平台 API 从设备的麦克风录制音频并将其存储为 wav 文件。 在 iOS 上,AudioRecorderService
使用 AVFoundation
API 录制音频。 在 Android 上,AudioRecordService
使用 AudioRecord
API 录制音频。 在通用 Windows 平台 (UWP) 上,AudioRecorderService
使用 AudioGraph
API 录制音频。
调用认知服务
示例应用程序调用以下 Microsoft 认知服务:
- Microsoft 语音 API。 有关详细信息,请参阅使用 Microsoft 语音 API 进行语音识别。
- 必应拼写检查 API。 有关详细信息,请参阅使用必应拼写检查 API 进行拼写检查。
- 翻译 API。 有关详细信息,请参阅使用翻译器 API 进行文本翻译。