Índice:

Analisador de padrões de tráfego usando detecção de objetos ao vivo: 11 etapas (com imagens)
Analisador de padrões de tráfego usando detecção de objetos ao vivo: 11 etapas (com imagens)

Vídeo: Analisador de padrões de tráfego usando detecção de objetos ao vivo: 11 etapas (com imagens)

Vídeo: Analisador de padrões de tráfego usando detecção de objetos ao vivo: 11 etapas (com imagens)
Vídeo: Aula 16 - Redes Neurais Convolucionais para Navegação Veicular Autônoma 2024, Dezembro
Anonim
Image
Image
Analisador de padrões de tráfego usando detecção de objetos ao vivo
Analisador de padrões de tráfego usando detecção de objetos ao vivo

No mundo de hoje, os semáforos são essenciais para uma estrada segura. No entanto, muitas vezes, os semáforos podem ser irritantes em situações em que alguém está se aproximando do semáforo no momento em que ele está ficando vermelho. Isso é uma perda de tempo, especialmente se o semáforo está impedindo um único veículo de passar pelo cruzamento quando não há mais ninguém na estrada. Minha inovação é um semáforo inteligente que usa a detecção de objetos ao vivo de uma câmera para contar o número de carros em cada estrada. O hardware que usarei para este projeto é um Raspberry Pi 3, um módulo de câmera e vários hardwares eletrônicos para a própria luz. Usando o OpenCV no Raspberry Pi, as informações coletadas serão executadas por meio de código que controla os LEDs por meio do GPIO. Dependendo desses números, o semáforo mudará, permitindo a passagem dos carros na ordem mais adequada. Nesse caso, a pista com mais carros seria deixada passar para que a pista com menos carros ficasse ociosa, reduzindo a poluição do ar. Isso eliminaria situações em que muitos carros estão parados enquanto não há carros na estrada de interseção. Isso não só economiza tempo para todos, mas também para o meio ambiente. A quantidade de tempo que as pessoas ficam paradas em um sinal de pare com o motor em marcha lenta aumenta a quantidade de poluição do ar, portanto, ao criar um semáforo inteligente, posso otimizar os padrões de luz para que os carros passem o mínimo de tempo possível com o veículo parado. Em última análise, este sistema de semáforos poderia ser implementado em cidades, subúrbios ou mesmo áreas rurais para ser mais eficiente para as pessoas, reduziria a poluição do ar.

Etapa 1: Lista de peças

Materiais:

Raspberry Pi 3 Modelo B v1.2

Câmera Raspberry Pi v2.1

Fonte de alimentação micro USB 5V / 1A

Monitor HDMI, teclado, mouse e cartão SD com Raspbian Jessie

Cabo breakout Raspberry Pi GPIO

LEDs vermelhos, amarelos e verdes (2 de cada cor)

Conectores fêmeas para Raspberry Pi (7 cores exclusivas)

Fio de bitola 24 sortido (cores diferentes) + tubo termorretrátil

Painel ou plataforma de madeira 2’x2’

Parafusos de madeira

Superfície preta (papelão, placa de espuma, cartolina, etc.)

Fita branca (ou qualquer outra cor que não seja preta) para marcações rodoviárias

Tinta spray preta (para PVC)

Tubo de PVC de ½”com juntas de cotovelo de 90 graus (2), soquete T (1), adaptador fêmea (2)

Ferramentas

Ferro de solda

impressora 3d

Perfure com várias brocas

Tábua de pão

Pistola de calor

Etapa 2: Configurando o Raspberry Pi

Carregue o cartão SD no Raspberry Pi e inicialize.

Siga este guia para instalar as bibliotecas OpenCV necessárias. Certifique-se de ter tempo para realizar esta etapa, pois a instalação da biblioteca OpenCV pode levar algumas horas. Certifique-se de instalar e configurar sua câmera aqui.

Você também deve instalar o pip:

picamera

gpiozero

RPi. GPIO

Aqui está o código finalizado:

de picamera.array import PiRGBArray

de picamera import PiCamera

import picamera.array

importar numpy como np

tempo de importação

import cv2

importar RPi. GPIO como GPIO

tempo de importação

GPIO.setmode (GPIO. BCM)

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

GPIO.setup (i, GPIO. OUT)

cam = PiCamera ()

cam.resolution = (480, 480)

cam.framerate = 30

raw = PiRGBArray (cam, tamanho = (480, 480))

tempo.sono (0,1)

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

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

initvert = 0

inithoriz = 0

contador = 0

para quadro em cam.capture_continuous (raw, format = "bgr", use_video_port = True):

frame = frame.array

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

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

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

máscara = cv2.dilate (máscara, nenhum, iterações = 5)

máscara = cv2.erode (máscara, nenhum, iterações = 1)

máscara = cv2.dilate (máscara, nenhum, iterações = 3)

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

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

center = Nenhum

vert = 0

horiz = 0

se len (cnts)> 0:

para c em cnts:

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

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

raio = int (raio)

cv2.circle (quadro, centro, raio, (0, 255, 0), 2)

x = int (x)

y = int (y)

se 180 <x <300:

se y> 300:

vert = vert +1

elif y <180:

vert = vert +1

outro:

vert = vert

se 180 <y <300:

se x> 300:

horiz = horiz +1

elif x <180:

horiz = horiz +1

outro:

horiz = horiz

if vert! = initvert:

imprimir "Carros na via vertical:" + str (vert)

initvert = vert

imprimir "Carros na pista horizontal:" + str (horiz)

inithoriz = horiz

imprimir '----------------------------'

if horiz! = inithoriz:

imprimir "Carros na via vertical:" + str (vert)

initvert = vert

imprimir "Carros na pista horizontal:" + str (horiz)

inithoriz = horiz

imprimir '----------------------------'

se vert <horiz:

GPIO.output (23, GPIO. HIGH)

GPIO.output (21, GPIO. HIGH)

GPIO.output (16, GPIO. LOW)

GPIO.output (25, GPIO. LOW)

se horiz <vert:

GPIO.output (16, GPIO. HIGH)

GPIO.output (25, GPIO. HIGH)

GPIO.output (23, GPIO. LOW)

GPIO.output (21, GPIO. LOW)

cv2.imshow ("Frame", frame)

cv2.imshow ("HSV", hsv)

cv2.imshow ("Thresh", thresh)

raw.truncate (0)

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

pausa

cv2.destroyAllWindows ()

GPIO.cleanup ()

Etapa 3: Raspberry Pi e suporte para câmera

Raspberry Pi e suporte para câmera
Raspberry Pi e suporte para câmera
Raspberry Pi e suporte para câmera
Raspberry Pi e suporte para câmera
Raspberry Pi e suporte para câmera
Raspberry Pi e suporte para câmera
Raspberry Pi e suporte para câmera
Raspberry Pi e suporte para câmera

Imprima a caixa em 3D e monte e monte a câmera.

Etapa 4: Montagem do semáforo

Conjunto de semáforos
Conjunto de semáforos
Conjunto de semáforos
Conjunto de semáforos
Conjunto de semáforos
Conjunto de semáforos

Teste o semáforo com uma placa de ensaio. Cada conjunto oposto de LEDs compartilha um ânodo e todos eles compartilham um cátodo comum (terra). Deve haver um total de 7 fios de entrada: 1 para cada par de LEDS (6) + 1 fio terra. Solde e monte os semáforos.

Etapa 5: Fiação (Parte 1)

Fiação (Parte 1)
Fiação (Parte 1)
Fiação (Parte 1)
Fiação (Parte 1)
Fiação (Parte 1)
Fiação (Parte 1)
Fiação (Parte 1)
Fiação (Parte 1)

Solde os pinos fêmeas do coletor a cerca de 1,5 m de fio. Esses são os lados que esses fios passarão pelos canos de PVC mais tarde. Certifique-se de ser capaz de distinguir os diferentes conjuntos de luzes (2 x 3 cores e 1 terra). Neste caso, marquei as pontas de outro conjunto de fios vermelho, amarelo e azul com um Sharpie para saber qual é qual.

Etapa 6: Construindo o Meio Ambiente

Construindo o Meio Ambiente
Construindo o Meio Ambiente
Construindo o Meio Ambiente
Construindo o Meio Ambiente
Construindo o Meio Ambiente
Construindo o Meio Ambiente
Construindo o Meio Ambiente
Construindo o Meio Ambiente

Construindo o ambiente Faça uma palete de madeira de 2 pés quadrados como esta. Sucata de madeira é boa, pois será coberta. Faça um furo que caiba exatamente no seu adaptador. Perfure parafusos nas laterais da palete para prender o tubo de PVC no lugar. Corte a placa de espuma preta para combinar com a palete de madeira embaixo. Faça um furo que se encaixe ao redor do tubo de PVC. Repita no canto oposto. Marque as estradas com uma fita branca.

Etapa 7: finalizando a estrutura de PVC

Finalizando a Estrutura de PVC
Finalizando a Estrutura de PVC
Finalizando a Estrutura de PVC
Finalizando a Estrutura de PVC
Finalizando a Estrutura de PVC
Finalizando a Estrutura de PVC

No tubo superior, faça um orifício que possa acomodar um feixe de fios. Um buraco áspero é bom, desde que você possa acessar o interior dos canos. Passe os fios pelos tubos de PVC e pelas juntas dos cotovelos para um ajuste de teste. Depois que tudo estiver finalizado, pinte o PVC com um pouco de tinta spray preta para limpar a aparência do quadro principal. Corte um pequeno espaço em um dos tubos de PVC para encaixar uma junta em T. Adicione um tubo de PVC a esta junta em T para o semáforo pendurar. O diâmetro pode ser igual ao da estrutura principal (1/2 ), mas se você usar um tubo mais fino, certifique-se de que os 7 fios possam atravessar. Faça um orifício no tubo para que o semáforo fique pendurado.

Etapa 8: Fiação (Parte 2)

Fiação (Parte 2)
Fiação (Parte 2)
Fiação (Parte 2)
Fiação (Parte 2)
Fiação (Parte 2)
Fiação (Parte 2)

Reconecte tudo conforme testado anteriormente. Verifique novamente o semáforo e a fiação com um breadboard para confirmar que todas as conexões foram feitas. Solde o semáforo aos fios que passam pelo braço da junta em T. Enrole os fios expostos com fita isolante para evitar curtos e para obter uma aparência mais limpa.

Etapa 9: Concluído

Finalizado!
Finalizado!
Finalizado!
Finalizado!
Finalizado!
Finalizado!
Finalizado!
Finalizado!

Para executar o código, certifique-se de definir seu código-fonte como ~ /.profile e cd para o local do projeto.

Etapa 10: extras (fotos)

Recomendado: