예제 #1
0
        //Imposta la probabilità minima

        /* private Double SetProbability()
         * {
         *   if (Preferences.Get("Probability", "") != null)
         *   {
         *       return Convert.ToDouble(Preferences.Get("Probability", ""));
         *   }
         *   //Valore di default probabilità
         *   else return this.defaultProbabilityValue;
         * }*/

        //Fai le predizioni
        private async Task MakePredictionAsync(Stream stream)
        {
            var current = Connectivity.NetworkAccess;

            /*Se non c'è connessione notifica l'utente e interrompi il processo*/
            if (current != NetworkAccess.Internet)
            {
                await DisplayAlert("No Connection.", "In order to scan you need internet access,\n please turn on your internet connection.", "Ok");

                return;
            }

            //Prendo lo stream e lo faccio diventare bitmap
            var imageBytes = GetImageAsByteData(stream);

            //URL di CustomVision
            var url = SkiasharpServices.GetCustomVisionURL();

            //API key di CustomVision
            var predictionKey = SkiasharpServices.GetAPIKey();

            using (HttpClient client = new HttpClient())
            {
                client.DefaultRequestHeaders.Add("Prediction-Key", predictionKey);

                using (var content = new ByteArrayContent(imageBytes))
                {
                    content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
                    var response = await client.PostAsync(url, content);

                    var responseString = await response.Content.ReadAsStringAsync();

                    var predictions = JsonConvert.DeserializeObject <Response>(responseString);

                    //imposta la probabilità minima
                    var minProbability = 0.7;

                    //visualizza solo predizioni con sicurezza superiore a setProbability
                    var result = predictions.Predictions.Where(p => p.Probability >= minProbability);

                    predictionsResult = result;

                    //lista tagnames filtrata dagli other products
                    foreach (var p in result)
                    {
                        if (!p.TagName.Contains("Products"))
                        {
                            await DBFirebase.Instance.AddHistoryWines(p.TagName, Preferences.Get("UserEmailFirebase", ""));

                            tagnames.Add(p.TagName);
                        }
                    }
                }
            }
        }
예제 #2
0
        public async void Scan(Stream stream, Stream streamRotated)
        {
            /*faccio capire all'animazione che è tempo di andare in scena*/
            Loading.IsVisible = true;

            /*esegui le predictions*/
            await MakePredictionAsync(stream);

            Loading.IsVisible = false;

            /*Bisogna ruotare l'immagine se siamo su iOS*/
            if (Device.RuntimePlatform == Device.iOS)
            {
                skImage = SkiasharpServices.Rotate(streamRotated);
            }
            else if (Device.RuntimePlatform == Device.Android)
            {
                skImage = SKBitmap.Decode(streamDraw);
            }

            /*Pulisco il canvas per disegnarci sopra*/
            ImageCanvas.InvalidateSurface();

            /*Se hai trovato qualcosa allora popola la lista dei tag
             * filtrandola dagli "Other Products"*/
            if (predictionsResult != null)
            {
                var predictionsFiltered = new List <string>();
                foreach (var pred in predictionsResult)
                {
                    if (!pred.TagName.Contains("Products"))
                    {
                        predictionsFiltered.Add(pred.TagName);
                    }
                }
                if (predictionsFiltered.FirstOrDefault() != null)
                {
                    /*ora il bottone per la lista dei risultati deve diventare visibile*/
                    After_scan_btn.IsVisible = true;
                }
                else
                {
                    After_scan_btn.IsVisible = false;
                }
            }
        }