Questo è davvero uno switch molto smart!

4 min

Avete mai provato a chiedere ad Alexa di accendere le luci del salotto circondato da uno sciame di bambini urlanti? Difficile eh? Al contrario, a tarda serata, chiedereste ad Alexa di spegnere la luce del bagno che sistematicamente viene dimenticata accesa, correndo il rischio di svegliare i bambini? Proprio così: devi alzarti dal divano.

In queste e tante altri situazioni lo smart switch più adatto e sostenibile di sempre è un bel pezzo di cartone! Non ci credi? Te lo dimostro.

Il trucco non c’è

Qualche giorno fa mi sono chiesto come avrei potuto utilizzare le telecamere di sicurezza installate dentro e fuori la mia abitazione per renderla più smart.

Beh! Un sostituto silenzioso di Alexa farebbe comodo, mi sono detto.

Ho cercato quindi di trovare il modo di utilizzare le immagini delle telecamere per generare eventi, come l’accensione o lo spegnimento di una lampadina. L’idea che mi è venuta è questa: identificare un oggetto ben riconoscibile e leggere il testo posto al di sopra di esso, un cartello insomma! Un cartello che si possa utilizzare per dare comandi ai nostri dispositivi IoT.

Object detection

Ho utilizzato un Raspberry PI4 per analizzare il flusso video della mia telecamera e riconoscere gli oggetti grazie a CV2, il suo module DDN (Deep Neural Network) e il modello MobileNetSSD V2 Coco.

Andando a spulciare tra le classi di oggetti riconosciuti dal modello mi è subito saltato all’occhio un bel “bus”. Perfetto! Un oggetto facilmente riconoscibile e difficilmente presente nel mio salotto, giusto per non incorrere in falsi positivi. L’immagine che ho scelto per decorare il mio cartello è stata subito riconosciuta dal modello come bus. Ottimo!

Usando però l’immagine in un contesto diverso il risultato non è stato affatto positivo. La presenza di altri oggetti riconosciuti (persona e divano) e la dimensione ridotta del mio bus rispetto all’intera immagine ne ha pregiudicato il corretto riconoscimento.

Troviamo i contorni

Ci diamo per vinti? Ma nemmeno per idea! Il nostro cartello è un bel rettangolo. Perché non rilevare i rettangoli presenti nell’immagine, estrarne il contenuto e usarlo per l’object detection?

Andando ad analizzare i contorni e cercando quelli che approssimativamente hanno 4 lati, boom! Trovato!

Ora possiamo sottoporre al nostro modello di object detection la sola immagine contenuta nel rettangolo e finalmente lo stesso viene riconosciuto giustamente come bus.

Riconoscimento testi

Mi sono detto: il nostro bus è la “hot image” di attivazione del sistema, un pò come la parola “Alexa” è la “hot word” di attivazione quando pronunciata nelle vicinanze dei dispositivi Echo. A questo punto dobbiamo sottoporre l’immagine ad un sistema di riconoscimento dei testi per identificare il comando e agire poi di conseguenza.

Ho scelto una soluzione cloud, usando Amazon Rekognition. Quando un bus (o un truck o una car) vengono identificati nell’immagine, la stessa viene trasferita in un bucket S3 e sottoposta all’algoritmo di riconoscimento dei testi. Risultati? Ottimi.

Detected text:ALL ON
Confidence: 98.95%
Id: 0
Type:LINE

Finito!

Abbiamo terminato! Ora non ci resta che eseguire i comandi in funzione del testo restituito da Amazon Rekognition. Nel mio caso mi sono limitato ad accendere un paio di Led collegati direttamente al PI4 ma in questo caso il limite è solo la fantasia!

L’intero codice sorgente è qui.

Dietro le quinte

Alcune indicazioni per chi vuole cimentarsi nella realizzazione dello stesso progetto: la risoluzione e la posizione delle telecamera sono molto importanti ed è richiesto un pò di tuning per ottenere dei buoni risultati. Usando un Raspberry PI4 è meglio non esagerare con la risoluzione dell’immagine: è necessario trovare un compromesso tra una qualità sufficiente al riconoscimento del testo e che non richieda troppe risorse per la sua elaborazione.

Per installare OpenCV su Raspberry ho seguito le indicazioni trovate qui. La classe di cattura del video bufferless è stata presa da questo post. L’algoritmo di riconoscimento dei rettangoli da qui.

Ci siamo divertiti? Alla prossima!

Leave a Comment