Computer Vision con Arduino ?

Ciao ragazzi vorrei utilizzare arduino per creare un robot (molto semplice nei movimenti) dotato di una telecamera e che sia in grado di riconoscere un fiore (rosso) su uno sfondo verde e marrone (erba e terra insomma :slight_smile: ).

Per fare ciò devo ricorrere alla Computer Vision, tecnica della quale era all'oscuro fino a ieri.
Da come mi pare di aver capito ciò che voglio fare alla fine (forse) è anche abbastanza "semplice" perchè si tratta di riconoscere una qualsiasi forma con un colore molto diverso.

Ho aperto questo topic perchè non so assolutamente se si può fare questa cosa con arduino perciò vorrei delle dritte e dei consigli.

Il problema fondamentale è che il robot si troverà in una campagna dove perciò non vi è connessione internet.

Quindi vi chiedo:

  1. come dovrei muovermi ?
  2. Arduino è in grado di gestire qualche software di computer vision ?
  3. se ciò è possibile sapete dirmi se in grado di analizzare solo fotografie o anche in "real-time" mentre viene ripreso il fiore con una telecamera (col robot in movimento) ?
  4. difficoltà del progetto?

Me la cavo abbastanza bene con javascript e php perciò se mi consigliate qualcosa programmabile con questi linguaggi ben venga.
L'unico problema è che, come già detto, in campagna non c'è copertura del segnale quindi non saprei come usare queli linguaggi.

Grazie mille

Risposta secca: No! Arduino non ha potenza e capacità necessarie a gestire grafica. Figuriamoci algoritmi di analisi delle immagini. Esiste una scheda denomita Teensy che non ha nulla a che fare con Arduino ma si può programmare con l'IDE di Arduino che ha la capacità di riconiscere forme molto constrastate rispetto allo sfondo.
Credo tu stia sottovalutando di molto la difficoltà del progetto, analisi delle immagini con javascript e PHP e l'impossibilità di usarli senza conenttività fanno trasparire anche la poca dimestichezza con server in esecuzione di php (Es girerebbe anche su un raspberry senza necessità di connettività) ecc.
Da quel che capisco voresti analizzare i fiori in un prato e magari distinguere una margherita da una viola e via dicendo, in più in real-time. Fattibile è fattibile, non è assolutamente semplice e richiede hardware e software in grado di gestire questa cosa molto complessa, la quale richiede anche ottime conscenze di programmazione. Tanto per farti un idea cerca OpenCV e inizia a farti un idea della complessità della cosa e verificare se tra i progetti disponibili in rete c'è qualcosa che si avvicina alle tue esigenze.
Magari Arduino lo puoi usare come piattaforma per gestire i motori del robot e nulla più

hmm in effetti temevo che arduino non fosse in grado di gestire una cosa del genere...
Tu ti sei mai cimentato in qualcosa del genere ?

Su arduino sono un neofita, mentre nella Visione Artificiale ho qualche rudimento univeritario in più ma non conosto gli algortmi di apprendimento. Il discorso di connessione non ti serve a molto l'algoritmo lo integri nella scheda arduino. In rete ci sono numerosi algortmi, nel caso tuo: vuoi che il robot giri nei campi e ti trovi un fiore specifico? Ti dico che se non hai conoscenze di programmazione è difficile (PHP in questo caso non ti serve a molto la conoscenza di javascript già qualcosa in più) è possibile farlo anche in real-time (io feci qualcosa di simile sul riconoscimento dei cartelli stradali ma su foto), ma è estremamente complesso perchè un fiore non ha una geometria univoca e cambia anche a seconda dell'angolazione. Spero che qualcuno ti possa aiutare maggiormente ma dal punto di vista della programmazione non è facile.

Se si tratta di distinguere un punto rosso da uno sfondo di colore diverso puoi provare con una pixy

Se ti serve invece distinguere fiori diversi allora non puoi usarla

Rodrigoson6:
Tu ti sei mai cimentato in qualcosa del genere ?

Assolutamente no! :slight_smile:

Beh in realtà devo riconoscere solo il fiore rosso e distinguerlo dal resto dell'inquadratura che sarà verde per la presenza di erba o marrone per la presenza della terra.
Non ci sono altri fiori.

Si tratta di stinguere un colore.

@fabpolli sai dirmi qualcosa di più sulla scheda Teensy ?

Rodrigoson6:
@fabpolli sai dirmi qualcosa di più sulla scheda Teensy ?

No ma nel tuo caso credo vada meglio la scheda suggerita da @doppiozero anche se non so se è in grado di riconiscere una forma non geometrica

doppiozero:
Se si tratta di distinguere un punto rosso da uno sfondo di colore diverso puoi provare con una pixy

Se ti serve invece distinguere fiori diversi allora non puoi usarla

Wow ma è fenomenale !
Credo che sia l'ideale anche perchè collegabile ad arduino!

Voi che dite?

Rodrigoson6:
Voi che dite?

Che penso faccia la caso tuo. Un vecchio utente, non più presente, aveva anche fatto un piccolo filmato ... QUI

Credo fosse con la vecchia Pixy, ora c'è la nuova versione che è ancora più performante.

Guglielmo

Beh la Pixy è molto carina, se ti basta quello ok, altrimenti direi che con Arduino la cosa è... ardua. :slight_smile:

Altrimenti io passerei ad un bel Raspberry PI3, su cui usare la libreria OpenCV (Computer Vision) con la quale puoi fare tantissime cose, dal riconoscimento di colori e forme, anche al riconoscimento facciale, è utilizzata moltissimo.

gpb01:
Un vecchio utente, non più presente, aveva anche fatto un piccolo filmato ...

Eh, già, Astro... :sob: :roll_eyes: :-X

Beh al 99.99% comprero la Pixy2 e vi dirò come andrà...

Probabilmente aprirò altri topic su questo progetto "robot riconosce fiore" ;D ;D :cold_sweat:

docdoc:
Beh la Pixy è molto carina, se ti basta quello ok, altrimenti direi che con Arduino la cosa è... ardua. :slight_smile:

Altrimenti io passerei ad un bel Raspberry PI3, su cui usare la libreria OpenCV (Computer Vision) con la quale puoi fare tantissime cose, dal riconoscimento di colori e forme, anche al riconoscimento facciale, è utilizzata moltissimo.

Concordo pienamente ma l'impressione da neofita del raspberry pi è che il mondo raspberry pi sia molto meno fornito di supporto al motion per cui se vuoi fare un applicazione spinta sia di motion che di computer vision sarebbe forse meglio (anche se più costoso) mettere insieme il raspberry pi per la computer vision e arduino per il motion poi farli dialogare tra loro. Che ne pensate? Personalmente ho appena messo in pied un robottino a tre ruote (due motrici) con raspberri pi ma ho un driver dei due dc motors che non gestisce la retroazione (closed loop) per cui controllando le due ruote con due motori indipendenti in controllo aperto è difficile anche solo fare andare dritto il robot soprattutto in partenza

>astella: essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione il su citato REGOLAMENTO ...

Grazie.

Guglielmo

@astella
Si può fare certamente, il raspy manda dei comandi e l'Arduino esegue. Mai fatto con il raspy ma con una Teensy per controllare un motore passo passo e il relativo zero, mentre la Teensy riceve elabora e registra dei dati.

Tieno d'occhio anche la ESP32-cam, risorse nettamente minori ma costo inferiore ai 10 euro.