Table des matières:
- Étape 1: vidéo
- Étape 2: Matériel
- Étape 3: Morceau de code
- Étape 4: Obtenir des images
- Étape 5: Outils et langage utilisé
- Étape 6: Préparation de l'ensemble de données pour la formation
- Étape 7: Réseau de neurones
- Étape 8: Entraînement du réseau de neurones
- Étape 9: Test du réseau de neurones
- Étape 10: Résultat et partie suivante…
- Étape 11: Détection d'objets
- Étape 12: Vidéo
- Étape 13: Étiquetage
- Étape 14: Étiquetage de l'interface graphique
- Étape 15: Bibliothèques nécessaires
- Étape 16: Cellules restantes
Vidéo: Est-ce une main ? (Caméra Raspberry Pi + Réseau de neurones) Partie 1/2 : 16 étapes (avec photos)
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:09
Il y a quelques jours, je me suis blessé au poignet droit au gymnase. Ensuite, chaque fois que j'utilisais ma souris d'ordinateur, cela causait beaucoup de douleur à cause de l'angle raide du poignet.
C'est à ce moment-là que ça m'a frappé " ne serait-ce pas génial si nous pouvions convertir n'importe quelle surface en un trackpad " et je ne sais pas pourquoi mais pour une raison quelconque j'ai pensé à elle, le film HER, je vous laisse le comprendre les gars dehors. C'était une pensée excitante mais je ne savais pas si je pouvais le faire, j'ai décidé de l'essayer.
Cet article capture ce qui en est ressorti.
Avant de commencer, j'ai un avertissement-
' A la fin de cet article, je ne pouvais convertir aucune surface en trackpad mais je n'apprends pas grand chose et j'ai ajouté de gros outils à mon arsenal. j'espère que ça t'arrive aussi '
Commençons.
Étape 1: vidéo
Voici une petite vidéo de 5 min couvrant toutes les étapes. Regarde.
Étape 2: Matériel
J'ai installé un Raspberry Pi avec une caméra Raspberry Pi à une hauteur d'environ 45 cm. Cela nous donne une zone de surveillance d'environ 25x25 cm sous la caméra.
Raspberry Pi et Raspberry Pi Camera sont facilement disponibles, il suffit de les rechercher sur Google et vous devriez pouvoir trouver un magasin local.
Jetez un œil à ce lien ou à l'une de mes listes de lecture Raspberry pi pour que votre pi sans tête soit opérationnel.
Suite à cette configuration, nous avons besoin d'un morceau de code qui décide s'il y a une main dans la zone que la caméra surveille et si oui où se trouve-t-elle.
Étape 3: Morceau de code
Le morceau de code qui nous permet de décider s'il y a une main dans la zone d'intérêt utilise quelque chose appelé Neural Network. Ils relèvent d'une catégorie de programmation où nous ne définissons pas de règles pour prendre des décisions, mais nous montrons suffisamment de données de réseau neuronal pour qu'il détermine lui-même les règles.
Dans notre cas, au lieu de coder à quoi ressemble la main, nous montrons des images de réseau neuronal capturées à partir de raspberry pi qui contient la main et qui ne contient pas la main. Cette phase est appelée formation du réseau de neurones et les images utilisées sont appelées jeu de données de formation.
Étape 4: Obtenir des images
Je me suis connecté à distance à mon raspberry pi et j'ai capturé un tas d'images à l'aide de la commande suivante.
sudo raspistill -w 640 -h 480 -rot 90 -t 250000 -t1 5000 -o frame%04d.jpg
J'ai capturé 80 images avec la main et 80 images qui ne contiennent pas de main. 160 images ne suffisent pas pour entraîner correctement un réseau de neurones mais devraient suffire pour une preuve de concept.
Outre 160 images, j'ai capturé 20 images supplémentaires pour tester notre réseau une fois qu'il sera formé.
Une fois l'ensemble de données prêt, j'ai commencé à écrire du code pour le réseau de neurones.
Étape 5: Outils et langage utilisé
J'ai écrit mon réseau de neurones dans la bibliothèque d'apprentissage en profondeur python appelée Keras et le code est écrit sur le cahier jupyter à partir du navigateur anaconda.
Étape 6: Préparation de l'ensemble de données pour la formation
Tout d'abord (Image #1), j'ai inclus toutes les bibliothèques nécessaires à ce projet, qui incluent PIL, matplotlib, numpy, os et Keras. Dans la deuxième cellule du bloc-notes python (image n ° 2), je définis les chemins vers l'ensemble de données et j'imprime le nombre d'échantillons. Maintenant, nous devons charger toutes les images dans un tableau numpy, donc dans la troisième cellule (image #2), j'ai créé un tableau numpy de 82 (nombre d'échantillons manuels) + 75 (nombre d'échantillons non manuels), c'est-à-dire 157x100x100x3. 157 est le nombre total d'images que j'ai, 100x100 est notre dimension d'image redimensionnée et 3 est pour les couches de couleur rouge, verte et bleue dans l'image.
Dans les quatrième et cinquième cellules, nous chargeons des images contenant la main suivies d'images qui ne contiennent pas la main dans le tableau numpy. Dans la sixième cellule, nous divisons chaque valeur par 255, limitant ainsi la plage de valeurs de 0 à 1. (Image #3)
Je suis désolé si les images jointes ne sont pas assez bonnes. Voici le lien vers le référentiel GITHUB pour que vous puissiez consulter le code. N'oubliez pas de remplacer les noms de chemin de répertoire par votre chemin:).
Se déplaçant le long.
Ensuite, nous devons étiqueter chaque image, nous créons donc un tableau numpy unidimensionnel de 157 de long. Les 82 premières entrées sont définies sur 1 et les 75 entrées restantes sont définies sur 0, transmettant au réseau de neurones que les 82 premières images proviennent d'une classe et que les autres proviennent d'une autre. (Image n ° 4)
Créons maintenant un réseau de neurones.
Étape 7: Réseau de neurones
Dans la neuvième cellule, nous définissons notre réseau de neurones. Il contient trois répétitions de couche de convolution suivies de couches maxpool avec respectivement 8, 12 et 16 filtres de convolution. Ensuite, nous avons deux réseaux de neurones denses. Joindre deux images pour cette étape. Le premier est un code qui crée un réseau de neurones et le second est une représentation graphique du réseau de neurones avec une dimension de sortie et des opérations annotées.
Étape 8: Entraînement du réseau de neurones
Dans la dixième cellule, nous configurons l'optimiseur de réseau neuronal sur « adam » et la fonction de perte sur « binary_crossentropy ». Ils jouent un rôle majeur dans la mise à jour des pondérations du réseau. Enfin, lorsque nous exécutons la onzième cellule, le réseau de neurones commence à s'entraîner. Pendant que le réseau s'entraîne, examinez la fonction de perte et assurez-vous qu'elle diminue.
Étape 9: Test du réseau de neurones
Une fois le réseau de neurones formé, nous devons préparer un ensemble de données de test. Nous répétons la procédure effectuée pour préparer l'ensemble d'apprentissage dans les 3e, 4e, 5e et 6e cellules sur les données de test pour créer l'ensemble de test. Nous préparons également une étiquette pour l'ensemble de test, mais cette fois, nous exécutons un modèle sur ces ensembles de données pour obtenir des prédictions et non pour nous entraîner.
Étape 10: Résultat et partie suivante…
J'ai obtenu une précision de test de 88%, mais prenez cela avec une pincée de sel car les ensembles de données utilisés pour entraîner et tester ce modèle sont très très très petits et insuffisants pour entraîner correctement ce modèle.
En tout cas j'espère que cet article vous a plu. Mon intention derrière cet exercice n'est pas encore terminée et attention à la 2ème partie. Je le téléchargerai dès que possible.
Dans la prochaine partie, nous allons entraîner un autre réseau de neurones qui nous indiquera l'emplacement de la main dans une image détectée par la main.
Toutes les questions sont les bienvenues.
Si quelqu'un est intéressé à utiliser mon petit ensemble de données, faites-le moi savoir dans les commentaires. Je le rendrai disponible.
Merci d'avoir lu. Je vous verrai bientôt avec la deuxième partie jusque-là, pourquoi ne pas créer et entraîner un réseau de neurones.
Edit: - Les prochaines étapes sont pour la deuxième partie.
Étape 11: Détection d'objets
Dans les étapes précédentes, nous avons créé un NN qui nous indique si l'image de test contient une main ou non. Eh bien quoi ensuite? Si NN classe l'image comme contenant la main, nous aimerions connaître l'emplacement de la main. C'est ce qu'on appelle la détection d'objets dans la littérature sur la vision par ordinateur. Alors formons NN qui fait exactement la même chose.
Étape 12: Vidéo
Une vidéo de 3 min expliquant toutes les étapes restantes. Regarde.
Étape 13: Étiquetage
Si vous voulez qu'un réseau de neurones affiche l'emplacement de la main, nous devons l'entraîner de cette manière, c'est-à-dire contrairement au réseau de neurones précédent où chaque image était étiquetée avec ou sans main. Cette fois, toutes les images avec la main auront quatre étiquettes correspondant aux coordonnées diagonales du cadre de délimitation autour de la main dans cette image.
L'image jointe du fichier csv contient une étiquette pour chaque image. Veuillez noter que les coordonnées sont normalisées avec la dimension de l'image, c'est-à-dire que si la coordonnée X supérieure est au 320e pixel de l'image avec une largeur de 640 pixels, nous l'étiqueterons comme 0,5.
Étape 14: Étiquetage de l'interface graphique
Vous vous demandez peut-être comment j'ai réussi à étiqueter les 82 images, eh bien, j'ai écrit une interface graphique en python qui m'a aidé dans cette tâche. Une fois l'image chargée dans l'interface graphique. J'ai fait un clic gauche sur la coordonnée supérieure et un clic droit sur la coordonnée inférieure de la zone de délimitation probable autour de la main. Ces coordonnées sont ensuite écrites dans un fichier après quoi je clique sur le bouton suivant pour charger l'image suivante. J'ai répété cette procédure pour les 82 images de train et 4 images de test. Une fois les étiquettes prêtes, c'était l'heure de l'entraînement.
Étape 15: Bibliothèques nécessaires
Nous devons d'abord charger toutes les bibliothèques nécessaires. Qui inclut
- PIL pour la manipulation d'images,
- matplotlib pour le traçage,
- numpy pour l'opération matricielle,
- os pour les fonctionnalités dépendantes du système d'exploitation et
- keras pour le réseau de neurones.
Étape 16: Cellules restantes
Dans les 2e, 3e, 4e et 5e cellules, nous chargeons des images dans un tableau numpy et créons un tableau à quatre dimensions à partir d'un fichier csv pour servir d'étiquettes. Dans la cellule numéro 6, nous créons notre réseau de neurones. Son architecture est identique au réseau de neurones utilisé pour la classification sauf la dimension de la couche de sortie qui est 4 et non 1. Une autre différence vient de la fonction de perte utilisée qui est l'erreur quadratique moyenne. Dans la cellule numéro 8, nous commençons l'entraînement de notre réseau neuronal une fois entraîné.
Merci d'avoir lu.
Conseillé:
Automatiser une serre avec LoRa ! (Partie 2) -- Ouvre-fenêtre motorisé : 6 étapes (avec photos)
Automatiser une serre avec LoRa ! (Partie 2) || Ouvre-fenêtre motorisé : Dans ce projet, je vais vous montrer comment j'ai créé un ouvre-fenêtre motorisé pour ma serre. Cela signifie que je vais vous montrer quel moteur j'ai utilisé, comment j'ai conçu le système mécanique réel, comment je conduis le moteur et enfin comment j'ai utilisé un Arduino LoRa
Planétarium alimenté par un réseau de neurones utilisant Python, Electron et Keras : 8 étapes
Planétarium alimenté par réseau de neurones à l'aide de Python, d'électrons et de Keras : dans cette instructable, je vais vous montrer comment j'ai écrit un générateur de planétarium 3D automatique, à l'aide de Python et d'électrons. La vidéo ci-dessus montre l'un des planétariums aléatoires générés par le programme. ** Remarque : Ce programme n'est en aucun cas parfait, et à certains endroits
Nike LED Swoosh ! C'est un excellent décor pour une pièce. C'est le seul projet que tout le monde peut répéter. : 5 étapes
Nike LED Swoosh ! C'est un excellent décor pour une pièce. C'est le seul projet que tout le monde peut répéter. 2x-bois 20-20-3000 2x-contreplaqué 500-1000mm-vis (45mm) 150x-vis (35mm) 30x-vis
Mesurer les changements de force d'un réseau de fibre généré lorsqu'il est déplacé avec une force externe : 8 étapes
Mesure des changements de force d'un réseau de fibres généré lorsqu'il est déplacé par une force externe : les cellules sont capables d'interagir avec leur matrice extracellulaire (ECM) environnante et peuvent à la fois s'appliquer et répondre aux forces exercées par l'ECM. Pour notre projet, nous simulons un réseau de fibres interconnectées qui agirait comme l'ECM et voyons comment le
Contrôleur de réseau IoT. Partie 9 : IoT, domotique : 10 étapes (avec photos)
Contrôleur de réseau IoT. Partie 9 : IoT, domotique : avis de non-responsabilitéLIRE CECI EN PREMIERCe document détaille un projet qui utilise l'alimentation secteur (dans ce cas UK 240VAC RMS), tandis que toutes les précautions ont été prises pour utiliser des pratiques sûres et de bons principes de conception, il y a toujours un risque potentiellement mortel élire