giovedì 5 dicembre 2019

Come ti moralizzo il gatto (pt.1)

Io vivo in una casa con un piccolo giardino che negli ultimi periodi viene utilizzato da diversi gatti del circondario come toilette, obbligandomi, a intervalli regolari, a seppellire le varie deiezioni.
Ad un certo momento ho pensato, sono informatico, la tecnologia c'è, google pure e allora perché non pensare a qualche sistema non invasivo o pericoloso per scoraggiare i felini a non utilizzare abusivamente il mio giardino per i loro comodi?

Ed è così che nasce l'idea di moralizzare i gatti (avete presente Filippo Roma delle Iene?) per farli desistere dall'accedere alla mia proprietà. Ovviamente non volevo stare 24/7 a controllare che qualche gatto entrasse, ma volevo che un macchina lo facesse per me.

Quindi un giorno (ormai un anno fa) ho messo insieme un po' di tecnologie per creare quello che a tutt'oggi è un sistema abbastanza affidabile di riconoscimento degli oggetti.
Questo sistema si poteva fare anche usando meno tecnologie, ma volevo sperimentare e quindi ho abbondato :-)

Nella cassetta degli attrezzi ho messo:
Dopo vari tentativi di compilazione di OpenCV su Raspberry ho desistito in favore di una immagine docker (presa a caso dal web, ad esempio https://hub.docker.com/r/jjanzic/docker-python3-opencv).
Con questa funzionante ho scritto(o meglio ho copiato con stile) qualche riga di python proprio base che prendesse lo stream da una telecamera che avevo già installato e lo passasse a OpenCV per l'analisi. 
Come modello ho utilizzato YoloV3 che ormai è lo standard per questo genere di attività e dopo svariati tentativi ecco il risultato


Ed ecco che un inutile lunedì di ottobre si trasforma in una delle giornate informatiche più belle in assoluto. Il sistema funziona ed è stato domato :-)

I passaggi successivi sono stati abbastanza semplici perchè lo script in python mi scrive anche che oggetti ha trovato e li manda su un topic MQTT dove sta in ascolto un semplice demone fatto con DotNetCore che, sempre con un messaggio MQTT, avvia l'irrigazione e lo notifica su un bot telegram



Semplice funzionale e non distruttivo (soprattutto per i gatti :-) )

Un'altra cosa molto interessante è che con l'editor messo a disposizione da Yolo posso contribuire all'istruzione dell' AI specificando le immagini e insegnandogli che oggetti ci sono.

Ovviamente non manca di prendere delle cantonate bestiali, nel riquadro blu mi segna un ombrello :-)



Punti dolenti, essendo su un raspberry con docker la velocità lascia un po' a desiderare (per una immagine impiega circa 10 secondi) e l'architettura andrebbe un attimo rivista.

Il prossimo passo è la riscrittura della parte Python in DotnetCore e vediamo se è più veloce...stay tuned :-)



Nessun commento:

Posta un commento