Sommario:

Fotocamera AI per Raspberry Pi/Arduino: 7 passaggi
Fotocamera AI per Raspberry Pi/Arduino: 7 passaggi

Video: Fotocamera AI per Raspberry Pi/Arduino: 7 passaggi

Video: Fotocamera AI per Raspberry Pi/Arduino: 7 passaggi
Video: Sistema di intelligenza artificiale su Raspberry Pi con riconoscimento oggetti con TensorFlow Lite 2024, Novembre
Anonim
Image
Image

Se hai seguito le notizie di recente, c'è stata un'esplosione di start-up che sviluppano chip per accelerare l'inferenza e l'addestramento degli algoritmi ML (apprendimento automatico). Tuttavia, la maggior parte di questi chip è ancora in fase di sviluppo e non è proprio qualcosa su cui il tuo produttore medio può mettere le mani. L'unica eccezione significativa finora è stata Intel Movidius Neural Compute Stick, che è disponibile per l'acquisto e viene fornita con un buon SDK. Presenta alcuni svantaggi significativi, ovvero il prezzo (circa 100 USD) e il fatto che sia disponibile in formato chiavetta USB. È fantastico se vuoi usarlo con laptop o Raspberry PI, ma cosa succede se vuoi fare alcuni progetti di riconoscimento delle immagini con Arduino? O Raspberry Pi Zero?

Passaggio 1: Sipeed MAix: AI at the Edge

Sipeed MAix: AI al limite
Sipeed MAix: AI al limite

Non molto tempo fa ho messo le mani sulla scheda di sviluppo Sipeed M1w K210, che ha una CPU RISC-V a 64 bit dual-core e vanta una KPU (Neural Network Processor) integrata, specificamente progettata per accelerare la CNN per l'elaborazione delle immagini. Puoi leggere maggiori dettagli qui.

Il prezzo di questa scheda mi ha francamente scioccato, sono solo 19 USD per una scheda di sviluppo AI-on-the-edge completa con supporto Wi-Fi! C'è però un avvertimento (ovviamente c'è): il firmware micropython per la scheda è ancora in fase di sviluppo e nel complesso non è troppo facile da usare per ora. L'unico modo per accedere a tutte le sue funzioni in questo momento è scrivere il tuo codice C incorporato o modificare alcune demo esistenti.

Questo tutorial spiega come utilizzare il modello di rilevamento della classe Mobilenet 20 per rilevare gli oggetti e inviare il codice dell'oggetto rilevato tramite UART, da dove può essere ricevuto da Arduino/Raspberry Pi.

Ora, questo tutorial presuppone che tu abbia familiarità con Linux e le basi della compilazione del codice C. Se sentire questa frase ti ha fatto venire un po' le vertigini:) allora vai al passaggio 4, dove carichi il mio binario pre-costruito su Sipeed M1 e salti la compilazione.

Passaggio 2: prepara il tuo ambiente

Prepara il tuo ambiente
Prepara il tuo ambiente

Ho usato Ubuntu 16.04 per la compilazione e il caricamento del codice C. È possibile farlo in Windows, ma io stesso non l'ho provato.

Scarica la Toolchain del compilatore GNU RISC-V, installa tutte le dipendenze necessarie.

git clone --recursive

sudo apt-get install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev

Copia la toolchain scaricata nella directory /opt. Dopodiché esegui i seguenti comandi

./configure --prefix=/opt/kendryte-toolchain --with-cmodel=medany

fare

Aggiungi ora /opt/kendryte-toolchain/bin al tuo PATH.

Ora sei pronto per compilare il codice!

Passaggio 3: compila il codice

Compila il codice
Compila il codice

Scarica il codice dal mio repository github.

Scarica Kendryte K210 SDK standalone

Copia la cartella /kpu dal mio repository github alla cartella /src in SDK.

Esegui i seguenti comandi nella cartella SDK (non nella cartella /src!)

mkdir build && build cd

cmake.. -DPROJ=nome_progetto -DTOOLCHAIN=/opt/kendryte-toolchain/bin && make

dove project_name è il nome del tuo progetto (dipende da te) e -DTOOLCHAIN= dovrebbe puntare alla posizione della tua toolchain risc-v (l'hai scaricato nel primo passaggio, ricordi?)

Grande! Ora si spera che vedrai la compilazione terminata senza errori e che tu abbia un file.bin che puoi caricare.

Passaggio 4: caricamento del file.bin

Caricamento del file.bin
Caricamento del file.bin

Ora collega il tuo Sipeed M1 al computer e dalla cartella /build esegui il seguente comando

sudo python3 isp_auto.py -d /dev/ttyUSB0 -b 200000 kpu.bin

Dove kpu.bin è il nome del tuo file.bin

Il caricamento richiede solitamente 2-3 minuti, al termine vedrai la scheda eseguire il rilevamento di 20 classi. L'ultimo passo per noi è collegarlo ad Arduino mega o Raspberry Pi.

!!! Se sei appena tornato dal passaggio 2 !

Esegui il seguente comando dalla cartella in cui hai clonato il mio repository github

sudo python3 isp_auto.py -d /dev/ttyUSB0 -b 200000 kpu_bin.bin

Il caricamento richiede solitamente 2-3 minuti, al termine vedrai la scheda eseguire il rilevamento di 20 classi. L'ultimo passo per noi è collegarlo ad Arduino mega o Raspberry Pi.

Passaggio 5: connessione ad Arduino

Connessione ad Arduino
Connessione ad Arduino
Connessione ad Arduino
Connessione ad Arduino
Connessione ad Arduino
Connessione ad Arduino

Ho usato Arduino Mega con Seeed Studio Mega Shield, ecco perché ho saldato un connettore Grove alla scheda Sipeed M1. Tuttavia puoi semplicemente usare i cavi dei ponticelli e collegare Sipeed M1 direttamente ad Arduino Mega, seguendo questo schema elettrico.

Dopodiché carica lo sketch camera.ino e apri il monitor seriale. Quando punti la fotocamera su oggetti diversi (l'elenco delle 20 classi è nello schizzo) dovrebbe visualizzare il nome della classe nel monitor seriale!

Congratulazioni! Ora hai un modulo di rilevamento delle immagini funzionante per il tuo Arduino!

Passaggio 6: connessione a Raspberry Pi

Connessione a Raspberry Pi
Connessione a Raspberry Pi
Connessione a Raspberry Pi
Connessione a Raspberry Pi

Ho usato il cappello Grove Pi+ per Raspberry Pi 2B, ma ancora una volta, come con Arduino, puoi semplicemente collegare direttamente Sipeed M1 all'interfaccia UART di Raspberry Pi seguendo questo schema elettrico.

Dopodiché avvia camera_speak.py e punta la fotocamera su oggetti diversi, il terminale emetterà il seguente testo "Penso che sia" e anche se hai degli altoparlanti collegati, pronuncerà questa frase ad alta voce. Abbastanza bello, non è vero?

Passaggio 7: conclusione

Stiamo vivendo tempi molto eccitanti, con l'intelligenza artificiale e l'apprendimento automatico che penetrano in tutte le aree della nostra vita. Non vedo l'ora per lo sviluppo in questo settore. Mi tengo in contatto con il team di Sipeed e so che stanno sviluppando attivamente wrapper micropython per tutte le funzioni necessarie, inclusa l'accelerazione della CNN.

Quando sarà pronto, molto probabilmente pubblicherò più istruzioni su come utilizzare i tuoi modelli CNN con micropython. Pensa a tutte le entusiasmanti applicazioni che puoi avere per una scheda in grado di eseguire le tue reti neurali di elaborazione delle immagini a questo prezzo e con questa impronta!

Consigliato: