public async Task <IDictionary <string, float> > GetPredictionAsync(Stream stream, Guid projectId, Guid iterationId) { if (stream == null) { throw new ArgumentNullException($"{nameof(stream)} cannot be null"); } if (projectId == Guid.Empty || iterationId == Guid.Empty) { throw new ArgumentException($"{nameof(projectId)} and/or {nameof(iterationId)} cannot be empty"); } var predictions = new Dictionary <string, float>(); try { var result = await _endpoint.PredictImageAsync(projectId, stream, iterationId); var tags = (from p in result.Predictions select new { p.TagName, p.Probability }).OrderByDescending(p => p.Probability); foreach (var t in tags) { predictions.Add(t.TagName, (float)t.Probability); } return(predictions); } catch (Exception ex) { return(predictions); } }
public async Task <string> Analyze(byte[] image, string projectId) { var imageStream = new MemoryStream(image); var prediction = await _client.PredictImageAsync(new Guid(projectId), imageStream); return(prediction.Predictions.FirstOrDefault().TagName ?? "None"); }
private async void Button_Clicked(object sender, EventArgs e) { // 写真撮影 // Cameraを起動して写真を撮影(Plugin任せ) var file = await CrossMedia.Current.TakePhotoAsync(new StoreCameraMediaOptions { DefaultCamera = CameraDevice.Front, AllowCropping = false, PhotoSize = PhotoSize.Medium, }); // 撮影しなかった場合は何もしない if (file == null) { return; } // 画像を表示 image.Source = ImageSource.FromStream(() => file.GetStream()); try { // CustomVision用クライアント準備 // ApiKeyにはPredictionKeyを指定 // Endpointにはhttps://southcentralus.api.cognitive.microsoft.comを指定 var client = new CustomVisionPredictionClient() { ApiKey = PredictionKey, Endpoint = Endpoint }; // 画像を解析(IterationIDを指定しないとうまくいかない) var resul = await client.PredictImageAsync(Guid.Parse(ProjectID), file.GetStream(), iterationId : Guid.Parse(IterationID)); // 結果取得 var prediction = resul.Predictions.FirstOrDefault(); await DisplayAlert("判定結果", $"タグ名: {prediction.TagName} Probability: {prediction.Probability}", "OK"); } catch { await DisplayAlert("判定結果", $"エラー", "OK"); } }
private async Task <VisionAPI.Contract.Tag[]> Prediction(Stream stream) { try { CustomVisionPredictionClient endpoint = new CustomVisionPredictionClient() { ApiKey = PredictionKey, Endpoint = SouthCentralUsEndpoint }; var result = await endpoint.PredictImageAsync(projectId, stream); var pistols = result.Predictions.Where(p => p.TagName == "pistol" && p.Probability > 0.75).OrderBy(e => e.Probability).ToList(); if (pistols.Count > 0) { ServiceClientCredentials credentials = new TopicCredentials("jVyvj5pqIZeR1t/xgBAjhkCd3UfLNkJV89Smpsm6XeE="); var client = new EventGridClient(credentials); var eventGridEvent = new EventGridEvent(Guid.NewGuid().ToString(), "FirearmDetected", pistols.First(), "FirearmDetected", DateTime.UtcNow, "1"); // Publish the events await client.PublishEventsAsync("km-firearm-topic.eastus2-1.eventgrid.azure.net", new[] { eventGridEvent }); } return(pistols.Select(p => new VisionAPI.Contract.Tag() { Name = $"{p.TagName}: ${p.Probability:P1}" }).ToArray()); } catch (Exception e) { return(new[] { new VisionAPI.Contract.Tag() { Name = "" } }); } }