Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

AI-cijferherkenning met PiCamera

Cijfers herkennen met Raspberry Pi, Pi Camera, OpenCV en TensorFlow.

Verhaal

In dit project gaan we een diep convolutioneel neuraal netwerk trainen om cijfers te transcriberen. Vervolgens gaan we de gegevens uit de leerfase gebruiken om de Pi-camera cijfers te laten lezen en herkennen. De AI-pijplijn wordt geïmplementeerd met Scikit en OpenCV 3.3 voor beeldmanipulatie en Keras die Tensorflow gebruikt als back-end voor het deep learning-gedeelte.


Om dit eenvoudig te houden, is er geen functielokalisatiefase uitgevoerd. Je moet het beeld voor de cameralens schuiven, zodat het de enige functie is die het ziet.

De MNIST-dataset wordt gebruikt. Het bestaat uit 60.000 trainingsvoorbeelden en 10.000 testvoorbeelden van de handgeschreven cijfers 0-9 geformatteerd als 28×28-pixel monochrome afbeeldingen. In principe transformeren we alle verkregen beelden van de camera in beelden die er als volgt uitzien:

De hoofdnetwerktopologie kan worden beschreven door deze afbeelding hieronder:

De laatste laag is een volledig verbonden laag die is toegewezen aan 10 categorieën die de 10 cijfers vertegenwoordigen.

We gaan twee dingen doen. Eerst trainen we een netwerk voor het herkennen van cijfers. Vervolgens gebruikten we de gewichten van het netwerk dat we hebben getraind voor het herkennen van live camerafeedcijfers die zijn genomen van de Raspberry Pi-camera.

Ik gebruikte een derde hand om de Raspberry Pi Camera vast te houden, want dat was alles wat ik had. De mechanische opstelling kan worden beschreven door deze afbeelding hieronder:

Laten we echter eerst alles installeren wat we nodig hebben. Ik gebruikte virtuele Python-omgevingen om het programma in te stellen. Dus ervan uitgaande dat je alle onderstaande programma's hebt, kun je het volgende uitgeven:

bron ~/.profile werk op cvpython PiCameraApp.py --picamera 1

Dus laten we naar de details gaan. Laten we eerst een aantal programma's installeren.

Installeer Tensorflow

pip install tensorflow

Installeer Keras

pip install keras 

Installeer Open-CV 3.3

De installatie van OpenCV is een beetje ingewikkeld als je alle optimalisaties nodig hebt. Dit betekent dat we het helemaal opnieuw moeten compileren, aangezien die van pip package manager niet alle optimalisaties heeft.

De beste tutorial die ik heb gevonden is via deze link:

https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-python-on-your-raspberry-pi/ 

Installeer ten slotte de picamera met Numpy-optimalisaties.

pip install "picamera[array]" 

Nadat we alle softwarestack op de RPI hebben geïnstalleerd, moeten we wat trainen. Het netwerk moet worden getraind op een laptop, bij voorkeur met een GPU, tenzij je een held bent die vertrouwd is met trage prestaties van een gletsjer en je besluit dat op een RPI te doen.

Het netwerk trainen

Als u het netwerk wilt trainen, voert u het python-bestand op een laptop uit door :

python Train_MNIST.py

Dit gaat ervan uit dat je Cuda (als je de gpu-versie gebruikt), Tensorflow, Keras en matplotlib op je laptop hebt geïnstalleerd.

Het programma in dit bestand gebruikt Keras om een ​​diep neuraal netwerkmodel te definiëren, het te compileren en nadat de trainings- en validatiefasen zijn voltooid, worden de gewichten van het netwerk opgeslagen.

Aan het einde slaat het programma de gewichten van het netwerk op als een.h5-bestand. Dit is het bestand met de netwerkgewichten die we gaan laden in het herkenningsscript dat op de RPI draait om live-digitbeelden te herkennen.

Kopieer het gewichtsbestand naar uw RPI met scp of WinSCP.

Als je een NVIDIA GPU hebt, duurt de training een paar minuten, afhankelijk van de rekencapaciteit van je kaart. Om gebruik te maken van de GPU, moet u echter de GPU-versie van Tensorflow installeren, evenals het uitvoerbare CUDA-bestand van de NVIDIA-website. Anders kan het wat langer duren als u alleen de CPU gebruikt.

Live beelden van cijfers herkennen

Ik heb uiteindelijk zowel handgeschreven cijfers als gedrukte cijfers getest. De nauwkeurigheid van de voorspelling hangt vooral van de belichting en de beeldhoek af en hoe dubbelzinnig (lees waardeloos) je schrijven werkelijk is. Nadat je de app hebt gestart, druk je op t om de cijfers te lezen en q om te stoppen.

Het cijfer 4 herkennen Ik moest veel inkt gebruiken om die 4 te tekenen

Soms print het netwerk oneindig kleine kansen voor de andere getallen. Er is dus een kans van 0,0001 % dat het een zeven is.

Instrumenten van de handel.

Programma Uitleg

Het programma maakt een momentopname van de camera door op de 't'-toets te drukken en past een aantal transformatiestappen toe op de afbeelding voordat deze naar de DNN wordt doorgestuurd.

Het eerste dat u in gedachten moet houden, is dat de kleurenafbeeldingen worden verkregen als een grote reeks drijvende-kommagetallen. Eerst wordt de afbeelding geconverteerd van een RGB-indeling naar een grijsschaalafbeelding, zodat we effectief twee kanalen weggooien.

De volgende stap is het converteren van het drijvende-kommaformaat van de afbeelding naar een 8-bits getal met een bereik van 0-255.

Vervolgens gebruiken we OpenCV om de drempelwaarde uit te voeren. De Otsu-methode wordt gebruikt om de afbeelding automatisch te drempelen, zodat de kenmerken van het nummer duidelijk zijn. De volgende stap is om de afbeelding te verkleinen naar een formaat van 28×28 pixels. Dit is hetzelfde formaat dat wordt geaccepteerd door de MNIST DNN.

Je kunt scikit-afbeelding, open-cv of Keras gebruiken om de schaal opnieuw uit te voeren.

Nadat de afbeelding opnieuw is geschaald, is de volgende stap het omkeren van de kleuren, aangezien de MNIST verwacht dat getallen op een zwarte achtergrond staan ​​in plaats van zwarte lijnen op een witte achtergrond.

Na nabewerking wordt de afbeelding naar de DNN gestuurd die een voorspelling maakt van het waargenomen cijfer.

De uitvoerarray vertegenwoordigt de kansen dat de waargenomen afbeelding dat aantal is. Dus een 1 op positie 2 geeft 100% zekerheid aangezien het een 1 is. Houd er rekening mee dat positie 1 gereserveerd is voor 0.

Algoritmestappen

1. Lees de afbeelding

De eerste stap is om duidelijk een afbeelding voor de camera te plaatsen. Dit zal later worden geschaald omdat het CNN (convolutionele neurale netwerk) afbeeldingen van een bepaalde grootte verwacht.

2.Converteren naar grijsschaal

De verkregen afbeelding wordt vervolgens geconverteerd naar grijswaarden met behulp van de scipy-functieaanroep. Toevallig kun je alleen opencv gebruiken voor de beeldmanipulaties, maar je moet alle functienamen onthouden. Nog een ander punt, er zijn enkele zeer subtiele verschillen tussen scipy en open-cv als het gaat om bepaalde functies.

3. Schaal afbeeldingsbereik

Hier wordt de afbeelding geconverteerd van een drijvende-komma-indeling naar een uint8-bereik [0, 255]

4. Drempel

Om een ​​mooi zwart-wit beeld te krijgen, wordt de drempelwaarde bepaald via de Otsu-methode. Dit is de magische sausstap, aangezien het handmatig invoeren van drempels ervoor zorgt dat men de waarden een voor een invoert.

5. Formaat van afbeelding wijzigen

De afbeelding wordt verkleind tot een array van 28 bij 28 pixels. Dit wordt vervolgens afgevlakt tot een lineaire reeks van grootte (28×28)

6. Afbeelding omkeren

MNIST DNN accepteert afbeeldingen als 28×28 pixels, getekend als wit op een zwarte achtergrond. We moeten de afbeelding dus omkeren.

7. Voer in op getraind neuraal netwerk

Dit is de laatste stap. Hier laden we de diepe neurale netwerkgewichten en voeren de afbeelding naar het netwerk. Het duurt 2-3 seconden om een ​​voorspelling te doen.

8. Antwoord afdrukken

Eindelijk eindigen we met een uitvoerarray met 10 klassen die alle cijfers van 0-9 tonen. De positie van de array geeft de waarschijnlijkheid weer dat de gevolgtrekking door het netwerk wordt gemaakt. Dit vertalen in menselijke taal betekent de positie kiezen met de grootste waarschijnlijkheid.

De hoofdopstelling ziet eruit als een medisch apparaat.

Fin!

Dat is alles. Dit liet zien hoe je een neuraal netwerk implementeert dat cijfers kan herkennen.

Code zoals altijd geüpload op GitHub.

Bron:  AI-cijferherkenning met PiCamera


Productieproces

  1. Toegang tot:12-poorts gigabit-switch met 4 SFP-poorten
  2. AAEON werkt samen met Intel om krachtige netwerkoplossingen te leveren
  3. Lanner om netwerkapparatuur te upgraden met 2e generatie Intel Xeon
  4. Temperatuur aflezen met DS18B20 | Raspberry Pi 2
  5. Temperatuur meten met RASPBERRY PI
  6. Temperatuur bewaken met Raspberry Pi
  7. Posture Pal met Walabot
  8. Aan de slag met TJBot
  9. Een segway bouwen met Raspberry Pi
  10. GoPiGo v2 met Windows IoT
  11. Overstromingen in stedelijke gebieden bestrijden met IoT-netwerkoplossingen