Pet-Monitor/scripts/fetch_models.sh
abraham 937bbd91ac Anadir deteccion de ladridos con el audio de la camara (Fase A)
- pet_audio.py: escucha del audio RTSP en un hilo propio con PyAV, remuestreo de 8 kHz a 16 kHz y YAMNet en ONNX sobre ventanas de 0.975 s con medio solape. Dispara por la clase Bark (mejor margen perro/gato que el grupo canino), con anti-repeticion y reconexion automatica.

- pet_common.py: utilidades compartidas de .env, construccion de la URL RTSP y enmascarado de credenciales, porque PyAV incluye la contrasena en el texto de sus excepciones.

- pet_speed.py: arranca la escucha de audio y la refleja en la linea de estadisticas.

- scripts/fetch_models.sh: descarga y verifica por SHA-256 el modelo YAMNet ONNX (16 MB).

- models/yamnet.onnx: el fichero versionado no era un modelo, sino una pagina HTML de GitHub. Se saca de git y pasa a descargarse con el script.

- Readme.md: seccion de audio, estado de la Fase A y ajuste de umbral.
2026-10-01 18:26:55 +02:00

39 lines
1.4 KiB
Bash
Executable file

#!/usr/bin/env bash
#
# Descarga el modelo YAMNet en ONNX que necesita la detección de ladridos.
#
# El binario (16 MB) no se versiona en git: se descarga aquí y se verifica su
# SHA-256. YAMNet es Apache-2.0 (TF Hub de Google); esta es una conversión a
# ONNX ya validada con audio real:
# - entrada `waveform` de rango 1, (15600,) float32 -> 0.975 s a 16 kHz
# - salidas: 521 clases de AudioSet + 1024 embeddings + 64 espectrograma
# - los índices cuadran con models/yamnet_classes.csv (Bark = 70)
#
# Uso: bash scripts/fetch_models.sh
set -euo pipefail
URL="https://huggingface.co/zeropointnine/yamnet-onnx/resolve/main/yamnet.onnx"
SHA256="1510041dce24a2e9e84ec546807ac408ae496da6d1ed41bc3ccba649623f8e19"
RAIZ="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
DESTINO="$RAIZ/models/yamnet.onnx"
if [[ -f "$DESTINO" ]] && echo "$SHA256 $DESTINO" | sha256sum -c --status 2>/dev/null; then
echo "Ya está descargado y verificado: $DESTINO"
exit 0
fi
echo "Descargando YAMNet ONNX (16 MB)..."
curl -fL --progress-bar -o "$DESTINO.tmp" "$URL"
echo "Verificando SHA-256..."
if ! echo "$SHA256 $DESTINO.tmp" | sha256sum -c --status; then
rm -f "$DESTINO.tmp"
echo "ERROR: el fichero descargado no coincide con el SHA-256 esperado." >&2
echo "Puede ser un fallo de red o que el fichero remoto haya cambiado." >&2
exit 1
fi
mv "$DESTINO.tmp" "$DESTINO"
echo "Listo: $DESTINO ($(du -h "$DESTINO" | cut -f1))"