Table des matières:

Analyseur de modèle de trafic utilisant la détection d'objets en direct : 11 étapes (avec images)
Analyseur de modèle de trafic utilisant la détection d'objets en direct : 11 étapes (avec images)

Vidéo: Analyseur de modèle de trafic utilisant la détection d'objets en direct : 11 étapes (avec images)

Vidéo: Analyseur de modèle de trafic utilisant la détection d'objets en direct : 11 étapes (avec images)
Vidéo: Démonstration : pirater un réseau Wi-Fi en cinq minutes 2024, Juin
Anonim
Image
Image
Analyseur de modèle de trafic utilisant la détection d'objets en direct
Analyseur de modèle de trafic utilisant la détection d'objets en direct

Dans le monde d'aujourd'hui, les feux de circulation sont essentiels pour une route sûre. Cependant, souvent, les feux de circulation peuvent être ennuyeux dans des situations où quelqu'un s'approche du feu au moment où il devient rouge. Cela fait perdre du temps, surtout si le feu empêche un seul véhicule de traverser l'intersection alors qu'il n'y a personne d'autre sur la route. Mon innovation est un feu de circulation intelligent qui utilise la détection d'objets en direct à partir d'une caméra pour compter le nombre de voitures sur chaque route. Le matériel que j'utiliserai pour ce projet est un Raspberry Pi 3, un module de caméra et divers matériels électroniques pour la lumière elle-même. En utilisant OpenCV sur le Raspberry Pi, les informations recueillies seront exécutées via un code qui contrôle les LED via le GPIO. En fonction de ces chiffres, le feu de circulation changera, laissant passer les voitures dans l'ordre le plus optimal. Dans ce cas, la voie avec le plus de voitures serait laissée passer de sorte que la voie avec moins de voitures tournerait au ralenti, réduisant ainsi la pollution de l'air. Cela éliminerait les situations où de nombreuses voitures sont arrêtées alors qu'il n'y a pas de voitures sur la route qui se croise. Non seulement cela fait gagner du temps à tout le monde, mais cela préserve également l'environnement. La durée pendant laquelle les gens sont arrêtés à un panneau d'arrêt avec leur moteur au ralenti augmente la quantité de pollution de l'air, donc en créant un feu de circulation intelligent, je suis en mesure d'optimiser les modèles d'éclairage afin que les voitures passent le moins de temps possible avec leur véhicule arrêté. À terme, ce système de feux tricolores pourrait être mis en place dans les villes, les banlieues ou même les zones rurales pour être plus efficace pour les personnes et permettrait de réduire la pollution de l'air.

Étape 1: Liste des pièces

Matériaux:

Raspberry Pi 3 modèle B v1.2

Caméra Raspberry Pi v2.1

Alimentation micro USB 5V/1A

Moniteur HDMI, clavier, souris Carte SD avec Raspbian Jessie

Câble de dérivation GPIO Raspberry Pi

LED rouge, jaune, verte (2 de chaque couleur)

Connecteurs femelles pour Raspberry Pi (7 couleurs uniques)

Fil de calibre 24 assorti (différentes couleurs) + gaine thermorétractable

Panneau ou plateforme de bois 2'x2'

Les vis à bois

Surface noire (carton, carton mousse, panneau d'affichage, etc.)

Ruban blanc (ou de toute autre couleur que le noir) pour les marquages routiers

Peinture noire en aérosol (pour PVC)

Tuyau PVC ½ avec joints coudés à 90 degrés(2), douille en T (1), adaptateur femelle (2)

Outils

Fer à souder

Imprimante 3D

Perceuse avec divers forets

Planche à pain

Pistolet thermique

Étape 2: Configuration du Raspberry Pi

Chargez la carte SD dans le Raspberry Pi et démarrez.

Suivez ce guide pour installer les bibliothèques OpenCV requises. Assurez-vous d'avoir le temps de faire cette étape, car l'installation de la bibliothèque OpenCV peut prendre quelques heures. Assurez-vous également d'installer et de configurer votre caméra ici.

Vous devez également pip installer:

pic-camera

gpiozero

RPi. GPIO

Voici le code finalisé:

depuis picamera.array importer PiRGBArray

depuis picamera importer PiCamera

importer picamera.array

importer numpy en tant que np

heure d'importation

importer cv2

importer RPi. GPIO en tant que GPIO

heure d'importation

GPIO.setmode(GPIO. BCM)

pour i dans (23, 25, 16, 21):

GPIO.setup(i, GPIO. OUT)

cam = PiCamera()

cam.résolution=(480, 480)

cam.framerate=30

raw=PiRGBArray(came, taille=(480, 480))

temps.sommeil(0.1)

colorLower = np.array([0, 100, 100])

colorUpper = np.array([179, 255, 255])

initvert = 0

initialiser = 0

compteur = 0

pour l'image dans cam.capture_continuous(raw, format="bgr", use_video_port=True):

frame = frame.array

hsv = cv2.cvtColor(cadre, cv2. COLOR_BGR2HSV)

mask = cv2.inRange(hsv, colorLower, colorUpper)

masque = cv2.blur(masque, (3, 3))

mask= cv2.dilate(masque, Aucun, itérations=5)

mask= cv2.erode(masque, Aucun, itérations=1)

mask= cv2.dilate(masque, Aucun, itérations=3)

moi, seuil = cv2.threshold(mask, 127, 255, cv2. THRESH_BINARY)

cnts = cv2.findContours(seuil, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE)[-2]

centre = aucun

vert = 0

horiz = 0

si longueur(cnts) > 0:

pour c en cnts:

(x, y), rayon = cv2.minEnclosingCircle(c)

centre = (int(x), int(y))

rayon = int(rayon)

cv2.circle(cadre, centre, rayon, (0, 255, 0), 2)

x = entier(x)

y = entier(y)

si 180 < x < 300:

si y > 300:

vert = vert +1

elif y < 180:

vert = vert +1

autre:

vert = vert

si 180 < y < 300:

si x > 300:

horiz = horiz +1

elif x < 180:

horiz = horiz +1

autre:

horiz = horiz

si vert != initvert:

print"Voitures en voie verticale: " + str(vert)

initvert = vert

print"Voitures en voie horizontale: " + str(horiz)

inithoriz = horiz

imprimer '----------------------------'

si horiz != inithoriz:

print"Voitures en voie verticale: " + str(vert)

initvert = vert

print"Voitures en voie horizontale: " + str(horiz)

inithoriz = horiz

imprimer '----------------------------'

si vert < horiz:

GPIO.sortie(23, GPIO. HIGH)

GPIO.sortie(21, GPIO. HIGH)

GPIO.sortie (16, GPIO. LOW)

GPIO.sortie (25, GPIO. LOW)

si horiz < vert:

GPIO.sortie (16, GPIO. HIGH)

GPIO.sortie (25, GPIO. HIGH)

GPIO.sortie(23, GPIO. LOW)

GPIO.sortie(21, GPIO. LOW)

cv2.imshow("Cadre", cadre)

cv2.imshow("HSV", hsv)

cv2.imshow("Seuil", seuil)

raw.truncate(0)

si cv2.waitKey(1) & 0xFF == ord('q'):

Pause

cv2.destroyAllWindows()

GPIO.cleanup()

Étape 3: Raspberry Pi et support de caméra

Raspberry Pi et support de caméra
Raspberry Pi et support de caméra
Raspberry Pi et support de caméra
Raspberry Pi et support de caméra
Raspberry Pi et support de caméra
Raspberry Pi et support de caméra
Raspberry Pi et support de caméra
Raspberry Pi et support de caméra

Imprimez en 3D le boîtier et le support de caméra et assemblez.

Étape 4: Assemblage des feux de circulation

Assemblage de feux de circulation
Assemblage de feux de circulation
Assemblage de feux de circulation
Assemblage de feux de circulation
Assemblage de feux de circulation
Assemblage de feux de circulation

Testez le feu de circulation avec une planche à pain. Chaque ensemble opposé de LED partage une anode et tous partagent une cathode commune (masse). Il doit y avoir un total de 7 fils d'entrée: 1 pour chaque paire de LEDS (6) + 1 fil de terre. Souder et assembler les feux de circulation.

Étape 5: Câblage (Partie 1)

Câblage (Partie 1)
Câblage (Partie 1)
Câblage (Partie 1)
Câblage (Partie 1)
Câblage (Partie 1)
Câblage (Partie 1)
Câblage (Partie 1)
Câblage (Partie 1)

Soudez les broches femelles d'en-tête à environ 5 pieds de fil. Ce sont les côtés que ces fils serpenteront à travers les tuyaux en PVC plus tard. Assurez-vous de pouvoir distinguer les différents jeux de lumières (2 x 3 couleurs et 1 sol). Dans ce cas, j'ai marqué les extrémités d'un autre ensemble de fils rouges, jaunes et bleus avec un sharpie pour que je sache lequel est lequel.

Étape 6: Construire l'environnement

Construire l'environnement
Construire l'environnement
Construire l'environnement
Construire l'environnement
Construire l'environnement
Construire l'environnement
Construire l'environnement
Construire l'environnement

Construire l'environnement Fabriquez une palette en bois de 2 pieds carrés comme celle-ci. Le bois de rebut est très bien car il sera recouvert. Percez un trou qui correspond juste à votre adaptateur. Percez des vis à travers les côtés de la palette pour fixer le tuyau en PVC en place. Coupez le panneau de mousse noir pour qu'il corresponde à la palette en bois en dessous. Percez un trou qui s'adapte autour du tuyau en PVC. Répétez sur le coin opposé. Marquez les routes avec du ruban blanc.

Étape 7: Finalisation du cadre en PVC

Finaliser le cadre en PVC
Finaliser le cadre en PVC
Finaliser le cadre en PVC
Finaliser le cadre en PVC
Finaliser le cadre en PVC
Finaliser le cadre en PVC

Sur le tuyau supérieur, percez un trou pouvant contenir un faisceau de fils. Un trou rugueux est très bien tant que vous pouvez accéder à l'intérieur des tuyaux. Faites passer les fils à travers les tuyaux en PVC et les joints coudés pour un essai d'ajustement. Une fois que tout est finalisé, peignez le PVC avec de la peinture en aérosol noire pour nettoyer l'apparence du cadre principal. Coupez un petit espace dans l'un des tuyaux en PVC pour s'adapter à un joint en T. Ajoutez un tuyau en PVC à ce joint en T pour que le feu de circulation pende. Le diamètre peut être le même que celui du cadre principal (1/2 ), mais si vous utilisez un tuyau plus fin, assurez-vous que les 7 fils peuvent passer à travers. Percez un trou dans ce tuyau pour y suspendre le feu de circulation.

Étape 8: Câblage (Partie 2)

Câblage (Partie 2)
Câblage (Partie 2)
Câblage (Partie 2)
Câblage (Partie 2)
Câblage (Partie 2)
Câblage (Partie 2)

Re-câblez tout comme testé précédemment. Vérifiez le feu de circulation et le câblage avec une planche à pain pour confirmer que toutes les connexions ont été effectuées. Soudez le feu de circulation aux fils passant par le bras en T. Enveloppez les fils exposés avec du ruban électrique pour éviter tout court-circuit et pour un look plus propre.

Étape 9: Terminé

Fini!
Fini!
Fini!
Fini!
Fini!
Fini!
Fini!
Fini!

Pour exécuter le code, assurez-vous de définir votre source en tant que ~/.profile et cd à l'emplacement de votre projet.

Étape 10: Extras (Photos)

Conseillé: