App de análisis de ocupación de Vertex AI Vision con administración de eventos

1. Objetivos

Descripción general

En este codelab, se enfocará en crear una aplicación de Vertex AI Vision de extremo a extremo para enviar eventos con la función de administración de eventos. Usaremos las funciones incorporadas del modelo especializado previamente entrenado Análisis de ocupación' para generar eventos basados en la captura de los siguientes elementos:

  • Cuenta la cantidad de vehículos y personas que cruzan una calle en una línea determinada.
  • Cuenta la cantidad de vehículos o personas en cualquier región fija de la ruta.
  • Detectar congestión en cualquier parte de la ruta

Qué aprenderás

  • Cómo transferir videos para transmitirlos
  • Cómo crear una aplicación en Vertex AI Vision
  • Diferentes funciones disponibles en las estadísticas de ocupación y cómo usarlas
  • Cómo implementar la app
  • Cómo buscar videos en el almacén de contenido multimedia de tu almacenamiento de Vertex AI Vision
  • Cómo crear una Cloud Function que procese los datos del modelo de estadísticas de ocupación
  • Cómo crear un tema y una suscripción de Pub/Sub
  • Cómo configurar la administración de eventos para enviar eventos a través de un tema de Pub/Sub

2. Antes de comenzar

  1. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud. Nota: Si no planeas conservar los recursos creados durante este procedimiento, crea un proyecto en lugar de seleccionar uno existente. Cuando termines, puedes borrar el proyecto y quitar todos los recursos asociados con él. Ir al selector de proyectos
  2. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.
  3. Habilita las APIs de Compute Engine y Vision AI. Habilitar las API

Crea una cuenta de servicio:

  1. En la consola de Google Cloud, ve a la página Crear cuenta de servicio. Ve a Crear cuenta de servicio
  2. Elige tu proyecto.
  3. Escribe un nombre en el campo Nombre de cuenta de servicio. La consola de Google Cloud completa el campo ID de cuenta de servicio en función de este nombre. En el campo Descripción de la cuenta de servicio, ingresa una descripción. Por ejemplo, Cuenta de servicio para la guía de inicio rápido.
  4. Haz clic en Crear y continuar.
  5. Para proporcionar acceso a tu proyecto, otorga los siguientes roles a tu cuenta de servicio: IA visual > Editor de IA visual, Compute Engine > Administrador de instancias de Compute (beta), Almacenamiento > Visualizador de objetos de almacenamiento † . En la lista Seleccionar un rol, selecciona uno. Para obtener roles adicionales, haz clic en Agregar otro rol y agrega cada rol adicional. Nota: El campo Función afecta a qué recursos puede acceder tu cuenta de servicio en el proyecto. Puedes revocar estas funciones o asignar otras más adelante. En entornos de producción, no otorgues los roles de propietario, editor o visualizador. En su lugar, otorga un rol predefinido o un rol personalizado que satisfaga tus necesidades.
  6. Haz clic en Continuar.
  7. Haz clic en Listo para terminar de crear la cuenta de servicio. No cierres la ventana del navegador. La usarás en la próxima tarea.

Crea una clave de cuenta de servicio:

  1. En la consola de Google Cloud, haz clic en la dirección de correo electrónico de la cuenta de servicio que creaste.
  2. Haga clic en Claves.
  3. Haz clic en Agregar clave y, luego, en Crear clave nueva.
  4. Haga clic en Crear. Se descargará un archivo de claves JSON en tu computadora.
  5. Haz clic en Cerrar.
  6. Instala y inicializa Google Cloud CLI.

† El rol solo es necesario si copias un archivo de video de muestra de un bucket de Cloud Storage.

3. Transfiere un archivo de video para transmitirlo

Puedes usar vaictl para transmitir los datos de video a tu app de estadísticas de ocupación.

Comienza por activar la API de Vision AI en la consola de Cloud

Registra una transmisión nueva

  1. Haz clic en la pestaña Flujos en el panel izquierdo de Vertex AI Vision.
  2. Haz clic en Registrarse.
  3. En el campo Nombre del flujo, ingresa "traffic-stream".
  4. En la región, ingresa “us-central1”.
  5. Haz clic en Registrar.

La transmisión tardará unos minutos en registrarse.

Prepara un video de muestra

  1. Puedes copiar un video de ejemplo con el siguiente comando gsutil cp. Reemplaza la siguiente variable:
  • FUENTE: La ubicación de un archivo de video que se usará. Puedes usar tu propia fuente de archivo de video (por ejemplo, gs://BUCKET_NAME/FILENAME.mp4) o el video de muestra (gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4)(video con personas y vehículos, fuente).
export SOURCE=gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4
gsutil cp $SOURCE .

Cómo transferir datos a tu transmisión

  1. Para enviar este archivo de video local al flujo de entrada de la app, usa el siguiente comando. Debes realizar las siguientes sustituciones de variables:
  • PROJECT_ID: El ID de tu proyecto de Google Cloud.
  • LOCATION_ID: Es el ID de tu ubicación. Por ejemplo, us-central1. Para obtener más información, consulta Ubicaciones de Cloud.
  • LOCAL_FILE: Es el nombre de un archivo de video local. Por ejemplo, street_vehicles_people.mp4.
  • Marca -loop: Opcional. Reproduce datos de archivos en bucle para simular la transmisión.
export PROJECT_ID=<Your Google Cloud project ID>
export LOCATION_ID=us-central1
export LOCAL_FILE=street_vehicles_people.mp4
  1. Este comando transmite un archivo de video a una transmisión. Si usas la marca –loop, el video se repetirá indefinidamente en la transmisión hasta que detengas el comando. Ejecutaremos este comando como un trabajo en segundo plano para que siga transmitiendo.
  • ( agrega nohup al principio y "&" al final para que sea una tarea en segundo plano)
nohup vaictl -p $PROJECT_ID \
    -l $LOCATION_ID \
    -c application-cluster-0 \
    --service-endpoint visionai.googleapis.com \
send video-file to streams 'traffic-stream' --file-path $LOCAL_FILE --loop &

Es posible que demore alrededor de 100 segundos entre el inicio de la operación de transferencia de vaictl y la aparición del video en el panel.

Una vez que la transferencia de transmisión esté disponible, podrás ver el feed de video en la pestaña Transmisiones del panel de Vertex AI Vision si seleccionas la transmisión de la transmisión de tráfico.

Ve a la pestaña Transmisiones.

Vista del video en vivo que se transmite en la IUVista en vivo del video que se transfiere a la transmisión en la consola de Google Cloud. Créditos del video: Elizabeth Mavor en Pixabay (se agregó la pixelación).

4. Crea una Cloud Function

Necesitaremos una Cloud Function para procesar los datos del modelo y generar eventos que luego se enviarán a través del canal de eventos.

Obtén más información sobre Cloud Function aquí.

Crea una Cloud Function que escuche tu modelo

  1. Navega a la página de creación de la IU de Cloud Function.
  2. Establece el nombre de la función, que se usará más adelante para hacer referencia a esta Cloud Function en la configuración de la administración de eventos.
  3. Asegúrate de que la región coincida con tu aplicación.
  4. Ajusta y guarda la configuración del activador.
  5. Haz clic en el botón Siguiente para ir a la parte de “código”. No se pudo cargar el ejemplo de creación de Cloud Function
  6. Edita tu Cloud Function. Este es un ejemplo con el entorno de ejecución de Node.js.
/**
* Responds to any HTTP request.
*
* @param {!express:Request} req HTTP request context.
* @param {!express:Response} res HTTP response context.
*/
exports.hello_http = (req, res) => {
 // Logging statement can be read with cmd `gcloud functions logs read {$functionName}`.
 // For more about logging, please see https://cloud.google.com/functions/docs/monitoring

 // The processor output will be stored in req.body.
 const messageString = constructMessage(req.body);

 // Send your message to operator output with res HTTP response context.
 res.status(200).send(messageString);
};

function constructMessage(data) {
 /**
  * Typically, your processor output should contains appPlatformMetadata & it's designed output.
  * For example here, if your output is of tyoe OccupancyCountingPredictionResult, you will need
  * to construct the return annotation as such. 
  */

 // access appPlatformMetat.
 const appPlatformMetadata = data.appPlatformMetadata;

 // access annotations.
 const annotations = data.annotations.map(annotation => {
  // This is a mock OccupancyCountingPredictionResult annotation.
  return {"annotation" : {"track_info": {"track_id": "12345"}}};
 });

 const events = [];
 for(const annotation of annotations) {
   events.push({
       "event_message": "Detection event",
       "payload" : {
         "description" : "object detected"
       },
       "event_id" : "track_id_12345"
     });
 }

  /**
   * Typically, your cloud function should return a string represent a JSON which has two fields:
   * "annotations" must follow the specification of the target model.
   * "events" should be of type "AppPlatformEventBody".
   */
 const messageJson = {
   "annotations": annotations,
   "events": events,
 };
 return JSON.stringify(messageJson);
}
  1. Haz clic en el botón “Implementar” para implementar la función.

5. Crear tema y suscripción de Pub/Sub

Deberemos proporcionar un tema de Pub/Sub a la aplicación a la que pueda enviar el evento. Para recibir los eventos, una suscripción a Pub/Sub debe suscribirse a la óptica configurada.

Obtén más información sobre el tema de Pub/Sub aquí y la suscripción aquí.

Crea un tema de Pub/Sub

Para crear un tema de Pub/Sub, puedes usar gcloud CLI: (debes reemplazar SUBSCRIPTION_ID por el valor real de tu configuración)

gcloud pubsub topics create TOPIC_ID

Como alternativa, puedes usar la IU de Pub/Sub

Crea una suscripción de Pub/Sub

Para crear una suscripción a Pub/Sub, puedes usar gcloud CLI: (Debes reemplazar SUBSCRIPTION_ID y TOPIC_ID por el valor real de tu configuración).

gcloud pubsub subscriptions create SUBSCRIPTION_ID \
    --topic=TOPIC_ID \

Como alternativa, puedes usar la IU de Pub/Sub

6. Crea una aplicación

El primer paso es crear una app que procese tus datos. Una app se puede considerar como una canalización automatizada que conecta lo siguiente:

  • Transferencia de datos: Se transfiere un feed de video a una transmisión.
  • Análisis de datos: Se puede agregar un modelo de IA(visión por computadora) después de la transferencia.
  • Almacenamiento de datos: Las dos versiones del feed de video (la transmisión original y la que procesa el modelo de IA) se pueden almacenar en un almacén de contenido multimedia.

En la consola de Google Cloud, una app se representa como un gráfico.

Cómo crear una app vacía

Antes de propagar el gráfico de la app, primero debes crear una app vacía.

Crea una app en la consola de Google Cloud.

  1. Ve a la consola de Google Cloud.
  2. Abre la pestaña Aplicaciones del panel de Vertex AI Vision.

Ve a la pestaña Aplicaciones.

  1. Haz clic en el botón Agregar Crear.
  2. Ingresa traffic-app como el nombre de la app y elige tu región.
  3. Haz clic en Crear.

Cómo agregar nodos de componentes de la app

Después de crear la aplicación vacía, puedes agregar los tres nodos al gráfico de la app:

  1. Nodo de transferencia: Es el recurso de transmisión que transfiere datos.
  2. Nodo de procesamiento: Es el modelo de análisis de ocupación que actúa sobre los datos transferidos.
  3. Nodo de almacenamiento: Es el almacén de contenido multimedia que almacena los videos procesados y funciona como un almacén de metadatos. Los almacenes de metadatos incluyen información de análisis sobre los datos de video transferidos y la información inferida por los modelos de IA.

Agrega nodos componentes a tu app en la consola.

  1. Abre la pestaña Aplicaciones del panel de Vertex AI Vision. Ir a la pestaña Aplicaciones
  2. En la línea de la app de tráfico, selecciona Ver gráfico. Esto te llevará a la visualización del gráfico de la canalización de procesamiento.

Cómo agregar un nodo de transferencia de datos

  1. Para agregar un nodo de flujo de entrada, selecciona la opción Flujos en la sección Conectores del menú lateral.
  2. En la sección Fuente del menú Transmisiones que se abre, selecciona Agregar transmisiones.
  3. En el menú Add streams, elige Register new streams y agrega traffic-stream como nombre de la transmisión.
  4. Para agregar el flujo al gráfico de la aplicación, haz clic en Agregar transmisiones.

Agrega un nodo de procesamiento de datos

  1. Para agregar el nodo del modelo de recuento de ocupación, selecciona la opción Análisis de ocupación en la sección Modelos especializados del menú lateral.
  2. Deja las selecciones predeterminadas Personas y Vehículos.
  3. Agrega líneas en la intersección de líneas. Usa la herramienta de línea de varios puntos para dibujar las líneas en las que necesitas detectar autos o personas que salen o entran.
  4. Dibujar las zonas activas para contar personas o vehículos en esa zona
  5. Se agregó la configuración del tiempo de permanencia para detectar la congestión si se dibuja una zona activa.
  • (actualmente, no se admiten simultáneamente la zona activa y el cruce de líneas). Usa solo una función a la vez).

3acdb6f1e8474e07.png ce63449d601995e9.png

194c54d2bbcf7e8a.png

Agrega un nodo de almacenamiento de datos

  1. Para agregar el nodo de destino de salida (almacenamiento), selecciona la opción Almacén de medios de Vertex AI Vision en la sección Conectores del menú lateral.
  2. En el menú Almacén de medios de Vertex AI Vision, haz clic en Conectar almacén.
  3. En el menú Conectar almacén, selecciona Crear almacén nuevo. Asígnale un nombre al almacén de tráfico y deja la duración del TTL en 14 días.
  4. Haz clic en el botón Crear para agregar el almacén.

7. Configura la administración de eventos

Duración: 02:00

Conectaremos el modelo a la función de Cloud Functions creada anteriormente para el procesamiento posterior, en la que la función de Cloud Functions puede procesar libremente el resultado del modelo y generar eventos que se ajusten a tus necesidades. Luego, configuraremos el canal del evento. Para ello, configuraremos el tema de Pub/Sub creado previamente como nuestro objetivo. También puedes establecer un intervalo mínimo, lo que ayudará a evitar que el mismo evento inunde tu canal de eventos en un período breve.

Selecciona Cloud Function para el procesamiento posterior

  1. Haz clic en el nodo de procesamiento de datos(análisis de ocupación) en el gráfico de tu aplicación para abrir el menú lateral.
  2. Selecciona tu Cloud Function (identificada por su nombre de función) en el menú desplegable Posprocesamiento.
  3. El gráfico de la aplicación guardará automáticamente los cambios.

No se pudo cargar la configuración del ejemplo de procesamiento posterior

Configura el canal de eventos

  1. Haz clic en el nodo de procesamiento de datos(análisis de ocupación) en el gráfico de tu aplicación para abrir el menú lateral.
  2. Haz clic en "CONFIGURAR NOTIFICACIÓN DE EVENTO" en la sección Notificación de eventos. No se pudo cargar el ejemplo de notificación de eventos
  3. Selecciona tu tema de Pub/Sub en el menú desplegable.
  4. (Opcional) Establece el intervalo o la frecuencia mínimos para la publicación de eventos.

No se pudo cargar el ejemplo de diálogo de notificación de eventos

8. Implementar tu app para usarla

Una vez que compilaste tu app de extremo a extremo con todos los componentes necesarios, el último paso para usarla es implementarla.

  1. Abre la pestaña Aplicaciones del panel de Vertex AI Vision. Ve a la pestaña Aplicaciones.
  2. Selecciona Ver gráfico junto a la app de traffic-app en la lista.
  3. En la página del compilador de gráficos de la aplicación, haz clic en el botón Implementar.
  4. En el siguiente diálogo de confirmación, selecciona Implementar. La operación de implementación puede tardar varios minutos en completarse. Cuando finaliza la implementación, aparecen marcas de verificación verdes junto a los nodos. ee78bbf00e5db898.png

9. Verifica eventos/mensajes en la suscripción a Pub/Sub

Después de transferir datos de video a tu app de procesamiento, la función de Cloud Functions debería generar eventos una vez que el modelo de estadísticas de ocupación genere la anotación. Luego, esos eventos se deben publicar como mensajes a través de tu tema de Pub/Sub y recibirlos con tu suscripción.

Los siguientes pasos suponen que tienes una suscripción de extracción.

  1. Abre la lista de suscripciones de Pub/Sub en tu proyecto y busca la suscripción correspondiente. Ve a la página de la lista de suscripciones de Pub/Sub.
  2. Ve a la pestaña “Mensaje”.
  3. Haz clic en el botón "extraer".
  4. Consulta tu mensaje en la tabla. error al cargar la imagen del mensaje de suscripción de Pub/Sub

Como alternativa, puedes aprender a recibir mensajes sin la IU. Ir a la página de suscripciones

10. Felicitaciones

¡Felicitaciones! Terminaste el lab.

Realiza una limpieza

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Borra el proyecto

Borra los recursos individuales

Recursos

https://cloud.google.com/vision-ai/docs/overview

https://cloud.google.com/vision-ai/docs/occupancy-count-tutorial

Comentarios

Haz clic aquí para enviar comentarios

Encuesta

¿Cómo usarás este instructivo?

Ler Leer y completar los ejercicios

¿Qué tan útil te resultó este codelab?

Muy útil Moderada útil