Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Reconnaissance des chiffres AI avec PiCamera

Reconnaître les chiffres avec Raspberry Pi, Pi Caméra, OpenCV et TensorFlow.

Histoire

Dans ce projet, nous allons entraîner un réseau de neurones à convolution profonde pour transcrire des chiffres. Ensuite, nous allons utiliser les données de la phase d'apprentissage pour permettre à la caméra Pi de lire et de reconnaître les chiffres. Le pipeline d'IA sera implémenté à l'aide de Scikit et OpenCV 3.3 pour la manipulation d'images et Keras qui utilise Tensorflow comme back-end pour la partie d'apprentissage en profondeur.


Pour que cela reste facile, aucune étape de localisation des fonctionnalités n'est effectuée. Vous devrez pousser l'image devant l'objectif de la caméra pour que ce soit la seule caractéristique qu'elle voit.

L'ensemble de données MNIST sera utilisé. Il est composé de 60 000 exemples de formation et de 10 000 exemples de test des chiffres manuscrits 0-9 formatés en images monochromes 28 × 28 pixels. Fondamentalement, nous transformons toutes les images acquises de la caméra en images qui ressemblent à ceci :

La topologie du réseau principal peut être décrite par cette image ci-dessous :

La dernière couche est une couche entièrement connectée qui correspond à 10 catégories représentant les 10 chiffres.

Nous allons faire deux choses. D'abord, nous formons un réseau pour reconnaître les chiffres. Ensuite, nous avons utilisé les poids du réseau que nous avons entraînés pour reconnaître les chiffres de flux de caméra en direct pris à partir de la caméra Raspberry Pi.

J'ai utilisé une troisième main pour tenir la caméra Raspberry Pi puisque c'était tout ce que j'avais. La configuration mécanique peut être décrite par cette image ci-dessous :

Avant de commencer tout cela, installons d'abord tout ce dont nous avons besoin. J'ai utilisé des environnements virtuels Python pour configurer le programme. Donc, en supposant que vous ayez tous les programmes répertoriés ci-dessous, vous pouvez émettre :

source ~/.profile workon cvpython PiCameraApp.py --picamera 1

Allons donc dans les détails. Commençons par installer un tas de programmes.

Installer Tensorflow

pip install tensorflow

Installer Keras

pip install keras 

Installez Open-CV 3.3

L'installation d'OpenCV est un peu compliquée si vous avez besoin de toutes les optimisations. Cela signifie que nous devons le compiler à partir de zéro car celui du gestionnaire de paquets pip n'a pas toutes les optimisations.

Le meilleur tutoriel que j'ai trouvé provient de ce lien :

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

Enfin installer la picamera avec les optimisations Numpy.

pip install "picamera[array]" 

Maintenant, après avoir installé toute la pile logicielle sur le RPI, nous devons faire une formation. Le réseau doit être formé sur un ordinateur portable de préférence avec un GPU, à moins que vous ne soyez un héros à l'aise avec les performances lentes d'un glacier et que vous décidiez de le faire sur un RPI.

Former le réseau

Pour entraîner le réseau, exécutez le fichier python sur un ordinateur portable en lançant :

python Train_MNIST.py

Cela suppose que vous avez Cuda (si vous utilisez la version gpu), Tensorflow, Keras et matplotlib installés sur votre ordinateur portable.

Le programme sur ce fichier utilise Keras pour définir un modèle de réseau neuronal profond, le compiler et après les phases de formation et de validation, il enregistre les poids du réseau.

À la fin, le programme enregistre les poids du réseau sous forme de fichier.h5. C'est le fichier avec les poids du réseau que nous allons charger sur le script de reconnaissance exécuté sur le RPI pour reconnaître les images numériques en direct.

Copiez le fichier de poids sur votre RPI en utilisant scp ou WinSCP.

Si vous possédez un GPU NVIDIA, la formation prendra quelques minutes en fonction de la capacité de calcul de votre carte. Cependant, pour tirer parti du GPU, vous devrez installer la version GPU de Tensorflow ainsi que l'exécutable CUDA à partir du site Web de NVIDIA. Sinon, cela peut prendre un peu plus de temps si vous n'utilisez que le processeur.

Reconnaître les images en direct de chiffres

J'ai fini par tester à la fois les chiffres manuscrits et les chiffres imprimés. La précision de la prédiction dépend principalement de l'éclairage et de l'angle de l'image et à quel point votre écriture est ambiguë (lisez merdique). Après avoir lancé l'application, appuyez sur t pour lire les chiffres et q d'arrêter.

Reconnaître le chiffre 4. J'ai dû utiliser beaucoup d'encre pour dessiner ce 4.

Parfois, le réseau imprime des probabilités infiniment faibles pour les autres nombres. Il y a donc 0,0001 % de chance que ce soit un sept.

Outils du métier.

Explication du programme

Le programme prend un instantané de la caméra en appuyant sur la touche « t » et applique un certain nombre d'étapes de transformation à l'image avant de la transmettre au DNN.

La première chose qu'il faut garder à l'esprit est que les images en couleur sont acquises sous la forme d'un grand tableau de nombres à virgule flottante Tout d'abord, l'image est convertie d'un format RVB en une image en niveaux de gris, nous sommes donc effectivement jeter deux canaux.

L'étape suivante consiste à convertir le format à virgule flottante de l'image en un nombre 8 bits avec une plage de 0 à 255.

Ensuite, nous utilisons OpenCV pour effectuer le seuillage. La méthode Otsu est utilisée pour seuiller automatiquement l'image afin que les caractéristiques du nombre soient évidentes. L'étape suivante consiste à redimensionner l'image à un format de 28×28 pixels. Il s'agit du même format accepté par le MNIST DNN.

On peut utiliser soit scikit image, open-cv ou Keras pour effectuer la redimensionnement.

Une fois l'image redimensionnée, l'étape suivante consiste à inverser les couleurs, car le MNIST s'attend à ce que les nombres soient sur fond noir plutôt que sur des lignes noires sur fond blanc.

Après post-traitement, l'image est envoyée au DNN qui fait une prédiction du chiffre observé.

Le tableau de sortie représente les probabilités que l'image observée soit ce nombre. Ainsi, un 1 en position 2 indique une certitude à 100 % puisque c'est un 1. Gardez à l'esprit que la position 1 est réservée à 0.

Étapes de l'algorithme

1. Lisez l'image

La première étape consiste évidemment à mettre une image devant la caméra. Cela sera mis à l'échelle plus tard puisque le CNN (réseau de neurones convolutifs) attend des images d'une certaine taille.

2.Convertir en niveaux de gris

L'image acquise est ensuite convertie en niveaux de gris en utilisant l'appel de fonction scipy. Par coïncidence, vous ne pouvez utiliser opencv que pour les manipulations d'images, mais vous devez vous souvenir de tous les noms de fonctions. Autre point également, il existe des différences très subtiles entre scipy et open-cv en ce qui concerne certaines fonctions.

3. Mettre à l'échelle la plage d'images

Ici l'image est convertie d'un format à virgule flottante vers une plage uint8 [0, 255]

4. Seuils

Pour obtenir une belle image en noir et blanc, le seuillage se fait via la méthode Otsu. C'est l'étape de la sauce magique puisque faire un seuillage manuellement vous obligera à entrer les valeurs une par une.

5. Redimensionner l'image

L'image est redimensionnée en un tableau de 28 x 28 pixels. Ceci est ensuite aplati en un tableau linéaire de taille (28×28)

6. Inverser l'image

MNIST DNN accepte les images au format 28×28 pixels, dessinées en blanc sur fond noir. Il faut donc inverser l'image.

7. Alimentez le réseau de neurones entraîné

C'est la dernière étape. Ici, nous chargeons les poids du réseau de neurones profonds et transmettons l'image au réseau. Il faut 2-3 secondes pour arriver à une prédiction.

8. Imprimer la réponse

Enfin, nous nous retrouvons avec un tableau de sortie avec 10 classes montrant tous les chiffres de 0-9. La position du tableau représente la probabilité que l'inférence soit faite par le réseau. Traduire cela en langage humain signifie choisir la position avec la plus grande probabilité.

La configuration principale ressemble à un dispositif médical.

Fin !

C'est tout. Cela a montré comment implémenter un réseau de neurones capable de reconnaître les chiffres.

Code téléchargé sur GitHub comme toujours.

Source :  Reconnaissance des chiffres AI avec PiCamera


Processus de fabrication

  1. Accéder :commutateur gigabit 12 ports avec 4 ports SFP
  2. AAEON collabore avec Intel pour fournir des solutions réseau puissantes
  3. Lanner pour mettre à niveau les appliances réseau avec Intel Xeon de 2e génération
  4. Lire la température avec DS18B20 | Raspberry Pi 2
  5. Mesure de la température avec RASPBERRY PI
  6. Contrôle de la température avec Raspberry Pi
  7. Posture Pal avec Walabot
  8. Premiers pas avec TJBot
  9. Construire un segway avec Raspberry Pi