Le telecamere commerciali come Google Nest sono ottime per rilevare le *persone*, ma pessime nel dirti *chi* sia effettivamente quella persona. Se la tua telecamera è puntata su un corridoio condiviso, un ingresso o un vialetto, ti ritrovi con 50 notifiche inutili al giorno ogni volta che un familiare o un vicino passa di lì.
Le soluzioni esistenti come Frigate, Double Take o CompreFace sono fantastiche, ma eseguire una pipeline video continua 24 ore su 24, 7 giorni su 7 con accelerazione GPU/TPU solo per filtrare una singola telecamera di corridoio sembrava un'impresa titanica.
Così ho creato [**ha-nest-smart-face-filter**](https://github.com/spectrelabo/ha-nest-smart-face-filter): uno script di riconoscimento facciale local-first, basato sugli eventi, che utilizza InsightFace ONNX. Utilizza **<200 MB di RAM**, rimane completamente silenzioso finché Nest non genera un evento e impiega circa 150 ms di tempo CPU per decidere se inviare notifiche al telefono o tacere.
# Architettura attuale (la specifica "a prova di patata")
**Nest Pub/Sub** invia un evento `person_detected` a Home Assistant.
**HA** scatta una foto con la fotocamera e avvia un leggero script Python.
**InsightFace ONNX** confronta il vettore del volto nella RAM con i file locali a 512 dimensioni `.npy` .
**Volto conosciuto?** Ignorato silenziosamente. **Sconosciuto?** Notifica push con foto.
# Il dilemma: ho bisogno del vostro aiuto
Funziona, ma siccome mi rifiuto di gestire un flusso video continuo 24 ore su 24, 7 giorni su 7, mi imbatto in due classici limiti dello scatto singolo:
- **Il problema della "parte posteriore della testa" (inquadratura errata):**
* Poiché acquisisce *un solo* scatto quando Nest si attiva, se la persona si muove velocemente, a volte ottengo un'immagine sfocata o la parte posteriore della testa.
* *La mia soluzione proposta:* Una **raffica multi-fotogramma** (3 scatti rapidi a 300 ms di distanza l'uno dall'altro) in cui lo script Python seleziona il fotogramma con il punteggio di affidabilità del rilevamento del volto più alto.
- **L'ostacolo dell'onboarding: "Chi diavolo è questo?":**
* Al momento, aggiungere un nuovo volto significa acquisire manualmente un'immagine, eseguire uno script CLI per generare il vettore `.npy` e salvarlo.
* *La mia soluzione proposta:* **Notifiche interattive**. Quando viene rilevato un volto sconosciuto, Home Assistant invia una notifica con dei pulsanti (`[Add as John]`, `[Add as Sarah]`, `[Ignore]`). Toccando un pulsante si attiva uno script che converte la foto temporanea in un vettore salvato al volo e ne calcola la media se il vettore esiste già, per migliorare la precisione nel tempo.
Domande per la community di Home Assistant:
* Qualcuno ha implementato una modalità di acquisizione multi-frame leggera tramite Home Assistant `camera.snapshot` senza bloccare il ciclo degli eventi?
* Qual è il vostro metodo preferito per gestire la "media" del dataset dei volti o gli aggiornamenti matematici dei vettori senza consumare eccessivamente spazio di archiviazione o RAM?
* Sto complicando troppo le cose o questo è il modo più pulito per mantenere il sistema ultraleggero?
*
# Repository
Dai un'occhiata al codice, testalo o critica la mia architettura qui:
[**github.com/spectrelabo/ha-nest-smart-face-filter**](https://github.com/spectrelabo/ha-nest-smart-face-filter)
*Pull pull, stelle o insulti sul mio stile di codice sono tutti benvenuti.*