Olá sejam muito bem vindos a mais um vídeo neste projeto nós vamos criar um contador de vagas de estacionamento Por incrível que pareça nós não vamos utilizar é uma técnica super avançada para isso nós vamos utilizar recursos simples do o perceber que se você curte esse conteúdo Não esqueça de deixar o like e se inscrever no canal [Música] se você quer aprender visão computacional do zero o filho nosso curso que vai te ensinar desde os fundamentos até as técnicas mais avançadas para o processamento demais não perca essa chance o link está na descrição do curso é [Música] é bom pessoal para esse projeto nós vamos precisar de duas bibliotecas Open CV e onan pai então vou fazer aqui a importação no pênis e ver e o não pai o snp é muito bem a primeira etapa do projeto eu abrir aqui o vídeo primeira etapa é mapear as vagas então nós temos aqui oito vagas na imagem eu tô desconsiderando essa última aqui ela ficou bastante cortado aqui no vídeo né então estou considerando apenas essas vagas aqui do centro e Aqui nós temos oito vagas então eu fiz um mapeamento do retângulo pegando aqui um retângulo dentro de cada vaga então tenho que uma piar e extrair as posições XY altura e largura bom então eu já fiz aqui a extração dessas informações aí eu fiz utilizando o método select roi do opencv Porém você pode usar qualquer outra técnica para extrair as posições de cada retângulo de dentro das vagas bom então vou copiar aqui colar ó e aqui eu coloquei cada uma separadamente para ficar mais fácil para vocês entenderem então tem a vaga um e aqui está a posição do retângulo na imagem então Aqui nós temos o eixo X Y largura e altura aqui muito bem o próximo passo eu vou unir todas essas coordenadas em uma única variável que será variável Vargas não vou criar aqui um ao rei e contendo a vaga um a iva colocar as oito vagas aqui dentro a vaga 23 e até a vaga 8 oi oi agora vou criar a variável vídeo que vai receber cê vê: vídeo Creeper Oi e que eu vou passar o caminho do vídeo quem está aqui dentro da pasta E aí é o vídeo que contém a imagem do carro estacionando bom então vou colocar aqui vídeo. MP4 e o arquivo do vídeo pessoal vai estar disponível para download no anexo da aula tá bom E aqui nós vamos montar a estrutura básica para rodar o vídeo né então vou criar aqui um núcleo do tipo infinito e o Claro que a variável o cheque imagem que será igual o vídeo o ponto rede e eu vou colocar aqui o inhame show para exibir a imagem na tela tô passando oe MG em seguida você vê 2. 8 aqui com de Lady um milisegundo é muito bem vou aumentar aqui um pouco o de lei para 10 milisegundos fazendo com que a imagem faça um pouco mais devagar E Agora Nós temos que fazer o pré-processamento dessa imagem e aplicar algumas técnicas nela para nós distrair a informação que a gente precisa Oi oi aqui agora nós vamos percorrer a variável vagas Ok onde contém as nossas coordenadas e verificar se as coordenadas estão corretas nessa estão no lugar correto e como criar aqui um four o XY largura e altura que a with Raid de dentro da variável vagas bom então já estou percorrendo a variável vagas e extraindo cada uma dessas posições em e aqui vamos colocar CV 2 o ponto retângulo nós vamos fazer um retângulo na imagem original tá pegando como ponto inicial X e Y a Inglaterra x + wi-fi y mais a altura que a variável h e aqui vamos colocar uma cor verde e com uma espessura de 3 pixels Ah tá rodando é muito bem nós temos então e em cada uma das vagas ou retângulo é da posição que eu extrair inicialmente lembrando o que eu também disponibilizar para download no arquivo TXT com essas informações tá bom e o meu estratégia que nós vamos utilizar para verificar se aquela vaga está livre ou não vai ser pela escala de cor dos pixels dentro de cada retângulo então nós temos fazer um processo de binarização nessa imagem onde nós vamos deixar ela apenas com duas cores que é preto e branco e assim aplicar algumas morfologias para melhorar a extração dessas informações tão primeiro passo aqui vai ser converter a imagem original para escala de cinza não vou criar aqui aí MG cinza e isso era igual você vê: a CBT Color tá pegando a imagem original e com o código de conversão o pgr to Grey a e agora nós vamos aplicar um Crush Road aqui vai vinalizar a imagem não vou criar aquele MG BH the Trash nós vamos utilizar um flash Road adaptativo isso porque a técnica de adaptação ela vai desconsiderar alguns moídas a imagem é por exemplo sombra então nós temos uma suavização da escala de cor dos pixels Vamos colocar aqui você vê: o adaptative flash Hold e vamos passar a imagem cinza é o valor máximo é 255 é o valor padrão né da escala do pixel Oi e o método de adaptação será o cê vê dois.
Adaptaram-se Flash House em si si e em seguida temos colocar o tipo de Trash router e eu vou colocar aqui um flash Road binário invertido tá eu quero uma inversão na onde nós temos pontos escuros na imagem eu quero que seja mostrado como claro como Pixel branco e aonde nós temos pixels mais claros eu quero colocar com a cor preta ó e aqui passando os parâmetros finais o melhor para mim porque eu encontrei e foi o valor 25 para o bloco sai e 16 para os e vamo Então vamos exibir a nossa imagem de Trash Road e ver como está ficando vou criar aqui o vídeo th que é o vídeo Trash E aí Oh e vamos rodar e Aqui nós temos duas imagens E aí o que que nós podemos ver claramente que nos pontos aonde nós temos o maior brilho na imagem não é presento a rua nós temos ela pintada de preto no Clash Royale invertido tá então percebe aqui quando uma vaga está vazia nós temos uma grande quantidade de pixels Preto dentro da vaga E quando nós temos um carro essa quantidade de pixels pretos diminui e dá espaço aos pixels brancos então é com esse indicador que nós vamos criar uma condição para verificar se tem carro ou não naquela vaga é muito bem e agora eu vou aplicar aqui o a morfologia que vai melhorar ainda mais a qualidade da imagem Então vou criar aqui um médium Blur ou criar MG o woofer que vai receber se você vê: e o médium Blue que vai dar uma suavizada nos pixels E aí que eu vou passar a imagem Trash passando uma matriz de 5 bom então nós vamos aplicar ainda mais um a morfologia que é a dilatação é dilatação com próprio nome já disse ela dilata ajuda a dilatar os pixels então no espaço onde nós temos o maior quantidade de pixels pretos usando a dilatação essa quantidade de pixels pretos tende a aumentar e é da mesma forma aonde tem pixels brancos para isso eu preciso criar aqui o carnaval o utilizando onan pai tá vou utilizar np. com homens passaram em uma matriz de 3 por 3 e com tipo NP. em 2018 o que então vamos ser a imagem dwscer a imagem de latada é igual a você vê dois pontos de leite e aqui vamos passar a imagem Blur Oi e a variável canal o Tom ver como está ficando essa imagem imagens latada e veja que agora nós temos é uma imagem bem mais limpa né retirando aí Alguns ruídos é muito bem e agora vamos fazer uma operação aqui um para cada vaga que nós extraímos as coordenadas Mas vamos calcular a quantidade de pixels brancos dentro desse retângulo são vou criar aqui é um recorte nós vamos fazer um recorte na imagem é de latada bom então imagem DIU tá pegando as coordenadas Y até Y + h o x ATX mais a largura que é o wi-fi aqui vamos colocar quantidade PX branco é a quantidade de pixels brancos o que será igual cê vê: I count não zero Ou seja eu quero contar pixels que não são 10 que não são pretos eu vou passar parece a função a variável recorte bom então para nós vermos esse número vou colocar aqui um cê vê dois ponto de táxi tá passando a imagem original Tô fazendo uma string e da variável que ter pixels brancos bom e vamos colocar na posição o XY mais altura eu vou colocar aqui menos 10 pixels para nós colocarmos o número bem e ali no cantinho do retângulo em seguida a fonte nós vamos utilizar vou colocar que você vê: Roger Simplex eu vou colocar aqui um Fontes caiu de 0.
5 Vou deixar na cor branco e com espessura de um pixel E agora Como nós rodarmos Bom dia que nós temos aqui em tempo real a quantidade de pixels a quantidade de pixels brancos e veja que interessante as vagas que estão vazias nós temos um número entre 800 e no máximo 3 mil né Nós temos aqui 2. 500 2. 300 Vamos colocar em um limite de 3 mil pixels né brancos e por outro lado quando nós temos um carro estacionado na vaga nós temos uma quantidade bem maior de que seus brancos então nós temos aqui 5000/6000 o carro vai estacionar a E Agora Nós temos sete mil no quadrado onde o carro está e eu posso considerar aqui abaixo de 3 mil pixels brancos nós temos uma vaga vazia e acima disso nós temos uma vaga preenchida bom então vou criar aqui a seguinte condição se que tem pixels brancos eu sou maior que 3.
000 bom então O que significa que nós temos a vaga preenchida eu vou tirar aqui esse retângulo e colocar aqui dentro e com a cor vermelha assim nós temos uma vaga preenchida nós vamos pintar o retângulo de vermelho o E caso contrário e nós vamos pintar o retângulo de verde E aí eu vou colocar aqui um verde Oh e vamos executar E aí é muito bem está funcionando perfeitamente né Nós temos aqui três quatro cinco vagas vazias e 3 vagas preenchidas que estão em vermelho E Agora Nós temos que contabilizar esses números bom então vou criar aqui a variável o que te as vagas abertas que vai iniciar com 10 e e a cada vez que nós tivemos uma vaga com a quantidade de pixels menor do que 3 mil é que Noel se nós vamos contabilizar o número na variável que ter vagas abertas estão mais igual a 1 e nós vamos ver que está funcionando Vou colocar aqui um print na variável que ter vagas abertas e quando nós rodarmos já está mostrando 6 bom e quando o carro estacionar agora nós temos cinco então está funcionando perfeitamente e agora vamos colocar essa informação dentro da imagem bom então vou criar aqui em um retângulo a c B2. Retângulo ou na imagem tô passando aqui os valores 9001 para ficar bem ali no em cima na imagem a Inglaterra pé 450 zi-o por 60 e nós vamos colocar um retângulo é preenchido com uma cor e o texto por cima é para destacar assim o texto eu vou colocar o retângulo aqui na cor azul e como a espessura de menos um né o seja eu quero que esteja totalmente preenchido em seguida 1 CV 2 pontos futex pegando a imagem ó e aqui eu vou criar um texto e eu vou fazer aqui uma concatenação eu vou colocar Livre os dois pontos e aí vamos concatenar com a variável que ter vagas abertas e em seguida/a quantidade de vagas totais que nós temos que são 8 é muito bem então esse será o texto colocar aqui a posição 95 com 45 a fonte serve: a ponte hardware Simplex tô passando um Style de 1.