NVIDIA Jetson Nano : Détection et suivi de voie

Zachariah Peterson
|  Créé: Avril 9, 2020  |  Mise à jour: Mars 23, 2021
Avions furtifs et radar quantique

Les véhicules autonomes deviennent lentement une partie importante de l'industrie automobile. Beaucoup croient que les véhicules entièrement autonomes seront bientôt en circulation aux côtés des humains, et les entreprises technologiques sont en compétition pour déployer des véhicules entièrement autonomes. En décembre 2018, Waymo, l'entreprise issue du projet de voiture autonome de Google, a officiellement lancé son service commercial de voiture autonome dans les banlieues de Phoenix. Des entreprises comme May Mobility, Drive.ai et Uber suivent le même chemin.

Les véhicules autonomes peuvent sembler être une vision grandiose, mais les véhicules semi-autonomes sont déjà parmi nous. Les nouvelles voitures Tesla disposent de la fonctionnalité Tesla Autopilot, capable de reconnaître et de suivre les voies, de réguler la vitesse de croisière de manière adaptative et de se garer automatiquement. La capacité à identifier et suivre les voies sur la route est l'une des nombreuses conditions préalables pour les véhicules sans conducteur. Bien que la reconnaissance des voies puisse sembler être un problème difficile, vous pouvez commencer à développer des algorithmes de reconnaissance et de suivi des voies avec la plateforme matérielle NVIDIA Jetson Nano.

Introduction au Jetson Nano

Le Jetson Nano COM est légèrement plus grand qu'un Raspberry Pi 3, mais il peut exécuter des réseaux neuronaux en parallèle avec une puissance de 472 Gflops. Cela représente environ 22 fois plus de puissance que le Raspberry Pi 3 et est très économe en énergie, consommant aussi peu que 5 W. Cette carte est parfaite pour les applications d'IA embarquées fonctionnant sur un noyau Linux allégé. Elle dispose d'assez de puissance de traitement et de mémoire embarquée pour des applications de traitement d'images et de vidéos de haute qualité. Les caractéristiques clés du Jetson Nano comprennent:

  • GPU: GPU basé sur l'architecture NVIDIA Maxwell™ à 128 cœurs
  • CPU: Quad-core ARM® A57
  • Caméra: voies MIPI CSI-2 DPHY, 12x (Module) et 1x (Kit de développement)
  • Mémoire: 4 Go LPDDR4 64 bits ; 25,6 gigaoctets/seconde
  • Connectivité: Ethernet Gigabit
  • Prise en charge de l'OS: Linux pour Tegra®
  • Taille du module: 70mm x 45mm
  • Le kit de développement est un excellent outil pour tester un nouvel algorithme pour les applications de vision par ordinateur / traitement d'image. Si vous n'êtes pas familier avec la plateforme Jetson Nano, jetez un œil à cet article. Sinon, continuez à lire pour voir comment vous pouvez facilement déployer une application de traitement d'image puissante pour la reconnaissance de voies.
Developer kit for NVIDIA Jetson Nano
Kit de développement NVIDIA Jetson Nano. [Image source]

Reconnaissance de voies avec Jetson Nano

Pour ce projet, nous avons besoin d'un COM Jetson Nano ou d'une carte de développement et d'une caméra CSI (une caméra CSI Raspberry Pi v2 fonctionne bien). Je vais montrer cette application en utilisant la carte de développement Nano, mais vous pouvez facilement construire une carte de base personnalisée pour un COM Nano et déployer cette application. La caméra CSI sera connectée au port de la caméra sur le Jetson Nano, bien que vous pourriez utiliser une caméra USB ou des caméras IP. Voici les exigences nécessaires pour réussir ce projet:

Matériel

  • NVIDIA Jetson Nano
  • Caméra CSI

Paquets logiciels

  • Python
  • OpenCV
  • Nanocamera

Mise en œuvre

L'implémentation complète de ce projet peut être trouvée sur GitHub. Suivez les étapes à venir pour obtenir une démo de ce projet en fonctionnement. Ces étapes sont des étapes importantes de traitement d'image qui visent à rendre la reconnaissance de voies plus précise.

Perception

La première étape de notre système de détection de voies consiste à pouvoir lire des images en direct de la caméra. Pour les nouveaux utilisateurs travaillant avec le Jetson Nano, manipuler les caméras peut s'avérer délicat. Pour cela, nous utiliserons la bibliothèque NanoCamera. Cette bibliothèque n'est pas la meilleure option pour une application de niveau production, mais elle fonctionne pour une application plus simple comme celle présentée ici.

Premièrement, installez la bibliothèque avec pip:

.

Lire l'image en direct de la caméra:

.

Supprimer le bruit avec un flou

Pour rendre l'image plus lisse et supprimer le bruit indésirable, nous pouvons appliquer un flou gaussien. Cela implique de calculer la valeur de chaque pixel comme une moyenne pondérée des pixels environnants.

Gaussian blur algorithm for lane recognition
Algorithme de flou gaussien pour le lissage d'image.

OpenCV inclut une fonction pour appliquer un flou gaussien à une image:

.

Transformation de couleur

Après le flou gaussien, l'image est toujours en RGB et doit être transformée en espace de couleurs HSV. La séparation des couleurs sera utilisée pour éliminer les couleurs indésirables de l'image. Une fois l'image en HSV, nous pouvons « lever » toutes les couleurs inutiles de l'image en spécifiant une plage de niveaux de gris.

.

Opérations morphologiques - Dilatation

La dilatation ajoute des pixels aux limites des objets dans une image. Appliquer la dilatation à l'image aidera à fermer les espaces libres dans les images de lignes.

.

Canny (Détection de Bord)

Pour détecter les lignes de voie, nous pouvons utiliser une technique appelée détection de bord de Canny. La détection de bord de Canny peut être utilisée pour extraire des informations structurelles utiles d'un objet. La bibliothèque OpenCV fournit une fonction de détection de bord de Canny qui peut être utilisée pour détecter les bords dans une image. Pour que la détection de Canny fonctionne, nous devons fournir des seuils minimum et maximum. OpenCV recommande généralement la valeur à être (100, 200) ou (200, 400), donc nous utilisons (200, 400).

.
Canny edge detection applied to a camera image
Image avec détection de bord de Canny. Notez les voies montrées dans l'image.

Isoler la Région d'Intérêt

L'image de sortie de bord de Canny contient du bruit. Toutes les informations autres que les voies dans l'image peuvent être isolées en réduisant la région d'intérêt. Lors de la reconnaissance de voie et de la navigation, nous n'avons pas nécessairement besoin de voir l'image entière. Une manière simple de faire cela est de simplement recadrer la moitié supérieure de l'image.

ROI reduction for lane recognition
Image originale (à gauche) et image avec région d'intérêt recadrée (à droite).

Le code pour réduire la région d'intérêt est:

.

Détecter les Segments de Ligne - Lignes de Hough

Après avoir réduit la région d'intérêt, les voies sont clairement visibles avec quatre lignes distinctes. Cependant, l'ordinateur ne sait pas que ces lignes représentent les limites de deux voies. Donc, nous avons besoin d'une manière d'extraire les coordonnées pour ces lignes de voie. Une transformation de Hough est une technique utilisée en traitement d'image pour extraire des caractéristiques comme des lignes, des cercles et des ellipses. Elle peut être utilisée pour trouver des lignes droites à partir d'un nombre de pixels qui semblent former une ligne. Cela peut être fait avec la fonction HoughLinesP dans OpenCV. La fonction ajuste de nombreuses lignes à travers tous les pixels blancs et retourne l'ensemble le plus probable de lignes sous réserve de certaines contraintes de seuil minimum.

Lines found during lane recognition
Détection de ligne avec une transformation de Hough appliquée.

Voici notre code qui détecte des segments de ligne en utilisant une transformation de Hough. La plupart des paramètres utilisés ici peuvent être déterminés par essai et erreur ou en sélectionnant des paramètres à partir d'images de référence.

.

Combiner les segments de ligne en deux lignes de voie

La sortie de la fonction detect_line_segments() produit un ensemble de petites lignes avec des coordonnées de points d'extrémité (x1, y1) et (x2, y2). Nous devons trouver un moyen de les combiner en juste deux lignes pour les lignes de voie gauche et droite, mais comment y parvenir ? Une manière est de classer ces segments de ligne par leurs pentes.

Toutes les lignes de la voie de gauche ont une pente positive, et les segments de ligne appartenant à la ligne de droite ont une pente négative. Sur la base de ces deux nouveaux groupes, nous pouvons prendre la moyenne des pentes et des intercepts des segments de ligne pour obtenir les pentes et les intercepts des lignes de voie gauche et droite. Ceci est implémenté avec la fonction average_slope_intercept():

..

La fonction make_points() est une fonction d'aide pour la fonction average_slope_intercept(), qui prend la pente et l'intercept d'une ligne, et retourne les points d'extrémité du segment de ligne. À ce stade, nous avons maintenant les lignes de voie!

Quelle est la suite

À ce stade, la sortie de cette fonction serait entrée dans un autre algorithme pour contrôler la vitesse et la direction du véhicule. Pour ce faire, un angle de direction peut être calculé à partir des lignes de voie détectées, puis transmis à un contrôleur PID pour minimiser l'angle de direction et maintenir le véhicule centré.

Bien que cela ait été réalisé avec une carte de développement Nano, le même code offre un point de départ pour déployer un système dans un système de traitement d'image embarqué pour un environnement de production. Pour ce faire, vous aurez besoin de construire une véritable carte de base pour le Jetson Nano. Cela est plus facile lorsque vous utilisez les outils de conception électronique modulaire dans l'application Upverter Board Builder. En adoptant une approche modulaire, vous pouvez facilement personnaliser une carte de base pour un Jetson Nano, des caméras et d'autres capteurs pour la reconnaissance de voies.

Les outils de conception électronique modulaire dans Upverter vous donnent accès à une large gamme de COMs standard de l'industrie et de modules populaires sans télécharger ni installer de nouveaux logiciels. Vous pouvez créer du matériel de qualité production pour une variété d'applications, y compris la reconnaissance de voies et d'autres tâches de traitement d'image avec Jetson Nano, en utilisant une interface utilisateur glisser-déposer. Si votre système nécessite des fonctionnalités supplémentaires, vous pouvez inclure la connectivité sans fil, un éventail de capteurs, et bien plus encore.

Jetez un œil à certaines histoires de succès des clients Gumstix ou contactez-nous dès aujourd'hui pour en savoir plus sur nos produits, outils de conception et services.

A propos de l'auteur

A propos de l'auteur

Zachariah Peterson possède une vaste expérience technique dans le milieu universitaire et industriel. Avant de travailler dans l'industrie des PCB, il a enseigné à la Portland State University. Il a dirigé son M.S. recherche sur les capteurs de gaz chimisorptifs et son doctorat en physique appliquée, recherche sur la théorie et la stabilité du laser aléatoire. Son expérience en recherche scientifique couvre des sujets tels que les lasers à nanoparticules, les dispositifs électroniques et optoélectroniques à semi-conducteurs, les systèmes environnementaux et l'analyse financière. Ses travaux ont été publiés dans diverses revues spécialisées et actes de conférences et il a écrit des centaines de blogs techniques sur la conception de PCB pour de nombreuses entreprises. Zachariah travaille avec d'autres sociétés de PCB fournissant des services de conception et de recherche. Il est membre de l'IEEE Photonics Society et de l'American Physical Society

Ressources associées

Retournez à la Page d'Accueil
Thank you, you are now subscribed to updates.