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); } }
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; } }
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"); } }