Inhoudsopgave:

AI-camera voor Raspberry Pi/Arduino - Ajarnpa
AI-camera voor Raspberry Pi/Arduino - Ajarnpa

Video: AI-camera voor Raspberry Pi/Arduino - Ajarnpa

Video: AI-camera voor Raspberry Pi/Arduino - Ajarnpa
Video: HOW TO USE the Raspberry Pi camera module 2024, Juni-
Anonim
Image
Image

Als je de laatste tijd het nieuws hebt gevolgd, was er een explosie van start-ups die chips ontwikkelden voor het versnellen van ML-algoritmen (machine learning) inferentie en training. De meeste van die chips zijn echter nog in ontwikkeling en niet echt iets dat de gemiddelde maker in handen kan krijgen. De enige belangrijke uitzondering tot nu toe was Intel Movidius Neural Compute Stick, die te koop is en wordt geleverd met een goede SDK. Het heeft een paar belangrijke nadelen - namelijk de prijs (ongeveer 100 USD) en het feit dat het in USB-stickformaat wordt geleverd. Het is geweldig als je het met een laptop of Raspberry PI wilt gebruiken, maar wat als je wat beeldherkenningsprojecten met Arduino wilt doen? Of Raspberry Pi Zero?

Stap 1: Sipeed MAix: AI aan de rand

Sipeed MAix: AI aan de rand
Sipeed MAix: AI aan de rand

Nog niet zo lang geleden kreeg ik het Sipeed M1w K210-ontwikkelbord in handen, dat een dual-core RISC-V 64-bit CPU heeft en beschikt over een ingebouwde KPU (Neural Network Processor), speciaal ontworpen voor het versnellen van CNN voor beeldverwerking. U kunt hier meer details lezen.

De prijs van dit bord schokte me eerlijk gezegd, het is slechts 19 USD voor een volwaardig AI-on-the-edge ontwikkelbord met Wi-Fi-ondersteuning! Er is echter een waarschuwing (natuurlijk is die er): de micropython-firmware voor het bord is nog in ontwikkeling en over het algemeen is het vanaf nu niet al te gebruiksvriendelijk. De enige manier om op dit moment toegang te krijgen tot al zijn functies, is door uw eigen ingesloten C-code te schrijven of een aantal bestaande demo's aan te passen.

Deze tutorial legt uit hoe je het Mobilenet 20 klasse detectiemodel gebruikt om de objecten te detecteren en de gedetecteerde objectcode via UART te verzenden, vanwaar het kan worden ontvangen door Arduino/Raspberry Pi.

Nu gaat deze tutorial ervan uit dat je bekend bent met Linux en de basisprincipes van het compileren van C-code. Als je een beetje duizelig werd van het horen van deze zin:) ga dan gewoon naar stap 4, waar je mijn vooraf gebouwde binaire bestand uploadt naar Sipeed M1 en het compileren overslaat.

Stap 2: Bereid uw omgeving voor

Bereid uw omgeving voor
Bereid uw omgeving voor

Ik heb Ubuntu 16.04 gebruikt voor het compileren en uploaden van C-code. Het is mogelijk om dat in Windows te doen, maar ik heb het zelf niet geprobeerd.

Download de RISC-V GNU Compiler Toolchain, installeer alle benodigde afhankelijkheden.

git clone --recursive

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

Kopieer de gedownloade toolchain naar /opt directory. Voer daarna de volgende opdrachten uit:

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

maken

Voeg nu /opt/kendryte-toolchain/bin toe aan je PATH.

U bent nu klaar om de code te compileren!

Stap 3: compileer de code

Compileer de code
Compileer de code

Download de code van mijn github-repository.

Kendryte K210 standalone SDK downloaden

Kopieer de /kpu-map van mijn github-repository naar de /src-map in SDK.

Voer de volgende opdrachten uit in de SDK-map (niet in de map /src!)

mkdir build && cd build

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

waarbij project_name de naam is van je project (aan jou) en -DTOOLCHAIN= moet verwijzen naar de locatie van je risc-v toolchain (je hebt het gedownload in de eerste stap, weet je nog?)

Super goed! Hopelijk zie je de compilatie zonder fouten en heb je een.bin-bestand dat je kunt uploaden.

Stap 4: Het.bin-bestand uploaden

Het.bin-bestand uploaden
Het.bin-bestand uploaden

Sluit nu uw Sipeed M1 aan op de computer en voer de volgende opdracht uit vanuit de map /build:

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

Waar kpu.bin de naam is van uw.bin-bestand

Het uploaden duurt meestal 2-3 minuten, nadat het is voltooid, ziet u dat het bord 20 klassendetectie uitvoert. De laatste stap voor ons is om hem aan te sluiten op Arduino mega of Raspberry Pi.

!!! Als je net uit stap 2 komt !

Voer de volgende opdracht uit vanuit de map waarin je mijn github-repository hebt gekloond:

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

Het uploaden duurt meestal 2-3 minuten, nadat het is voltooid, ziet u dat het bord 20 klassendetectie uitvoert. De laatste stap voor ons is om hem aan te sluiten op Arduino mega of Raspberry Pi.

Stap 5: Verbinding maken met Arduino

Verbinding maken met Arduino
Verbinding maken met Arduino
Verbinding maken met Arduino
Verbinding maken met Arduino
Verbinding maken met Arduino
Verbinding maken met Arduino

Ik gebruikte de Arduino Mega met Seeed Studio Mega Shield, daarom heb ik een Grove-connector op het Sipeed M1-bord gesoldeerd. U kunt echter gewoon jumperdraden gebruiken en Sipeed M1 rechtstreeks op Arduino Mega aansluiten, volgens dit bedradingsschema.

Upload daarna de camera.ino-schets en open de seriële monitor. Wanneer u de camera op verschillende objecten richt (de lijst met 20 klassen staat in de schets), moet de naam van de klasse in de seriële monitor worden weergegeven!

Gefeliciteerd! Je hebt nu een werkende beelddetectiemodule voor je Arduino!

Stap 6: Verbinding maken met Raspberry Pi

Verbinding maken met Raspberry Pi
Verbinding maken met Raspberry Pi
Verbinding maken met Raspberry Pi
Verbinding maken met Raspberry Pi

Ik gebruikte de Grove Pi+-hoed voor Raspberry Pi 2B, maar nogmaals, net als bij Arduino kun je Sipeed M1 gewoon rechtstreeks aansluiten op de UART-interface van Raspberry Pi volgens dit bedradingsschema.

Start daarna camera_speak.py en richt de camera op verschillende objecten, de terminal zal de volgende tekst "I think it is" weergeven en ook als je luidsprekers hebt aangesloten, zal hij deze zin hardop uitspreken. Best cool, niet?

Stap 7: Conclusie

Dit zijn zeer spannende tijden waarin we leven, met AI en machine learning die alle gebieden van ons leven doordringen. Ik ben benieuwd naar de ontwikkeling op dit gebied. Ik houd contact met het Sipeed-team en ik weet dat ze actief bezig zijn met het ontwikkelen van micropython-wrappers voor alle noodzakelijke functies, inclusief CNN-versnelling.

Als het klaar is, zal ik zeer waarschijnlijk meer instructables publiceren over het gebruik van je eigen CNN-modellen met micropython. Denk aan alle opwindende toepassingen die je kunt hebben voor een bord dat je eigen neurale netwerken voor beeldverwerking kan draaien voor deze prijs en met deze voetafdruk!

Aanbevolen: