Bienvenida e Introducción

1

Qué aprenderás sobre las firebase cloud functions

2

Qué es firebase y las cloud functions

Consola web de administración

3

Consola de administración y documentación

4

Creación del proyecto de Cloud Functions

Extendiendo la Gestión de Usuarios con Cloud Functions.

5

Creación de las cloud functions de autenticación

6

Probando y desplegando las Cloud Functions de autenticación

Extendiendo Firestore con Cloud Functions.

7

Creación de las cloud functions de Firestore

8

Probando y desplegando las cloud functions de Firestore

Extendiendo el Almacenamiento con Cloud Functions.

9

Creación de las cloud functions para el storage

10

Terminando de crear cloud functions para el storage y probando su funcionamiento

11

Probando y desplegando las cloud functions de almacenamiento con Firestore

Creando Cloud Functions HTTPS

12

Creación de la cloud function HTTPS

13

Bonus: Construyendo un controlador para la función HTTP

14

Probando y desplegando las cloud function HTTPS

Extendiendo el Hosting con Cloud Functions.

15

Usando las firebase cloud functions desde el hosting

Extendiendo crashlytics con Cloud Functions.

16

Creación de las cloud functions de Crashlytics

17

Probando y desplegando la cloud function de Crashlytics

Extendiendo Analytics con Cloud Functions.

18

Creación de las cloud functions cuando se registra un evento en las analíticas de Firebase

19

Probando y desplegando la cloud function de analíticas

Creación de pruebas unitarias a las Cloud Functions.

20

Creando pruebas unitarias en Firebase Cloud Functions

Optimizando las Cloud Functions.

21

Buenas practicas para las cloud functions

Cierre

22

Conclusiones finales y cierre

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Aprovecha el precio especial y haz tu profesión a prueba de IA

Antes: $249

Currency
$209
Suscríbete

Termina en:

0 Días
3 Hrs
40 Min
14 Seg
Curso de Firebase 5: Cloud Functions

Curso de Firebase 5: Cloud Functions

Juan Guillermo Gómez Torres

Juan Guillermo Gómez Torres

Terminando de crear cloud functions para el storage y probando su funcionamiento

10/22
Recursos

¿Cómo se integra Google Vision API para validar imágenes?

Google Vision API es una poderosa herramienta que nos permite validar el contenido de las imágenes sin necesidad de modificar el frontend de nuestras aplicaciones. Esto es posible gracias a la creación de clientes a través de sus bibliotecas y la ejecución de funciones específicas para detectar y clasificar contenidos potencialmente inapropiados en imágenes. Analicemos cómo lograr esta integración paso a paso.

¿Qué es un cliente de Vision API?

Para utilizar Google Vision API, empezamos creando un cliente de "ImageAnnotatorClient". Esta instancia es fundamental, ya que nos permite enviar imágenes a Google y recibir etiquetas sobre su contenido, evaluandoasí si la imagen contiene material violento, adulto o médico.

const vision = require('@google-cloud/vision');
const client = new vision.ImageAnnotatorClient();

¿Cómo descargar una imagen desde un bucket?

Para procesar una imagen con Vision API, primero necesitamos descargarla desde un bucket de almacenamiento en la nube. Utilizamos el método file para indicar la imagen a descargar y download para especificar su destino en nuestro entorno temporal de Cloud Fusion.

const bucket = storage.bucket('nombre-del-bucket');
await bucket.file('ruta/al/archivo.jpg').download({destination: '/tmp/ruta-de-archivo'});

¿Cómo se valida una imagen con Google Vision API?

Una vez descargada, la imagen se pasa a la función safeSearchDetection del cliente de Vision para analizar su contenido. Esta función aplica algoritmos de machine learning para asegurarse de que la imagen es segura.

const [result] = await client.safeSearchDetection('/tmp/ruta-de-archivo');
const detections = result.safeSearchAnnotation;

¿Cómo interpretar los resultados de la detección?

Los resultados devueltos por Vision API indican la probabilidad de que la imagen contenga contenido específico. Clasificamos estos resultados en variables como adulto, violencia, y médico.

const adulto = detections.adult;
const violencia = detections.violence;
const médico = detections.medical;

¿Qué se hace con los resultados?

El siguiente paso es comparar estos valores con etiquetas predefinidas para determinar si la imagen es adecuada. Si la imagen es apropiada, se actualiza el estado en la base de datos para que la imagen se publique. Si no, se notifica al usuario que la imagen no es adecuada.

if (esAdecuada(adulto) && esAdecuada(violencia) && esAdecuada(médico)) {
    await actualizarEstadoDelPost(idPost, true);
} else {
    await enviarNotificacion(idPost);
}

¿Cómo se gestionan las funciones de actualización en el backend?

¿Cómo se actualiza el estado de un post?

Usamos una función para buscar por ID el post en la base de datos y cambiar su estado de publicación.

async function actualizarEstadoDelPost(idPost, estado) {
    // Lógica para actualizar el estado del post en Firestore
}

¿Cómo se envía una notificación al usuario?

Cuando la imagen no es apropiada, se debe notificar al usuario. Se utiliza el token del post para enviar un mensaje a través de Firebase.

async function enviarNotificacion(idPost) {
    // Lógica para enviar la notificación al usuario
}

¿Cuáles son los beneficios de usar Google Vision API sin modificar el frontend?

La gran ventaja de usar Google Vision API directamente desde el backend es que potencialmente podemos integrar funcionalidades avanzadas de detección de contenido sin tocar si quiera el código del frontend. Esta separación de responsabilidades permite a equipos de desarrollo trabajar de manera más eficiente, aumentando el valor ofrecido a los usuarios sin la necesidad de cambios significativos en la interfaz de usuario.

Este enfoque no solo mejora la rapidez del desarrollo, sino que también favorece la escalabilidad y seguridad al gestionar contenido potencialmente inapropiado de forma centralizada antes de que llegue a ser publicado. Esto demuestra una de las más grandes eficiencias que proporciona Google Cloud en el manejo de contenido multimedia.

Aportes 4

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

no olvidar instalar la libreria de Vision

npm install --save @google-cloud/vision

safeSerachDetection -> Google aplica machine learning para que este en formato seguro

Interesante!

Codigo de Post.js

const admin = require('firebase-admin')
const functions = require('firebase-functions')
const path = require('path')
const os = require('os')
const fs = require('fs')
const vision = require('@google-cloud/vision')
const { Email } = require('./../utilidad/EmailHelper.js')
const plantillas = require('./../utilidad/PlantillasEmail.js')
const { Notificaciones } = require('./../notificaciones/Notificaciones.js')

class Posts {
  registrarAuditoria (idPost, nuevoPost, viejoPost) {
    // Reto
  }

  validarImagenPost (archivo) {
    const rutaArchivo = archivo.name
    const nombreArchivo = path.basename(rutaArchivo)
    const idPost = path.basename(rutaArchivo).split('.')[0]
    const bucket = admin.storage().bucket()
    const tmpRutaArchivo = path.join(os.tmpdir(), nombreArchivo)
    
    const cliente = new vision.ImageAnnotatorClient()
    
    return bucket
      .file(rutaArchivo)
      .download({
        destination : tmpRutaArchivo
      })
      .then(() => {
        return cliente.safeSearchDetection(tmpRutaArchivo)
      })
      .then(resultado => {
        const adulto = resultado[0].safeSearchAnnotation.adult
        const violence = resultado[0].safeSearchAnnotation.violence
        const medical = resultado[0].safeSearchAnnotation.medical
        return (
          this.esAdecuada(adulto) &&
          this.esAdecuada(medical) &&
          this.esAdecuada(violence)
        )
      })
      .then(resp => {
        if(resp){
          this.actualizarEstadoPost(idPost, true)
          return resp
        }

        return this.enviarNotRespImagenInapropiada(idPost)
      })
  }

  esAdecuada (resultado) {
    return (
      resultado !== 'POSSIBLE' &&
      resultado !== 'LIKELY' &&
      resultado !== 'VERY_LIKELY'
    )
  }

  actualizarEstadoPost (idPost, estado) {
    const refAuditoria = admin
      .firestore()
      .collection('posts')
      .doc(idPost)

    return refAuditoria.update({
      publicado: estado
    })
  }

  enviarNotRespImagenInapropiada (idPost) {
    console.log(`Consultar Token idPost => ${idPost}`)

    return admin
      .firestore()
      .collection('posts')
      .doc(idPost)
      .get()
      .then(post => {
        console.log(post)
        if (post.data().token !== null && post.data().token !== undefined) {
          console.log(`idPost token => ${post.data().token}`)
          const notificaciones = new Notificaciones()
          notificaciones.enviarNotificacionAToken(
            'Posts con imagen no permitida',
            'Tu post no se puede mostrar ya que la imagen no es permitida',
            'notvalidacionimagen',
            post.data().token
          )
        }

        return post
      })
  }

  enviarPostSemana (topicoNotificacion) {}
}

exports.Posts = Posts```