Exemplo n.º 1
0
        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");
        }
Exemplo n.º 3
0
        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");
            }
        }
Exemplo n.º 4
0
        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 = ""
                               } });
            }
        }