Saltar al contenido principal

Opciones Avanzadas

Registro de eventos​

logger de SecureVu​

Cambia el nivel de registro predeterminado para fines de solución de problemas.

logger:
# Optional: default log level (default: shown below)
default: info
# Optional: module by module log level configuration
logs:
securevu.mqtt: error

Los niveles de registro disponibles son: debug, info, warning, error, critical

Ejemplos de módulos disponibles:

  • securevu.app
  • securevu.mqtt
  • securevu.object_detection.base
  • detector.<detector_name>
  • watchdog.<camera_name>
  • ffmpeg.<camera_name>.<sorted_roles> NOTA: Todos los registros de FFmpeg se envían con nivel error.

Registro de Go2RTC​

Consulta la documentación de go2rtc para la configuración del registro.

go2rtc:
streams:
# ...
log:
exec: trace

environment_vars​

Esta sección puede usarse para establecer variables de entorno para quienes no pueden modificar el entorno del contenedor, como dentro de Home Assistant OS. Los usuarios de Docker deben establecer las variables de entorno en su comando docker run (-e SECUREVU_MQTT_PASSWORD=secret) o en el archivo docker-compose.yml (sección environment:). Ten en cuenta que los valores aquí definidos se almacenan en texto plano en tu archivo de configuración, por lo que si el objetivo es mantener las credenciales fuera de tu configuración, utiliza variables de entorno de Docker o secretos de Docker.

Las variables con el prefijo SECUREVU_ pueden referenciarse en campos de configuración que admiten la sustitución de variables de entorno (como el host MQTT y las credenciales, las URLs de transmisión de cámaras y el host ONVIF con sus credenciales) usando la sintaxis {SECUREVU_VARIABLE_NAME}.

Ejemplo:

environment_vars:
SECUREVU_MQTT_USER: my_mqtt_user
SECUREVU_MQTT_PASSWORD: my_mqtt_password

mqtt:
host: "{SECUREVU_MQTT_HOST}"
user: "{SECUREVU_MQTT_USER}"
password: "{SECUREVU_MQTT_PASSWORD}"

Configuración de hilos de TensorFlow​

Si encuentras errores de creación de hilos durante el entrenamiento del modelo de clasificación, puedes limitar el uso de hilos de TensorFlow:

environment_vars:
TF_INTRA_OP_PARALLELISM_THREADS: "2" # Threads within operations (0 = use default)
TF_INTER_OP_PARALLELISM_THREADS: "2" # Threads between operations (0 = use default)
TF_DATASET_THREAD_POOL_SIZE: "2" # Data pipeline threads (0 = use default)

database​

La información de objetos rastreados y grabaciones se gestiona en una base de datos sqlite en /config/securevu.db. Si esa base de datos se elimina, las grabaciones quedarán huérfanas y deberán limpiarse manualmente. Tampoco aparecerán en el Explorador de Medios dentro de Home Assistant.

Si almacenas tu base de datos en un recurso compartido de red (SMB, NFS, etc.), es posible que obtengas un mensaje de error database is locked al iniciar. Puedes personalizar la ubicación de la base de datos en la configuración si es necesario.

Es posible que deba estar en una ubicación personalizada si se usa almacenamiento en red para la carpeta multimedia.

database:
path: /path/to/securevu.db

model​

Si usas un modelo personalizado, será necesario especificar el ancho y la altura.

Los modelos personalizados también pueden requerir diferentes formatos de tensor de entrada. La conversión del espacio de color admite fotogramas RGB, BGR o YUV para enviar al detector de objetos. El parámetro de forma del tensor de entrada es una enumeración que coincide con lo especificado por el modelo.

Dimensión del tensorDescripción
NTamaño del lote
HAltura del modelo
WAncho del modelo
CCanales de color
Formas de tensor de entrada disponibles
"nhwc"
"nchw"
# Optional: model config
model:
path: /path/to/model
width: 320
height: 320
input_tensor: "nhwc"
input_pixel_format: "bgr"

labelmap​

aviso

Si se personaliza el mapa de etiquetas, también será necesario ajustar las etiquetas utilizadas para las alertas. Consulta etiquetas de alerta para más información.

El mapa de etiquetas se puede personalizar según tus necesidades. Una razón habitual es combinar varios tipos de objetos que se confunden fácilmente cuando no se necesita tanta granularidad, como coche/camión. Por defecto, truck se renombra a car porque se confunden con frecuencia. No se pueden agregar nuevos tipos de objetos, pero se pueden cambiar los nombres de los objetos existentes en el modelo.

model:
labelmap:
2: vehicle
3: vehicle
5: vehicle
7: vehicle
15: animal
16: animal
17: animal

Ten en cuenta que si renombras objetos en el mapa de etiquetas, también deberás actualizar tu lista objects -> track.

aviso

Algunas etiquetas tienen un manejo especial y las modificaciones pueden deshabilitar funcionalidades.

Los objetos person están asociados con face y amazon.

Los objetos car están asociados con license_plate, ups, fedex, amazon.

Configuración de red​

Los cambios en la configuración de red interna de SecureVu se pueden realizar montando nginx.conf en el contenedor. Por ejemplo:

services:
securevu:
container_name: securevu
...
volumes:
...
- /path/to/your/nginx.conf:/usr/local/nginx/conf/nginx.conf

Habilitar IPv6​

IPv6 está deshabilitado por defecto; para habilitarlo, es necesario montar listen.gotmpl con IPv6 habilitado. Por ejemplo:

{{ if not .enabled }}
# intended for external traffic, protected by auth
listen 8971;
{{ else }}
# intended for external traffic, protected by auth
listen 8971 ssl;

# intended for internal traffic, not protected by auth
listen 5000;

se convierte en

{{ if not .enabled }}
# intended for external traffic, protected by auth
listen [::]:8971 ipv6only=off;
{{ else }}
# intended for external traffic, protected by auth
listen [::]:8971 ipv6only=off ssl;

# intended for internal traffic, not protected by auth
listen [::]:5000 ipv6only=off;

Ruta base​

Por defecto, SecureVu se ejecuta en la ruta raíz (/). Sin embargo, algunas configuraciones requieren ejecutar SecureVu bajo un prefijo de ruta personalizado (p. ej., /securevu), especialmente cuando SecureVu se encuentra detrás de un proxy inverso que requiere enrutamiento basado en rutas.

Establecer la ruta base mediante cabecera HTTP​

La forma preferida de configurar la ruta base es mediante la cabecera HTTP X-Ingress-Path, que debe establecerse con la ruta base deseada en un proxy inverso ascendente.

Por ejemplo, en Nginx:

location /securevu {
proxy_set_header X-Ingress-Path /securevu;
proxy_pass http://securevu_backend;
}

Establecer la ruta base mediante variable de entorno​

Cuando no es posible establecer la ruta base mediante una cabecera HTTP, también se puede establecer mediante la variable de entorno SECUREVU_BASE_PATH en el archivo Docker Compose.

Por ejemplo:

services:
securevu:
image: SecureCorp-Mexico/SecureVu2:latest
environment:
- SECUREVU_BASE_PATH=/securevu

Esto puede usarse, por ejemplo, para acceder a SecureVu a través de un agente de Tailscale (https), simplemente redirigiendo todas las solicitudes a la ruta base (http):

tailscale serve --https=443 --bg --set-path /securevu http://localhost:5000/securevu

Dependencias personalizadas​

Compilación personalizada de ffmpeg​

SecureVu incluye una compilación de ffmpeg que funciona para la gran mayoría de usuarios. Sin embargo, existen algunas configuraciones de hardware que tienen incompatibilidades con la compilación incluida. En ese caso, se pueden colocar binarios estáticos de ffmpeg y ffprobe en /config/custom-ffmpeg/bin para que SecureVu los utilice.

Para hacer esto:

  1. Descarga tu compilación de ffmpeg y descomprímela en la carpeta /config/custom-ffmpeg. Verifica que tanto los binarios ffmpeg como ffprobe estén ubicados en /config/custom-ffmpeg/bin.
  2. Actualiza ffmpeg.path en tu configuración de SecureVu a /config/custom-ffmpeg.
  3. Reinicia SecureVu y se usará la versión personalizada si los pasos anteriores se realizaron correctamente.

Versión personalizada de go2rtc​

SecureVu incluye actualmente go2rtc v1.9.10; puede haber casos en los que desees ejecutar una versión diferente de go2rtc.

Para hacer esto:

  1. Descarga la compilación de go2rtc a la carpeta /config.
  2. Renombra la compilación a go2rtc.
  3. Otorga permisos de ejecución a go2rtc.
  4. Reinicia SecureVu y se usará la versión personalizada; puedes verificarlo revisando los registros de go2rtc.

Validar las actualizaciones de tu archivo config.yml​

Cuando SecureVu se inicia, verifica si tu archivo de configuración es válido; si no lo es, el proceso se detiene. Para minimizar interrupciones al actualizar tu configuración, tienes tres opciones: puedes editar la configuración desde la interfaz web, que tiene validación integrada; usar la API de configuración; o validar desde la línea de comandos usando el contenedor Docker de SecureVu.

Mediante la API​

SecureVu puede aceptar un nuevo archivo de configuración en formato JSON en el endpoint /api/config/save. Al actualizar la configuración de esta manera, SecureVu validará la configuración antes de guardarla y devolverá un 400 si la configuración no es válida.

curl -X POST http://securevu_host:5000/api/config/save -d @config.json

Si lo deseas, puedes usar tu configuración en YAML directamente utilizando yq para convertirla a JSON:

yq -o=json '.' config.yaml | curl -X POST 'http://securevu_host:5000/api/config/save?save_option=saveonly' --data-binary @-

Mediante la línea de comandos​

También puedes validar tu configuración desde la línea de comandos usando el propio contenedor Docker. En CI/CD, puedes aprovechar el código de retorno para determinar si tu configuración es válida: SecureVu devuelve 1 si la configuración es inválida o 0 si es válida.

docker run                                \
-v $(pwd)/config.yml:/config/config.yml \
--entrypoint python3 \
ghcr.io/securecorp-mexico/securevu2:stable \
-u -m securevu \
--validate-config