async void btnLogin_Clicked(object sender, EventArgs e)
        {
            try
            {
                Loading(true);
                var foto = await ServicioImagen.TomarFoto();

                if (foto != null)
                {
                    imagen.Source = ImageSource.FromStream(foto.GetStream);

                    var faceId = await ServicioFace.DetectarRostro(foto.GetStream());

                    var personId = await ServicioFace.IdentificarEmpleado(faceId);

                    if (personId != Guid.Empty)
                    {
                        var bd      = new ServicioBaseDatos();
                        var usuario = await bd.ObtenerUsuario(personId.ToString());

                        usuario.FotoActual = foto.Path;

                        var emocion = await ServicioFace.ObtenerEmocion(foto);

                        usuario.EmocionActual = emocion.Nombre;
                        usuario.ScoreActual   = emocion.Score;
                        var update = await bd.ActualizarUsuario(usuario);

                        await DisplayAlert("Correcto", $"Bienvenido {usuario.Nombre}", "OK");

                        await Navigation.PushAsync(new PaginaBienvenido(usuario));
                    }
                    else
                    {
                        await DisplayAlert("Error", "Persona no identificada", "OK");
                    }
                }
                else
                {
                    await DisplayAlert("Error", "No se pudo tomar la fotografía.", "OK");
                }
            }
            catch (Exception ex)
            {
            }
            finally
            {
                Loading(false);
            }
        }
Esempio n. 2
0
        async void Camera.IPictureCallback.OnPictureTaken(byte[] data, Android.Hardware.Camera camera)
        {
            File pictureFile = getOutputMediaFile();

            if (pictureFile == null)
            {
                return;
            }

            try
            {
                FileOutputStream fos = new FileOutputStream(pictureFile);
                fos.Write(data);
                fos.Close();

                ExifInterface ei          = new ExifInterface(pictureFile.AbsolutePath);
                var           orientation = (Android.Media.Orientation)ei.GetAttributeInt(ExifInterface.TagOrientation, (int)Android.Media.Orientation.Undefined);

                Android.Graphics.Bitmap rotatedBitmap = null;
                Android.Graphics.Bitmap bitmap        = LoadFromFile(pictureFile.AbsolutePath);

                switch (orientation)
                {
                case Android.Media.Orientation.Rotate90:
                    rotatedBitmap = rotateImage(bitmap, 0);
                    break;

                case Android.Media.Orientation.Rotate180:
                    rotatedBitmap = rotateImage(bitmap, 90);
                    break;

                case Android.Media.Orientation.Rotate270:
                    rotatedBitmap = rotateImage(bitmap, 180);
                    break;

                case Android.Media.Orientation.Normal:
                default:
                    rotatedBitmap = rotateImage(bitmap, 270);
                    break;
                }

                var data2             = bitmaptoByte(rotatedBitmap);
                FileOutputStream fos2 = new FileOutputStream(pictureFile);
                fos2.Write(data2);
                fos2.Close();

                var rostro = await ServicioFace.DetectarRostro(data2);

                var descripcion = await ServicioVision.DescribirImagen(data2);

                if (rostro != null)
                {
                    RunOnUiThread(async() =>
                    {
                        var frente                 = ImageAnalyzer.AnalizarPostura(rostro);
                        TextView txtFrente         = FindViewById <TextView>(Resource.Id.txtFrente);
                        TextView txtAnalisisFrente = FindViewById <TextView>(Resource.Id.txtAnalisisFrente);
                        txtFrente.Text             = frente.ToString("N2");
                        if (frente > Constantes.LookingAwayAngleThreshold)
                        {
                            txtFrente.SetTextColor(Android.Graphics.Color.Red);
                            txtAnalisisFrente.SetTextColor(Android.Graphics.Color.Red);
                            txtAnalisisFrente.Text = "No estás mirando al frente";

                            await PlayAlarm();
                        }
                        else
                        {
                            txtFrente.SetTextColor(Android.Graphics.Color.Green);
                            txtAnalisisFrente.SetTextColor(Android.Graphics.Color.Green);
                            txtAnalisisFrente.Text = "OK";
                        }

                        var boca                 = ImageAnalyzer.AnalizarBoca(rostro);
                        TextView txtBoca         = FindViewById <TextView>(Resource.Id.txtBoca);
                        TextView txtAnalisisBoca = FindViewById <TextView>(Resource.Id.txtAnalisisBoca);
                        txtBoca.Text             = boca.ToString("N2");

                        if (boca > Constantes.YawningApertureThreshold)
                        {
                            txtBoca.SetTextColor(Android.Graphics.Color.Red);
                            txtAnalisisBoca.SetTextColor(Android.Graphics.Color.Red);
                            txtAnalisisBoca.Text = "Posiblemente está bostezando";

                            await PlayAlarm();
                        }
                        else
                        {
                            txtBoca.SetTextColor(Android.Graphics.Color.Green);
                            txtAnalisisBoca.SetTextColor(Android.Graphics.Color.Green);
                            txtAnalisisBoca.Text = "OK";
                        }

                        var ojos                 = ImageAnalyzer.AnalizarOjos(rostro);
                        TextView txtOjos         = FindViewById <TextView>(Resource.Id.txtOjos);
                        TextView txtAnalisisOjos = FindViewById <TextView>(Resource.Id.txtAnalisisOjos);
                        txtOjos.Text             = ojos.ToString("N2");

                        if (ojos < Constantes.SleepingApertureThreshold)
                        {
                            txtOjos.SetTextColor(Android.Graphics.Color.Red);
                            txtAnalisisOjos.SetTextColor(Android.Graphics.Color.Red);
                            txtAnalisisOjos.Text = "¡Está dormido!";

                            await PlayAlarm();
                        }
                        else
                        {
                            txtOjos.SetTextColor(Android.Graphics.Color.Green);
                            txtAnalisisOjos.SetTextColor(Android.Graphics.Color.Green);
                            txtAnalisisOjos.Text = "OK";
                        }

                        if (descripcion.Description.Captions.Length > 0)
                        {
                            var distraccion             = descripcion.Description.Captions[0].Text;
                            TextView txtCelular         = FindViewById <TextView>(Resource.Id.txtCelular);
                            TextView txtAnalisisCelular = FindViewById <TextView>(Resource.Id.txtAnalisisCelular);

                            if (distraccion.Contains("phone"))
                            {
                                txtCelular.Text = "SI";
                                txtCelular.SetTextColor(Android.Graphics.Color.Red);
                                txtAnalisisCelular.SetTextColor(Android.Graphics.Color.Red);
                                txtAnalisisCelular.Text = "¡Está usando el teléfono móvil!";
                            }
                            else
                            {
                                txtCelular.Text = "NO";
                                txtCelular.SetTextColor(Android.Graphics.Color.Green);
                                txtAnalisisCelular.SetTextColor(Android.Graphics.Color.Green);
                                txtAnalisisCelular.Text = "OK";
                            }
                        }
                    });
                }
            }
            catch (FileNotFoundException e)
            {
            }
            catch (IOException e)
            {
            }
            finally
            {
                isAnalyzing = false;
            }
        }
Esempio n. 3
0
        async void btnAnalizar_Clicked(object sender, EventArgs e)
        {
            if (foto != null)
            {
                try
                {
                    Loading(true);

                    // Fase 1 - Face
                    var rostro = await ServicioFace.DetectarRostro(foto);

                    var frente = ImageAnalyzer.AnalizarPostura(rostro);
                    txtFrente.Text = frente.ToString("N2");

                    if (frente > Constantes.LookingAwayAngleThreshold)
                    {
                        txtFrente.TextColor         = Color.Red;
                        txtAnalisisFrente.TextColor = Color.Red;
                        txtAnalisisFrente.Text      = "Mire al frente se va a matar";
                    }
                    else
                    {
                        txtFrente.TextColor         = Color.Green;
                        txtAnalisisFrente.TextColor = Color.Green;
                        txtAnalisisFrente.Text      = "OK";
                    }

                    // Fase 2 - Vision
                    var descripcion = await ServicioVision.DescribirImagen(foto);

                    var analisis = await ServicioVision.AnalizarImagen(foto);

                    if (descripcion.Description.Captions.Length > 0)
                    {
                        var distraccion = descripcion.Description.Captions[0].Text;
                        if (distraccion.Contains("phone"))
                        {
                            txtCelular.Text              = "SI";
                            txtCelular.TextColor         = Color.Red;
                            txtAnalisisCelular.TextColor = Color.Red;
                            txtAnalisisCelular.Text      = "¡El celular al bolante MATAAAAAAAAAAA......!";
                        }
                        else
                        {
                            txtCelular.Text              = "NO";
                            txtCelular.TextColor         = Color.Green;
                            txtAnalisisCelular.TextColor = Color.Green;
                            txtAnalisisCelular.Text      = "OK";
                        }
                    }
                }
                catch (Exception ex)
                {
                    await DisplayAlert("Error", "Excepción: " + ex.Message, "OK");
                }
                finally
                {
                    Loading(false);
                }
            }
            else
            {
                await DisplayAlert("Error", "Debes tomar la fotografía", "OK");
            }
        }
        async void btnAnalizar_Clicked(object sender, EventArgs e)
        {
            if (foto != null)
            {
                try
                {
                    Loading(true);

                    // Fase 1 - Face
                    var rostro = await ServicioFace.DetectarRostro(foto);

                    var frente = ImageAnalyzer.AnalizarPostura(rostro);
                    txtFrente.Text = frente.ToString("N2");

                    if (frente > Constantes.LookingAwayAngleThreshold)
                    {
                        txtFrente.TextColor         = Color.Red;
                        txtAnalisisFrente.TextColor = Color.Red;
                        txtAnalisisFrente.Text      = "No estás mirando al frente";
                    }
                    else
                    {
                        txtFrente.TextColor         = Color.Green;
                        txtAnalisisFrente.TextColor = Color.Green;
                        txtAnalisisFrente.Text      = "OK";
                    }

                    var boca = ImageAnalyzer.AnalizarBoca(rostro);
                    txtBoca.Text = boca.ToString("N2");

                    if (boca > Constantes.YawningApertureThreshold)
                    {
                        txtBoca.TextColor         = Color.Red;
                        txtAnalisisBoca.TextColor = Color.Red;
                        txtAnalisisBoca.Text      = "Posiblemente está bostezando";
                    }
                    else
                    {
                        txtBoca.TextColor         = Color.Green;
                        txtAnalisisBoca.TextColor = Color.Green;
                        txtAnalisisBoca.Text      = "OK";
                    }

                    var ojos = ImageAnalyzer.AnalizarOjos(rostro);
                    txtOjos.Text = ojos.ToString("N2");

                    if (ojos < Constantes.SleepingApertureThreshold)
                    {
                        txtOjos.TextColor         = Color.Red;
                        txtAnalisisOjos.TextColor = Color.Red;
                        txtAnalisisOjos.Text      = "¡Está dormido!";
                    }
                    else
                    {
                        txtOjos.TextColor         = Color.Green;
                        txtAnalisisOjos.TextColor = Color.Green;
                        txtAnalisisOjos.Text      = "OK";
                    }

                    // Fase 2 - Vision
                    var descripcion = await ServicioVision.DescribirImagen(foto);

                    var analisis = await ServicioVision.AnalizarImagen(foto);

                    if (descripcion.Description.Captions.Length > 0)
                    {
                        var distraccion = descripcion.Description.Captions[0].Text;
                        if (distraccion.Contains("phone"))
                        {
                            txtCelular.Text              = "SI";
                            txtCelular.TextColor         = Color.Red;
                            txtAnalisisCelular.TextColor = Color.Red;
                            txtAnalisisCelular.Text      = "¡Está usando el teléfono móvil!";
                        }
                        else
                        {
                            txtCelular.Text              = "NO";
                            txtCelular.TextColor         = Color.Green;
                            txtAnalisisCelular.TextColor = Color.Green;
                            txtAnalisisCelular.Text      = "OK";
                        }
                    }
                }
                catch (Exception ex)
                {
                    await DisplayAlert("Error", "Excepción: " + ex.Message, "OK");
                }
                finally
                {
                    Loading(false);
                }
            }
            else
            {
                await DisplayAlert("Error", "Debes tomar la fotografía", "OK");
            }
        }