1. Objetivos
Descripción general
Este codelab se enfoca en la creación de una aplicación de Vertex AI Vision de extremo a extremo para demostrar el envío de videos con la función de filtrado de movimiento. En este instructivo, analizaremos los diferentes parámetros de la configuración del filtro de movimiento:
- Sensibilidad de la detección de movimiento
- Duración mínima del evento
- Ventana de visualización
- Tiempo de enfriamiento
- Zona de detección de movimiento
Qué aprenderás
- Cómo transferir videos para transmitirlos
- Diferentes funciones disponibles en el filtro de movimiento y cómo usarlas
- Dónde comprobar las estadísticas del filtro de movimiento
- Cómo ajustar la configuración según tu video
2. Antes de comenzar
- 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
- 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 según 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.
- 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, elige un rol. Para obtener roles adicionales, haz clic en Agregar otro rol y agrega cada rol adicional. Nota: El campo Rol afecta a qué recursos puede acceder tu cuenta de servicio en tu 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.
- 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 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. Filtro de movimiento
El filtro de movimiento captura segmentos de video de productos y movimiento que contienen eventos de movimiento. Si ajustas la sensibilidad al movimiento, la duración mínima del evento, la ventana de visualización, el período de inactividad y la zona de detección de movimiento, el usuario puede configurar el filtro según sus propias necesidades.
Configuración del filtro de movimiento
Hay 5 configuraciones disponibles en el filtro de movimiento para la personalización.
- Sensibilidad al movimiento: Indica qué tan sensible debe ser el movimiento para activarse.
- Duración mínima del evento: La duración mínima en la que se capturará un evento de movimiento.
- Ventana de visualización: Indica durante cuánto tiempo debe comenzar a grabar el video antes de que se detecte un evento de movimiento.
- Período de inactividad: Después de que finalice un evento de movimiento, se producirá un período de inactividad con la duración especificada. Durante el período de inactividad, no se activarán los eventos de movimiento.
- Zona de detección de movimiento: Es la zona configurada por el usuario para especificar dónde se debe ejecutar la detección de movimiento. (Se explicará en una sección posterior)
Sensibilidad al movimiento
Usa la marca motion_detection_sensitivity
en el comando vaictl.
Cadena. Medio predeterminado. Puedes elegir entre bajo, medio o alto.
Cuanto mayor sea la sensibilidad de detección de movimiento, más sensible será al ruido y a los movimientos más pequeños. Se recomienda esta opción si hay objetos en movimiento más pequeños (como personas a distancia) y una iluminación estable.
Por otro lado, la sensibilidad baja es menos sensible a la interferencia de la iluminación. Este parámetro de configuración es perfecto cuando hay más interferencia de luz, como un entorno exterior, y para una calidad de video más baja, donde es posible que haya más ruidos. Dado que esta configuración es el filtro más agresivo de todos, podría ignorar los movimientos de objetos pequeños.
Duración mínima del evento
Usa la marca min_event_length_in_seconds
en el comando vaictl.
Número entero. La configuración predeterminada es 10 segundos. Intervalo de 0 segundos a 3,600 segundos
La duración mínima de los videos de eventos de movimiento que se analizarán una vez que se detecte un segmento de eventos de movimiento en el fotograma.
Ventana de visualización
Usa la marca look_back_window_in_seconds
en el comando vaictl.
Número entero. La configuración predeterminada es de 3 segundos. Rango de 0 a 3,600 segundos.
La ventana de visualización es la duración almacenada en caché antes de que se detecte un evento de movimiento. Es útil cuando nos interesa ver lo que sucede en el fotograma unos segundos antes de que se detecten los eventos de movimiento.
Período de inactividad
Usa la marca cool_down_period_in_seconds
en el comando vaictl.
Número entero. El valor predeterminado es de 300 segundos. Rango de 0 a 3,600 segundos.
El período de inactividad indica durante cuánto tiempo se detendrá la detección de movimiento después de que se capture un evento de movimiento. Durante el período de inactividad, no se ejecutará ningún procesamiento para detectar movimiento.
4. Ejemplo de filtro de movimiento básico
Manual del SDK de Vulkan
Para consultar el manual de vaictl
para el flujo de entrada con filtro de movimiento, usa el siguiente comando.
vaictl send video-file applying motion-filter -h
Prepara un video de muestra
- Puedes copiar un video de ejemplo con el siguiente comando gsutil cp. Reemplaza la siguiente variable:
- SOURCE: Es 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 .
Prepara variables de entorno.
Establece las siguientes variables de entorno para usar la plantilla de comando proporcionada.
Variables de vaictl
- 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
Variables del filtro de movimiento
- MOTION_SENSITIVITY: Indica qué tan sensible será la detección de movimiento.
- MIN_EVENT_LENGTH: Es la duración mínima de los eventos de movimiento.
- LOOK_BACK_WINDOW: Es la duración que se debe capturar antes del primer movimiento en un evento de movimiento.
- COOL_DOWN_PERIOD: Es el período en el que se detendrá la detección de movimiento después de que se capture un evento de movimiento.
export MOTION_SENSITIVITY=<low or medium or high> export MIN_EVENT_LENGTH=<0-3600> export LOOK_BACK_WINDOW=<0-3600> export COOL_DOWN_PERIOD=<0-3600>
Prepara el comando de filtro de movimiento
Existen dos opciones para usar el filtro de movimiento con el flujo de entrada. La primera opción es enviar los eventos de movimiento a un flujo en la consola de Cloud. La segunda opción es enviar los eventos de movimiento al almacenamiento local.
Envía los resultados a la consola de Cloud
Puedes usar vaictl para transmitir los datos de video de salida a la consola de Cloud. Primero, activa la API de Vision AI en la consola de Cloud.
Registrar una transmisión nueva
- Haz clic en la pestaña Flujos en el panel izquierdo de Vertex AI Vision.
- Haz clic en Registrarse.
- En el campo Nombre de la transmisión, ingresa
motion-detection-stream
. - En la región, ingresa
us-central1
. - Haz clic en Registrar.
Cómo enviar resultados para transmitir
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.
Agrega nohup
al principio y &
al final para que sea una tarea en segundo plano.
INPUT_VIDEO=street_vehicles_people.mp4 vaictl -p $PROJECT \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file --file-path $INPUT_VIDEO \ applying motion-filter --motion-sensitivity=$MOTION_SENSITIVITY \ --min-event-length=$MIN_EVENT_LENGTH \ --lookback-length=$LOOK_BACK_WINDOW \ --cooldown-length=$COOL_DOWN_PERIOD \ to streams motion-detection-stream --loop
Es posible que pasen unos 100 segundos entre el inicio de la operación de transferencia vaictl y el video que aparece en el panel.
Una vez que la transferencia de transmisiones esté disponible, podrás ver el feed de video en la pestaña Transmisiones del panel de Vertex AI Vision seleccionando la transmisión de tráfico.
Cómo enviar resultados al almacenamiento local
Este comando transmite un archivo de video a una transmisión.
Agrega nohup
al principio y &
al final para que sea una tarea en segundo plano.
INPUT_VIDEO=street_vehicles_people.mp4 OUTPUT_PATH=<path_to_store_motion_events_on_local_disk> nohup vaictl -p $PROJECT \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file --file-path $INPUT_VIDEO \ applying motion-filter --motion-sensitivity=$MOTION_SENSITIVITY \ --min-event-length=$MIN_EVENT_LENGTH \ --lookback-length=$LOOK_BACK_WINDOW \ --cooldown-length=$COOL_DOWN_PERIOD \ to mp4file --mp4-file-path=$OUTPUT_PATH --loop
5. Zona de detección de movimiento
En esta sección, analizaremos el uso de la zona de detección de movimiento y cómo configurarla. El objetivo de la zona es mejorar la detección de movimiento enmascarando el movimiento que proviene de áreas que no te interesan.
La zona de detección de movimiento tiene dos tipos: (1) zonas positivas, en las que la detección de movimiento solo se ejecuta en el área con anotaciones, y (2) zonas negativas, en las que la detección de movimiento ignora cualquier movimiento en el área con anotaciones.
Anotación de zona
Usa la marca zone_annotation
en el comando vaictl para ingresar coordenadas para los polígonos de zona.
Cadena. Es el valor predeterminado vacío para la anotación de zona.
La anotación de zona será una entrada de cadena del usuario que indicará las zonas del marco en las que el usuario desea ocultarse o enfocarse. Para anotar la zona, el usuario deberá especificar las coordenadas de imagen del eje x y del eje y para cada nodo de la zona. Una zona debe tener tres o más nodos para formar un polígono. Puede haber varias zonas en un fotograma. Si las zonas se superponen, el área cubierta por ambas zonas seguirá estando cubierta.
La anotación de zona debe seguir una sintaxis de entrada específica.
- Para denotar un solo nodo, usa
:
para conectar los ejes x e y de una coordinación de imagen. Por ejemplo, un nodo de(0,0)
en la esquina superior izquierda se indicará como0:0
. - Para denotar todos los nodos en una sola zona, usa
;
para conectarlos. Por ejemplo, para una zona con nodos de(0,0)
,(100,0)
,(100,100)
y(0, 100)
, la zona se denotará como0:0;100:0;100:100;0:100
. Siempre ingresa los nodos como nodos de conexión uno al lado del otro. El orden puede ser en el sentido de las manecillas del reloj o en el sentido contrario.
*Una zona cuadrada con cuatro nodos.
*Una zona de un triángulo con tres nodos.
- Para denotar varias zonas en un solo marco, usa
-
para conectar diferentes zonas. Por ejemplo, si queremos ingresar(0,0)
,(100,0)
,(100,100)
,(0,100)
y(120,120)
,(110,150)
,(200,160)
, la anotación de la zona de entrada será0:0;100:0;100:100;0:100-120:120;110:150;200:160
.
*Dos zonas dentro de un marco.
Para obtener coordenadas a partir de imágenes, existen algunas herramientas disponibles en línea que te ayudarán a obtenerlas. Por ejemplo, consulta Wolfram - Get Coordinates from Image.
Excluir la zona con anotaciones
Usa la marca exclude_annotated_zone
en el comando vaictl para configurar la detección de movimiento dentro o fuera de una zona.
Booleano. El valor predeterminado es falso.
Exclude annotated zone es una entrada booleana del usuario que indica si el usuario desea excluir la zona con anotaciones en la detección de movimiento o no.
- Si se establece en
true
, la zona con anotaciones actuará como una zona negativa. No se detectarán movimientos en las zonas anotadas.
*Solo ejecuta la detección de movimiento fuera de las zonas de entrada.
- Si la estableces como falsa, la zona funcionará como una zona positiva en la que se enfocará la detección de movimiento.
*Solo ejecuta la detección de movimiento en las zonas de entrada.
6. Ejemplo de filtro de movimiento con zona de detección de movimiento
En este ejemplo, usaremos un video que tiene un árbol que se mueve constantemente en primer plano. En la configuración normal del filtro de movimiento, el video solo producirá un evento de movimiento que tenga la duración del video original, ya que el filtro de movimiento registra el árbol en movimiento como "en movimiento constante durante todo el video". Sin embargo, con la ayuda de la zona de detección de movimiento, podemos enmascarar correctamente el movimiento del árbol y enfocarnos en el movimiento de los automóviles y los peatones.
Preparación de videos
El video de ejemplo (gs://cloud-samples-data/vertex-ai-vision/dynamic-background-fall.mp4) contiene árboles, automóviles y peatones de www.changedetection.net.
Crédito del video: N. Goyette, P.-M. Jodoin, F. Porikli, J. Konrad y P. Ishwar, changedetection.net: A new change Detection benchmark dataset, en el taller de IEEE sobre la detección de cambios de Proc. (CDW-2012) en CVPR-2012, Providence, Rhode Island, del 16 al 21 de junio, 2012
Preparación de las variables de entorno
Variables del proyecto de Google Cloud
export PROJECT_ID=<Your Google Cloud project ID> export LOCATION_ID=us-central1 export LOCAL_FILE=street_vehicles_people.mp4
Configuración básica del filtro de movimiento.
export MOTION_SENSITIVITY=<low or medium or high> export MIN_EVENT_LENGTH=<0-3600> export LOOK_BACK_WINDOW=<0-3600> export COOL_DOWN_PERIOD=<0-3600>
Configuración de la zona de detección de movimiento.
Elige una de las siguientes opciones para ver los diferentes tipos de uso de la zona de detección de movimiento.
Excluye el árbol para la detección de movimiento.
export ZONE_ANNOTATION="0:0;680:0;660:70;380:320;100:150" export EXCLUDE_ANNOTATED_ZONE=true
*Solo ejecuta la detección de movimiento fuera de las zonas de entrada.
Enfocar la detección de movimiento en la calle
export ZONE_ANNOTATION="0:300;780:300;780:480;0:480" export EXCLUDE_ANNOTATED_ZONE=false
*Solo ejecuta la detección de movimiento fuera de las zonas de entrada.
Enviar transmisión de video por Internet con filtro de movimiento
Envía los eventos de movimiento a la consola de Cloud
Puedes usar vaictl para transmitir los datos de video de salida a la consola de Cloud. Primero, activa la API de Vision AI en la consola de Cloud.
Registra una transmisión nueva
- Haz clic en la pestaña Flujos en el panel izquierdo de Vertex AI Vision.
- Haz clic en Registrarse.
- En el campo Nombre de la transmisión, ingresa
motion-detection-stream
. - En la región, ingresa
us-central1
. - Haz clic en Registrar.
Cómo enviar resultados para transmitir
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.
Agrega nohup
al principio y &
al final para que sea una tarea en segundo plano.
vaictl -p $PROJECT \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file --file-path $INPUT_VIDEO \ applying motion-filter --motion-sensitivity=$MOTION_SENSITIVITY \ --min-event-length=$MIN_EVENT_LENGTH \ --lookback-length=$LOOK_BACK_WINDOW \ --cooldown-length=$COOL_DOWN_PERIOD \ --zone_annotation=ZONE_ANNOTATION \ --exclude_annotated_zone=$EXCLUDE_ANNOTATED_ZONE \ to streams motion-detection-stream --loop
Es posible que pasen unos 100 segundos entre el inicio de la operación de transferencia vaictl y el video que aparece 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.
Cómo enviar resultados al almacenamiento local
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.
Agrega nohup
al principio y &
al final para que sea una tarea en segundo plano.
OUTPUT_PATH=<path_to_store_motion_events> vaictl -p $PROJECT \ -l $LOCATION_ID \ -c application-cluster-0 \ --service-endpoint visionai.googleapis.com \ send video-file --file-path $INPUT_VIDEO \ applying motion-filter --motion-sensitivity=$MOTION_SENSITIVITY \ --min-event-length=$MIN_EVENT_LENGTH \ --lookback-length=$LOOK_BACK_WINDOW \ --cooldown-length=$COOL_DOWN_PERIOD \ --zone_annotation=$ZONE_ANNOTATION \ --exclude_annotated_zone=$EXCLUDE_ANNOTATED_ZONE \ to mp4file --mp4-file-path=$OUTPUT_PATH --loop
7. Felicitaciones
¡Felicitaciones! Completaste el lab.
Realiza una limpieza
Para evitar que se generen cargos en tu cuenta de Google Cloud por los recursos que usaste en este instructivo, finaliza la operación del SDK de vaictl a través de la línea de comandos con ctrl
+ z
.
Recursos
https://cloud.google.com/vision-ai/docs/overview
https://cloud.google.com/vision-ai/docs/motion-filtering-model
https://cloud.google.com/vision-ai/docs/create-manage-streams
Comentarios
Haz clic aquí para enviar comentarios