1. Objetivos
Descripción general
En este codelab, te enfocarás en crear una aplicación de Vertex AI Vision de extremo a extremo para supervisar videos de tráfico en tiempo real. Usaremos las funciones integradas del modelo especializado previamente entrenado Análisis de ocupación para capturar lo siguiente:
- 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 configurar una VM para 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 conectar el resultado a BigQuery, escribir una consulta en SQL para extraer estadísticas del resultado JSON del modelo y visualizar el resultado en Looker Studio en tiempo real
2. Antes de comenzar
- En la consola de Google Cloud, en la página del selector de proyectos, 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
- 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.
- Habilita las APIs de Compute Engine y Vision AI. Habilitar las API
Crea una cuenta de servicio:
- En la consola de Google Cloud, ve a la página Crear cuenta de servicio. Ir a Crear cuenta de servicio
- Elige tu proyecto.
- 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, Service account for quickstart.
- Haz clic en Crear y continuar.
- 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 ni Visualizador. En su lugar, otorga un rol predefinido o un rol personalizado que satisfaga tus necesidades.
- Haz clic en Continuar.
- 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:
- En la consola de Google Cloud, haz clic en la dirección de correo electrónico de la cuenta de servicio que creaste.
- Haga clic en Claves.
- Haz clic en Agregar clave y, luego, en Crear clave nueva.
- Haga clic en Crear. Se descargará un archivo de claves JSON en tu computadora.
- Haz clic en Cerrar.
- Instala e inicializa Google Cloud CLI.
† El rol solo es necesario si copias un archivo de video de muestra de un bucket de Cloud Storage.
3. Configura una VM para transmitir video
Antes de crear una aplicación en Análisis de ocupación, debe registrar una transmisión que la aplicación pueda usar más adelante.
En este instructivo, crearás una instancia de VM de Compute Engine que aloje un video y enviarás los datos de ese video en streaming desde la VM.
Crea una VM de Linux
El primer paso para enviar un video desde una instancia de VM de Compute Engine es crearla.
- En la consola ve a la página Instancias de VM. Ir a Instancias de VM
- Selecciona el proyecto y haz clic en Continuar.
- Haz clic en Crear instancia.
- Especifica un Nombre para la VM. Para obtener más información, consulta Convención de nombres de recursos.
- Opcional: Cambia la Zona para esta VM. Compute Engine aleatoriza la lista de zonas dentro de cada región para fomentar el uso en varias zonas.
- Acepta las opciones predeterminadas restantes. Para obtener más información sobre estas opciones, consulta Crea e inicia una VM.
- Para crear y, también, iniciar la VM, haz clic en Crear.
Configura el entorno de la VM
Después de que se inicie la VM, puedes usar la consola para conectarte a ella mediante SSH desde tu navegador. Luego, puedes descargar la herramienta de línea de comandos vaictl para transferir videos a tu transmisión.
Establece una conexión SSH a tu VM
- En la consola ve a la página Instancias de VM. Ir a Instancias de VM
- En la sección Conectar de la línea de la instancia que creaste, haz clic en SSH. Se abrirá una conexión SSH en una nueva ventana del navegador.
Descarga la herramienta de línea de comandos vaictl
- En la ventana SSH en el navegador, descarga la herramienta de línea de comandos de Vertex AI Vision (vaictl) con el siguiente comando:
wget https://github.com/google/visionai/releases/download/v0.0.4/visionai_0.0-4_amd64.deb
- Para instalar la herramienta de línea de comandos, ejecuta el siguiente comando:
sudo apt install ./visionai_0.0-4_amd64.deb
- Para probar la instalación, ejecuta el siguiente comando:
vaictl --help
4. Transfiere un archivo de video para transmitirlo
Después de configurar tu entorno de VM, puedes copiar un archivo de video de muestra y, luego, usar vaictl para transmitir los datos de video a tu app de estadísticas de ocupación.
Primero, activa la API de Vision AI en la consola de Cloud
Cómo registrar una transmisión nueva
- Haz clic en la pestaña de transmisiones en el panel izquierdo de Vertex AI Vision.
- Haz clic en Registrarse.
- En el nombre de las Novedades, ingresa "traffic-stream".
- En Región, ingresa "us-central1".
- Haz clic en Registrar.
La transmisión tardará unos minutos en registrarse.
Copia un video de muestra en la VM
- En la ventana SSH en el navegador de tu VM, copia un video de muestra 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 archivos 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 .
Transmite videos desde la VM y transfiere datos a tu transmisión
- 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
- Este comando transmite un archivo de video a una transmisión. Si usas la marca –loop, el video se repetirá en la transmisión hasta que detengas el comando. Ejecutaremos este comando como un trabajo en segundo plano para que siga transmitiendo incluso después de que se desconecte la VM.
- ( 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.
Vista en vivo del video que se transfiere a la transmisión en la consola de Google Cloud. Crédito del video: Elizabeth Mavor en Pixabay (se agregó pixelación).
5. Crea una aplicación
El primer paso es crear una app que procese tus datos. Se puede considerar que una aplicación es 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 procesó 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.
- Ve a la consola de Google Cloud.
- Abre la pestaña Aplicaciones del panel de Vertex AI Vision.
- Haz clic en el botón Agregar Crear.
- Ingresa traffic-app como el nombre de la app y elige tu región.
- 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:
- Nodo de transferencia: Es el recurso de transmisión que transfiere datos enviados desde una instancia de VM de Compute Engine que crees.
- Nodo de procesamiento: Es el modelo de estadísticas de ocupación que actúa sobre los datos transferidos.
- 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 analítica sobre datos de video transferidos y, también, información inferida por los modelos de IA.
Agrega nodos de componentes a tu app en la consola.
- Abre la pestaña Aplicaciones del panel de Vertex AI Vision. Ir a la pestaña Aplicaciones
- 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.
Agrega un nodo de transferencia de datos
- Para agregar un nodo de flujo de entrada, selecciona la opción Flujos en la sección Conectores del menú lateral.
- En la sección Fuente del menú Transmisiones que se abre, selecciona Agregar transmisiones.
- En el menú Add streams, elige Register new streams y agrega traffic-stream como nombre de la transmisión.
- Para agregar el flujo al gráfico de la aplicación, haz clic en Agregar flujos.
Agrega un nodo de procesamiento de datos
- 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.
- Deja las selecciones predeterminadas Personas y Vehículos.
- Agregar líneas en el cruce 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.
- Dibuja las zonas activas para contar las personas o los vehículos que se encuentren en ellas.
- Se agregó la configuración del tiempo de permanencia para detectar la congestión si se dibuja una zona activa.
- (actualmente, el cruce de líneas y zonas activas no es compatible simultáneamente. Usa solo una función a la vez).
Cómo agregar un nodo de almacenamiento de datos
- 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.
- En el menú Almacén de medios de Vertex AI Vision, haz clic en Conectar almacén.
- En el menú Conectar almacén, selecciona Crear almacén nuevo. Asigna el nombre traffic-warehouse al almacén y deja la duración del TTL en 14 días.
- Haz clic en el botón Crear para agregar el almacén.
6. Cómo conectar la salida a la tabla de BigQuery
Cuando agregues un conector de BigQuery a tu app de Vertex AI Vision, todos los resultados de los modelos de apps conectadas se transferirán a la tabla de destino.
Puedes crear tu propia tabla de BigQuery y especificarla cuando agregues un conector de BigQuery a la app o dejar que la plataforma de apps de Vertex AI Vision cree la tabla automáticamente.
Creación automática de tablas
Si permites que la plataforma de apps de Vertex AI Vision cree automáticamente la tabla, puedes especificar esta opción cuando agregues el nodo del conector de BigQuery.
Se aplican las siguientes condiciones del conjunto de datos y la tabla si deseas usar la creación automática de tablas:
- Dataset: El nombre del conjunto de datos creado automáticamente es visionai_dataset.
- Tabla: El nombre de la tabla creada automáticamente es visionai_dataset.APPLICATION_ID.
- Manejo de errores:
- Si existe una tabla con el mismo nombre en el mismo conjunto de datos, no se realizará la creación automática.
- Abre la pestaña Aplicaciones del panel de Vertex AI Vision. Ve a la pestaña Aplicaciones.
- Selecciona Ver app junto al nombre de tu aplicación en la lista.
- En la página del compilador de aplicaciones, selecciona BigQuery en la sección Conectores.
- Deja el campo Ruta de BigQuery vacío.
- En store metadata from: Selecciona solo “ocupation Analytics” y desmarca las transmisiones.
El gráfico de la app final debería verse de la siguiente manera:
7. 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.
- Abre la pestaña Aplicaciones del panel de Vertex AI Vision. Ir a la pestaña Aplicaciones
- Selecciona Ver gráfico junto a la app de traffic-app en la lista.
- En la página del compilador de gráficos de aplicaciones, haz clic en el botón Implementar.
- 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.
8. Busca contenido de video en el almacén de almacenamiento
Después de transferir datos de video a tu app de procesamiento, puedes ver los datos de video analizados y buscarlos en función de la información de estadísticas de ocupación.
- Abre la pestaña Almacenes del panel de Vision de Vertex AI. Ir a la pestaña Almacenes
- Busca el almacén de tráfico-almacén en la lista y haz clic en Ver recursos.
- En la sección Recuento de personas o Recuento de vehículos, establece el valor Mínimo en 1 y el valor Máximo en 5.
- Para filtrar los datos de video procesados almacenados en Media Warehouse de Vertex AI Vision, haz clic en Búsqueda.
Vista de los datos de video almacenados que coinciden con los criterios de búsqueda en la consola de Google Cloud. Crédito del video: Elizabeth Mavor en Pixabay (se aplicaron criterios de búsqueda).
9. Cómo analizar el resultado en la tabla de BigQuery
Ir a BigQuery
Selecciona el conjunto de datos: visionai_dataset.
Selecciona la tabla: tu APPLICATION_ID (en este caso, traffic-app).
Haz clic en los tres puntos que se encuentran a la derecha del nombre de la tabla y, luego, en Consulta.
Escribe la siguiente consulta:
Consulta 1: Consulta para verificar la cantidad de vehículos que cruza cada línea por minuto
abc.sql
—- Get list of active marked lines for each timeframe
WITH line_array AS (
SELECT
t.ingestion_time AS ingestion_time,
JSON_QUERY_ARRAY(t.annotation.stats["crossingLineCounts"]) AS lines
FROM
`PROJ_ID.visionai_dataset.APP_ID` AS t
),
—- Flatten active lines to get individual entities details
flattened AS (
SELECT
line_array.ingestion_time,
JSON_VALUE(line.annotation.id) as line_id,
JSON_QUERY_ARRAY(line["positiveDirectionCounts"]) AS entities
FROM line_array, unnest(line_array.lines) as line
)
—- Generate aggregate vehicle count per zone w.r.t time
SELECT
STRING(TIMESTAMP_TRUNC(ingestion_time, MINUTE) ) AS time, line_id,
SUM(INT64(entity["count"])) as vehicle_count
FROM
flattened, UNNEST(flattened.entities) AS entity
WHERE JSON_VALUE(entity['entity']['labelString']) = 'Vehicle'
GROUP BY time, line_id
Consulta 2: Consulta para verificar el recuento de vehículos por minuto en cada zona
—- Get list of active zones for each timeframe
WITH zone_array AS (
SELECT
t.ingestion_time AS ingestion_time,
JSON_QUERY_ARRAY(t.annotation.stats["activeZoneCounts"]) AS zones
FROM
`PROJ_ID.visionai_dataset.APP_ID` AS t
),
—- Flatten active zones to get individual entities details
flattened AS (
SELECT zone_array.ingestion_time, JSON_VALUE(zone.annotation.id) as zone_id,
JSON_QUERY_ARRAY(zone["counts"]) AS entities
FROM zone_array, unnest(zone_array.zones) as zone
)
—- Generate aggregate vehicle count per zone w.r.t time
SELECT
STRING(TIMESTAMP_TRUNC(ingestion_time, MINUTE) ) AS time,
zone_id,
SUM(INT64(entity["count"])) as vehicle_count
FROM flattened, UNNEST(flattened.entities) AS entity
WHERE JSON_VALUE(entity['entity']['labelString']) = 'Vehicle'
GROUP BY time, zone_id
En las consultas anteriores, puedes cambiar “Vehículo” por “Persona” para contar a las personas.
En este codelab, solo se mostrarán los datos de muestra y la visualización de la consulta 1. Puedes seguir un proceso similar para la consulta 2.
Haz clic en Explorar datos en el menú lateral derecho y selecciona Explorar con Looker Studio.
En el panel "dimensión", agrega la hora y cambia la configuración de hora a fecha y hora. En "dimensión de desglose", agrega line_id.
En el gráfico anterior, se muestra el recuento de vehículos/persona que cruza cada línea por minuto.
Las barras azul oscuro y azul claro indican los dos IDs de línea diferentes.
10. Felicitaciones
¡Felicitaciones! Completaste 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