與 Microsoft 認知服務連線
在此示例中,你將學習如何將 Microsoft Cognitive Services 與 Xamarin iOS 移動應用程式一起使用。我們將使用 Computer Vision API 來檢測圖片中的內容。
建立 Xamarin.iOS 專案後,請將以下 NuGet 包新增到專案中:
https://www.nuget.org/packages/Microsoft.ProjectOxford.Vision/
有了這個庫,我們將能夠在我們的 iOS 應用程式中使用認知服務。我假設你已經註冊了 Microsoft 帳戶以使用它,並且你已在下面的螢幕上啟用了 Computer Vision Api:
點選底部的訂閱後,將生成 Api 金鑰:
現在我們可以從 iOS 應用程式開始配置對 Cognitive Services 的訪問。首先,我們需要為分析得到一些圖片。要做到這一點,我們可以使用下面提供的 Xamarin Media Component: https : //components.xamarin.com/view/mediaplugin
成功安裝後,讓我們使用影象和按鈕建立簡單的 UI,從庫中選擇圖片。控制元件的大小取決於你。
開啟 Main.storyboard 並新增 UIImageView 和 UIButton 控制元件做預設的 ViewController。新增它們的名稱:SelectedPictureImageView
和 SelectButton
:
現在我們應該新增 Touch Up Inside
事件處理程式來處理影象選擇:
partial void SelectButtonClick(UIButton sender)
{
selectImage();
}
async void selectImage()
{
var selectedImage = await CrossMedia.Current.PickPhotoAsync();
SelectedPictureImageView.Image = new UIImage(NSData.FromStream(selectedImage.GetStream()));
}
現在,我們希望在 Cognitive Services 返回資訊後顯示分析資訊。在名為 AnalysisLabel
的按鈕下新增標籤:
是時候連線 Computer Vision API 了!
要獲取有關所選圖片的資訊,請新增以下方法記得貼上你的 API 金鑰!
async Task analyseImage(Stream imageStream)
{
try
{
VisionServiceClient visionClient = new VisionServiceClient("<<YOUR API KEY HERE>>");
VisualFeature[] features = { VisualFeature.Tags, VisualFeature.Categories, VisualFeature.Description };
var analysisResult = await visionClient.AnalyzeImageAsync(imageStream, features.ToList(), null);
AnalysisLabel.Text = string.Empty;
analysisResult.Description.Tags.ToList().ForEach(tag => AnalysisLabel.Text = AnalysisLabel.Text + tag + "\n");
}
catch (Microsoft.ProjectOxford.Vision.ClientException ex)
{
AnalysisLabel.Text = ex.Error.Message;
}
}
現在你可以在 selectImage
方法中呼叫它:
async void selectImage()
{
var selectedImage = await CrossMedia.Current.PickPhotoAsync();
SelectedPictureImageView.Image = new UIImage(NSData.FromStream(selectedImage.GetStream()));
await analyseImage(selectedImage.GetStream());
}
選擇影象後,Microsoft Cognitive Services 將對其進行分析並返回結果:
請記住,你的影象不能太大 - 在這種情況下,你將收到如下資訊:
你可以嘗試使用許多其他服務。請參閱官方文件(連結附件)以瞭解更多資訊。