Tabla de contenido:

Analizador de patrones de tráfico con detección de objetos en vivo: 11 pasos (con imágenes)
Analizador de patrones de tráfico con detección de objetos en vivo: 11 pasos (con imágenes)

Video: Analizador de patrones de tráfico con detección de objetos en vivo: 11 pasos (con imágenes)

Video: Analizador de patrones de tráfico con detección de objetos en vivo: 11 pasos (con imágenes)
Video: APRENDE A DETECTAR OBJETOS EN TIEMPO REAL | Entrena y ejecuta tu propia red neuronal con Yolov5 2024, Mes de julio
Anonim
Image
Image
Analizador de patrones de tráfico con detección de objetos en vivo
Analizador de patrones de tráfico con detección de objetos en vivo

En el mundo actual, los semáforos son esenciales para una carretera segura. Sin embargo, muchas veces, los semáforos pueden ser molestos en situaciones en las que alguien se acerca al semáforo justo cuando se pone en rojo. Esto es una pérdida de tiempo, especialmente si la luz impide que un solo vehículo cruce la intersección cuando no hay nadie más en la carretera. Mi innovación es un semáforo inteligente que utiliza la detección de objetos en vivo de una cámara para contar la cantidad de automóviles en cada camino. El hardware que usaré para este proyecto es una Raspberry Pi 3, un módulo de cámara y varios dispositivos electrónicos para la propia luz. Usando OpenCV en la Raspberry Pi, la información recopilada se ejecutará a través del código que controla los LED a través del GPIO. Dependiendo de estos números, el semáforo cambiará, permitiendo que los autos pasen en el orden más óptimo. En este caso, se dejaría pasar el carril con más automóviles para que el carril con menos automóviles estuviera en ralentí, lo que reduciría la contaminación del aire. Esto eliminaría situaciones en las que muchos automóviles se detienen mientras no hay automóviles en la carretera que se cruza. Esto no solo ahorra tiempo a todos, sino que también protege el medio ambiente. La cantidad de tiempo que las personas están detenidas en una señal de alto con el motor en ralentí aumenta la cantidad de contaminación del aire, por lo que al crear un semáforo inteligente, puedo optimizar los patrones de luz para que los autos pasen el menor tiempo posible con el vehículo parado.. En última instancia, este sistema de semáforos podría implementarse en ciudades, suburbios o incluso áreas rurales para que sea más eficiente para las personas y reduciría la contaminación del aire.

Paso 1: Lista de piezas

Materiales:

Raspberry Pi 3 Modelo B v1.2

Cámara Raspberry Pi v2.1

Fuente de alimentación micro USB 5V / 1A

Monitor HDMI, teclado, mouse, tarjeta SD con Raspbian Jessie

Cable de conexión GPIO Raspberry Pi

LED rojos, amarillos y verdes (2 de cada color)

Conectores hembra para Raspberry Pi (7 colores únicos)

Alambre de calibre 24 surtido (diferentes colores) + tubo termorretráctil

Panel o plataforma de madera de 2'x2 '

Tornillos para madera

Superficie negra (cartón, cartulina, cartulina, etc.)

Cinta blanca (o de cualquier color que no sea negro) para marcas viales

Pintura en aerosol negra (para PVC)

Tubo de PVC de ½”con juntas de codo de 90 grados (2), enchufe en T (1), adaptador hembra (2)

Instrumentos

Soldador

impresora 3d

Taladrar con varias brocas

Tablero de circuitos

Pistola de calor

Paso 2: Configurar la Raspberry Pi

Cargue la tarjeta SD en la Raspberry Pi y arranque.

Siga esta guía para instalar las bibliotecas OpenCV necesarias. Asegúrese de tener tiempo para realizar este paso, ya que la instalación de la biblioteca OpenCV puede tardar un par de horas. Asegúrese de instalar y configurar también su cámara aquí.

También debe instalar pip:

picamera

gpiozero

RPi. GPIO

Aquí está el código finalizado:

desde picamera.array importar PiRGBArray

desde picamera importar PiCamera

importar picamera.array

importar numpy como np

tiempo de importación

importar cv2

importar RPi. GPIO como GPIO

tiempo de importación

GPIO.setmode (GPIO. BCM)

para i en (23, 25, 16, 21):

Configuración de GPIO (i, GPIO. OUT)

cam = PiCamera ()

cam.resolution = (480, 480)

cam.framerate = 30

raw = PiRGBArray (cam, tamaño = (480, 480))

tiempo. de sueño (0.1)

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

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

initvert = 0

inithoriz = 0

contador = 0

para el fotograma en cam.capture_continuous (raw, format = "bgr", use_video_port = True):

frame = frame.array

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

máscara = cv2.inRange (hsv, colorLower, colorUpper)

máscara = cv2.blur (máscara, (3, 3))

máscara = cv2.dilate (máscara, Ninguna, iteraciones = 5)

máscara = cv2.erode (máscara, Ninguna, iteraciones = 1)

máscara = cv2.dilate (máscara, Ninguna, iteraciones = 3)

me, thresh = cv2.threshold (máscara, 127, 255, cv2. THRESH_BINARY)

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

centro = Ninguno

vert = 0

horiz = 0

si len (cnts)> 0:

para c en cnts:

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

centro = (int (x), int (y))

radio = int (radio)

cv2.circle (marco, centro, radio, (0, 255, 0), 2)

x = int (x)

y = int (y)

si 180 <x <300:

si y> 300:

vert = vert +1

elif y <180:

vert = vert +1

demás:

vert = vert

si 180 <y <300:

si x> 300:

horiz = horiz +1

elif x <180:

horiz = horiz +1

demás:

horiz = horiz

si vert! = initvert:

imprimir "Automóviles en carril vertical:" + str (vert)

initvert = vert

imprimir "Automóviles en carril horizontal:" + str (horiz)

inithoriz = horiz

impresión '----------------------------'

if horiz! = inithoriz:

imprimir "Automóviles en carril vertical:" + str (vert)

initvert = vert

imprimir "Automóviles en carril horizontal:" + str (horiz)

inithoriz = horiz

impresión '----------------------------'

si vert <horiz:

Salida GPIO (23, GPIO. ALTA)

Salida GPIO (21, GPIO. ALTA)

Salida GPIO (16, GPIO. LOW)

Salida GPIO (25, GPIO. LOW)

si horiz <vert:

Salida GPIO (16, GPIO. ALTA)

Salida GPIO (25, GPIO. ALTA)

Salida GPIO (23, GPIO. LOW)

Salida GPIO (21, GPIO. LOW)

cv2.imshow ("Marco", marco)

cv2.imshow ("HSV", hsv)

cv2.imshow ("Trillar", trillar)

raw.truncate (0)

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

rotura

cv2.destroyAllWindows ()

GPIO.cleanup ()

Paso 3: Raspberry Pi y montaje de la cámara

Soporte para cámara y Raspberry Pi
Soporte para cámara y Raspberry Pi
Soporte para cámara y Raspberry Pi
Soporte para cámara y Raspberry Pi
Soporte para cámara y Raspberry Pi
Soporte para cámara y Raspberry Pi
Soporte para cámara y Raspberry Pi
Soporte para cámara y Raspberry Pi

Imprima en 3D la carcasa y el soporte de la cámara y ensamble.

Paso 4: Montaje del semáforo

Montaje de semáforo
Montaje de semáforo
Montaje de semáforo
Montaje de semáforo
Montaje de semáforo
Montaje de semáforo

Pruebe el semáforo con una placa de pruebas. Cada conjunto opuesto de LED comparte un ánodo y todos comparten un cátodo común (tierra). Debe haber un total de 7 cables de entrada: 1 para cada par de LEDS (6) + 1 cable de tierra. Suelde y monte los semáforos.

Paso 5: Cableado (Parte 1)

Cableado (parte 1)
Cableado (parte 1)
Cableado (parte 1)
Cableado (parte 1)
Cableado (parte 1)
Cableado (parte 1)
Cableado (parte 1)
Cableado (parte 1)

Suelde las clavijas del cabezal hembra a aproximadamente 5 pies de cable. Estos son los lados que estos cables pasarán por las tuberías de PVC más adelante. Asegúrese de poder distinguir los diferentes juegos de luces (2 x 3 colores y 1 suelo). En este caso, marqué los extremos de otro conjunto de cables rojos, amarillos y azules con sharpie para saber cuál es cuál.

Paso 6: Construyendo el Medio Ambiente

Construyendo el Medio Ambiente
Construyendo el Medio Ambiente
Construyendo el medio ambiente
Construyendo el medio ambiente
Construyendo el Medio Ambiente
Construyendo el Medio Ambiente
Construyendo el medio ambiente
Construyendo el medio ambiente

Construyendo el medio ambiente Haga una paleta de madera de 2 pies cuadrados como esta. La madera de desecho está bien, ya que se cubrirá. Taladre un orificio que se ajuste a su adaptador. Taladre tornillos a través de los lados de la paleta para asegurar la tubería de PVC en su lugar. Corte la tabla de espuma negra para que coincida con la paleta de madera que se encuentra debajo. Taladre un agujero que encaje alrededor de la tubería de PVC. Repite en la esquina opuesta. Marca las carreteras con cinta blanca.

Paso 7: Finalización del marco de PVC

Finalización del marco de PVC
Finalización del marco de PVC
Finalización del marco de PVC
Finalización del marco de PVC
Finalización del marco de PVC
Finalización del marco de PVC

En la tubería superior, taladre un orificio en el que quepa un manojo de cables. Un agujero irregular está bien siempre que pueda acceder al interior de las tuberías. Pase los cables a través de los tubos de PVC y las articulaciones de los codos para un ajuste de prueba. Una vez que todo esté finalizado, pinte el PVC con un poco de pintura en aerosol negra para limpiar el aspecto del marco principal. Corte un pequeño espacio en uno de los tubos de PVC para que encaje en una junta en T. Agregue un tubo de PVC a esta junta en T para que cuelgue el semáforo. El diámetro podría ser el mismo que el del marco principal (1/2 ), aunque si usa un tubo más delgado, asegúrese de que los 7 cables puedan serpentear. Perfore un agujero en este tubo para que cuelgue el semáforo.

Paso 8: Cableado (Parte 2)

Cableado (Parte 2)
Cableado (Parte 2)
Cableado (Parte 2)
Cableado (Parte 2)
Cableado (Parte 2)
Cableado (Parte 2)

Vuelva a cablear todo como se probó anteriormente. Verifique dos veces el semáforo y el cableado con una placa de pruebas para confirmar que se han realizado todas las conexiones. Suelde el semáforo a los cables que pasan por el brazo de la junta en T. Envuelva los cables expuestos con cinta aislante para evitar cortocircuitos y una apariencia más limpia.

Paso 9: ¡Terminado

¡Finalizado!
¡Finalizado!
¡Finalizado!
¡Finalizado!
¡Finalizado!
¡Finalizado!
¡Finalizado!
¡Finalizado!

Para ejecutar el código, asegúrese de configurar su fuente como ~ /.profile y cd a la ubicación de su proyecto.

Paso 10: Extras (Fotos)

Recomendado: