·

Engenharia Elétrica ·

Outros

Envie sua pergunta para a IA e receba a resposta na hora

Fazer Pergunta

Texto de pré-visualização

IDENTIFICAÇÃO AUTOMÁTICA DE PLACA DE VEÍCULOS ATRAVÉS DE PROCESSAMENTO DE IMAGEM E VISÃO COMPUTACIONAL Leonardo Leite1 Ricardo Antonello2 1Instituto Federal Catarinense Campus Luzernaleonardoleitescgmailcom 2Instituto Federal Catarinense Campus Luzernaricardoantonelloifcedubr Resumo O uso da visão computacional abrange diversos campos da tecnologia como identificação de faces objetos animados e inanimados e a identificação de caracteres em uma imagem Neste projeto a utilização desta tecnologia visa a identificação de placas de veículos que podem ser utilizados para autorizar a entrada de veículos em um ambiente e registrar o histórico de presenças daquele determinado veículo O principal objetivo deste projeto é automatizar uma cancela para permitir a entrada e saída de veículos précadastrados sem intervenção humana O projeto foi aplicado na guarita principal do Instituto Federal Catarinense campus Luzerna O sistema utilizado foi composto por uma webcam com definição de 720p e um sistema computacional com processador Intel Core i5 com sistema operacional Windows Os códigos foram desenvolvidos na linguagem Python com as bibliotecas OpenCV e Tesseract A taxa de sucesso na identificação foi de 9354 em um conjunto de 10 veículos cadastrados utilizandose 50 tentativas de identificação Como trabalhos futuros sugerese a adaptação para utilização de um sistema compacto como o Raspberry Pi PalavrasChave Visão Computacional Identificação de veículos Reconhecimento de caracteres 1 INTRODUÇÃO Com o visível crescimento da quantidade carros nas áreas urbanas realizar o processo de leitura de placas e identificação de veículos de maneira manual se tornou um processo caro e sujeito a erros além disso é um trabalho insalubre um monitor de trânsito ficar posicionado em uma via anotando a placa dos veículos que circulam pelo local Para tornar este processo mais rápido barato e confiável este trabalho aplicou técnicas visão computacional em um sistema composto por um computador padrão PC e uma webcam convencional A visão computacional em conjunto com a programação em linguagem Python LABAKI 2017 está sendo usada em diversos campos atualmente como reconhecimento de pessoas de padrões e também no reconhecimento de caracteres Um programa que é capaz de ler placas de veículos pode ser utilizado para gerenciamento de estacionamentos controlando a entrada e saída de veículos bem como para uso do Estado multando indivíduos que infringem a lei O objetivo principal deste trabalho foi realizar a identificação e a leitura dos caracteres de uma placa de veículo em uma imagem e em tempo real utilizando uma câmera com sensor RGB1 Salientase também que se utilizam componentes físicos de fácil aquisição no mercado conforme descritos e especificados no desenvolvimento deste trabalho tornando este sistema barato e acessível 1 RGB Acrônimo de RedGreenBlue traduzido respectivamente para Vermelho Verde e Azul RGB é o padrão para sensores câmeras coloridas utilizadas em câmeras de smartphones webcams e câmeras de vídeo digitais em geral 2 FUNDAMENTAÇÃO TEÓRICA 21 Linguagem Python Python é uma linguagem de código aberto e de alto nível criada pelo holandês Guido Van Rossum PYTHON 2017 Grandes empresas como a NASA Nokia e Disney utilizam a programação em Python em seus projetos e em muitos casos liberam tais códigos para a comunidade 22 Biblioteca OpenCV OpenCV é uma biblioteca de código aberto direcionada principalmente a visão computacional Ela possui algoritmos e funções especializadas para edição de imagens permitindo a leitura de caracteres pessoas e objetos Ela foi desenvolvida inicialmente pela Intel Corporation e tinha como objetivo tornar acessível o uso da visão computacional por diversos programadores atuando assim em diversas áreas sendo estas educacionais industriais ou até mesmo comerciais OPENCV 2017 23 Haarcascade O princípio de funcionamento de um haarcascade é baseado no uso de centenas de padrões de imagens listados em um arquivo xml que quando utilizado mais tarde em conjunto com a biblioteca OpenCV é capaz de identificar padrões nas imagens e nos vídeos REZAEI 2017 O processo de criação é relativamente simples se realizado com softwares criados especificamente para este fim Um dos softwares que podem ser utilizados destacase um que não um nome especifíco que tem como criador Mahdi Rezaei 2017 que possui PHD em Ciências da Computação e atualmente é professor na Universidade de Auckland onde desenvolveu um artigo onde contém todas as etapas necessárias no desenvolvimento do haarcascade 24 Raspberry Pi O Raspberry Pi pode ser considerado por muitos profissionais como um pequeno sistema que é capaz de exercer o mesmo papel que um computador normal Além disso possui entradas e saídas digitais e analógicas para diferentes necessidades RASPBERRY PI 2017 Ele possui diferentes sistemas operacionais sendo que qualquer pessoa tem acesso a tais arquivos pelo site oficial da empresa O principal e mais utilizado é o Debian um sistema baseado no Linux que funciona no Raspberry Pi Figura 01 Raspberry Pi em perspectiva Fonte Raspberry Pi 2017 25 Biblioteca PyTesseract O TesseractOCR é uma biblioteca de código aberto desenvolvida pela Google originalmente para a linguagem C O seu objetivo é a leitura de textos e caracteres de uma imagem Ela é capaz de transformar a imagem de um texto em arquivos editáveis de texto ROSEBROCK 2017 Graças a comunidade de programadores essa biblioteca foi modificada permitindo o funcionamento da mesma em programação Python Por tal motivo o nome desta biblioteca para a linguagem Python tornouse PyTesseract 3 METODOLOGIA Visando uma boa organização das tarefas o projeto foi separado em etapas que podem ser observadas abaixo Estudo das placas esta foi uma das principais fases do projeto onde centrouse no estudo das placas Notouse que as placas possuem grande ruído principalmente aquelas que possuíam fundo refletivo Foi nesta etapa que foi constatado que a fonte utilizada era a chamada Mandatory Criação de um HaarCascade como não há um haarcascade para placas nacionais deu se como necessário a criação do primeiro HaarCascade que tem como objetivo a identificação das placas Integração das placas com a visão computacional essa etapa teve como o objetivo tirar os ruídos das imagens provindas da câmera e deixar apenas as letras e os números em evidência Um exemplo desse processo pode ser visto nas imagens 4 e 5 Estudo da biblioteca PyTesseract Criação de um dicionário especialmente direcionado a leitura das placas já que não há nada na internet que atende as necessidades do projeto Leitura da placa a última etapa do projeto é a integração da biblioteca do OpenCV com a biblioteca PyTesseract e seu dicionário destinado para a detecção de placas Integrálo a uma cancela o objetivo final do projeto é colocar o sistema de identificação de placas na cancela da entrada do Instituto Federal Catarinense Junto a essa etapa está a integração de som tornando o sistema amigável ao usuário A ideia atual é o sistema emitir um som com a mensagem Bem vindoa e o nome do usuário após a identificação Imagem 04 Placa sem filtro Fonte Os autores Imagem 05 Placa com filtro Fonte Os autores 31 FILTROS DO OPENCV Como já comentado as imagens de placas apresentam ruídos intensos que para um programa de identificação são extremamente prejudiciais à leitura Para uma correção utilizase a função Threshold que serve nesse caso como uma espécie de filtro intensificando o que é importante na imagem Nesta etapa do código também é realizado a parte do corte da placa separando as duas partes escritas da placa os caracteres da cidade e os da identificação Assim o código consegue ler as informações separadamente diminuindo as chances de erro na leitura O código de filtragem cortando o nome da cidade na placa pode ser visto na tabela 01 Tabela 01 def edicãoplacaimg2 img cv2cvtColorimg2 cv2COLORBGR2GRAY imgcortealtalt intimgshape0 033 imgcortealtbaix intimgshape0 087 imgcorteladdir intimgshape1 007 imgcorteladesq intimgshape1 097 recorte imgfiguraimgcortealtaltimgcortealtbaix imgcorteladdirimgcorteladesq suave cv2GaussianBlurrecorte 3 3 10 T mahotasthresholdingotsusuave temp recortecopy temptemp T 255 temptemp 255 0 temp cv2bitwisenottemp blurmediana cv2medianBlurtemp 13 blur cv2blurblurmediana 9 21 cv2imwritePlaca filtradajpg blur return blur 33 CRIAÇÃO DO HAARCASCADE Como já comentado há a necessidade de criação de um HaarCascade destinado às placas nacionais de identificação de veículos As etapas deste processo podem ser observadas abaixo Coleta de imagens positivas para a obtenção de placas positivas para a criação haar cascade foi necessário a construção de uma biblioteca com 200 imagens Imagens negativas as imagens negativas não podem conter uma placa Criação do haarcascade Necessário para o padrão de placas brasileiro Figura 06 Uma das etapas da criação do haarcascade para as placas de veículos Fonte Os autores 34 CRIAÇÃO DO DICIONÁRIO As placas nacionais são escritas pela fonte Mandatory como já mencionado anteriormente Infelizmente não há nenhum dicionário do PyTesseract destinado à leitura de tais caracteres Para isso utilizouse programas externos à biblioteca criados pela comunidade Os programas utilizados foram 341 JTESSBOXEDITOR Este é responsável por salvar os algoritmos de cada caractere em um arquivo TIFF A primeira etapa deste processo é colocar os caracteres em um arquivo txt para depois importálo para o programa O programa abre esse arquivo lê cada caractere e salva suas coordenadas para mais tarde realizar a localização dos mesmos em uma imagem Esse processo pode ser visto na imagem 06 Figura 06 Programa JTessBoxEditor em funcionamento Fonte Os autores Para a realização deste projeto utilizouse apenas os caracteres do alfabeto os números de 0 e 9 e o hífen pois são apenas estes caracteres que estão presentes em uma placa de carro 342 SERAK TESSERACT TRAINER Este é responsável por unir todos os arquivos TIFF necessários em um arquivo traineddata formato padrão do PyTesseract Este programa também foi criado pela comunidade possuindo seu código aberto a todos Seu nome devese ao seu criador Serak Shiferaw Sua função é transformar o arquivo criado pelo jTessBoxEditor em um arquivo traineddata para a biblioteca do PyTesseract O funcionamento do programa pode ser visto na imagem 07 Figura 07 Programa Serak Tesseract Trainer em funcionamento Fonte Os autores Este programa também permite colocar padrões de resultados permitindo que o programa sempre tente esses padrões nas imagens As placas brasileiras utilizam um padrão de 3 letras um hífen e 4 números ABCXXXX Para isso criouse um código básico em Python responsável pela criação randômica de milhares placas para que o programa sempre tente procurar resultados parecidos com alguma dessas placas Tal código pode ser visto na tabela 02 abaixo e o resultado de compilação na imagem 08 Tabela 02 from random import letras ABCDEFGHIJKLMNOPQ RSTUVWXYZ num 0 1 2 3 45 6 7 8 9 a 0 whilea0 x randint 025 y randint 025 z randint 025 a randint 0 9 b randint 0 9 c randint 0 9 d randint 0 9 res letrasx letrasy letrasz numa numb numc numd printres a1 Figura 08 Algumas placas randômicas criadas pelo programa Fonte Os autores Por fim o programa cria o arquivo traineddata com todas essas informações já citadas permitindo assim a leitura das placas 4 RESULTADOS Nos primeiros testes notouse um problema de identificação pois as letras I e O são iguais aos números 1 e 0 respectivamente Por tal motivo o programa ao invés de identificar a placa como PLA0000 identificava como PLAOOOO Para solucionar tal problema foi preciso dividir a string em duas partes parte com letras e a parte com números A partir é só colocar no código algumas linhas de substituição de caracteres O resultado de tal compilação pode ser visto na imagem 10 Figura 09 Placa de carro Fonte Ig 2017 Figura 10 Resultado da compilação Fonte Os autores Com a leitura de caracteres funcionando corretamente testouse a identificação de placas em uma imagem E o processo deuse de maneira bem satisfatória pois conseguiu identificar de maneira correta a placa na imagem em 9354 dos casos para um conjunto de 10 placas cadastradas utilizandose 50 tentativas de identificação Figura 11 Observase na esquerda o software identificando a placa no vídeo e à direita o resultado da leitura dos caracteres Fonte Os autores O sistrema não possiu uma boa performance apenas quando a placa esta em movimento pois no momento que ela se move os caracteres ficam borrados tornandoos naquele espaço pequeno de tempo incompreensíveis ou semelhantes a outros O código final encontrase na tabela 03 deste artigo Tabela 03 import os cv2 mahotas pytesseract time from PIL import Image def edicãoplacaimg2 img cv2cvtColorimg2 cv2COLORBGR2GRAY imgcortealtalt intimgshape0 033 imgcortealtbaix intimgshape0 087 imgcorteladdir intimgshape1 007 imgcorteladesq intimgshape1 097 recorte imgimgcortealtaltimgcortealtbaix imgcorteladdirimgcorteladesq cv2imshowrecorte recorte suave cv2GaussianBlurrecorte 3 3 10 T mahotasthresholdingotsusuave temp recortecopy temptemp T 255 temptemp 255 0 temp cv2bitwisenottemp blurmediana cv2medianBlurtemp 13 blur cv2blurblurmediana 9 21 cv2imwritePlaca filtradajpg blur return blur blur 0 camera cv2VideoCapture0 df cv2CascadeClassifierplacasoriginalxml placaescrita 0 while True sucesso frame cameraread if not sucesso final do vídeo break imgPB cv2cvtColorframe cv2COLORBGR2GRAY placas dfdetectMultiScaleimgPB scaleFactor102 minNeighbors10 minSize6060flagscv2CASCADESCALEIMAGE imgPBtemp imgPBcopy imgC frame cv2imshowEncontrando placas frame if b 0 for x y w h in placas a a 1 placa frameyy h xx w cv2rectangleframe x y x w y h 0 255 255 2 cv2imwriteimagemframejpg frame edicãoplacaplaca caracs blur caracs pytesseractimagetostringImageopenPlaca filtradajpg langamh caracs caracsreplace caracs caracsreplace letras caracs3 num caracs3 num numreplace letras letrasreplace num numreplaceO 0 letras letrasreplace0 O num numreplaceI 1 letras letrasreplace1 I num numreplaceG 6 letras letrasreplace6 G num numreplaceB 8 letras letrasreplace8 B num numreplaceT 1 letras letrasreplace1 T num numreplaceZ 2 letras letrasreplace2 Z num numreplaceH 11 letras letrasreplace11 H num numreplaceS 5 letras letrasreplace5 S placaescrita letras num print placaescrita8 if cv2waitKey1 0xFF ords break camerarelease cv2destroyAllWindows 5 CONSIDERAÇÕES FINAIS O código atualmente é capaz de identificar os caracteres estando estes presentes em um vídeo em tempo real Vale ressaltar que o mesmo não identifica a cidade e estado pois não foi desenvolvido ainda para tais fins Além disso pode ser utilizado como base para vários sistemas de detecção de padrões de placas ou de leitura de caracteres 6 TRABALHOS FUTUROS Sugerese para trabalhos futuros a otimização do código para utilização em Raspberry Pi 7 AGRADECIMENTOS Agradeçemos o Instituto Federal Catarinense campus Luzerna por permitir a realização deste trabalho através do fomento a pesquisa via edital 122016 8 REFERÊNCIAS BIBLIOGRÁFICAS CARRO ANTIGO Comp Década de 10 Disponível em httpwwwcarroantigocomportuguesconteudofotos10htm Acesso em 20 abr 2017 CRIE SEU CARRO Org Placas coloridas 2016 Disponível em httpwwwcrieseucarronetplacascoloridas Acesso em 01 maio 2017 IG Carros terão de trocar placas no Estado de São Paulo Disponível em httpcarrosigcombrfotoscarrosteraodetrocarplacasnoestadodesaopaulo3362html Acesso em 01 maio 2017 ITARO Comp Conheça os significados das placas de carro 2016 Disponível em httpswwwitarocombrblog201602conhecaosignificadodasplacasdecarro Acesso em 20 abr 2017 LABAKI Josué Introdução a Python Módulo A Disponível em httpwwwdccufrjbrfabiommab225pythonbasicopdf Acesso em 20 abr 2017 MARENGONI Maurício STRINGHINI Denise Tutorial Introdução à Visão Computacional usando OpenCV 2009 Disponível em httpsai2s2 pdfss3amazonawscoma0a6301a239519f117ca6c0398d5230ff15c67ffpdf Acesso em 20 abr 2017 NGUYEN Quan Comp JTessBoxEditor Disponível em httpsgithubcomnguyenqjTessBoxEditor Acesso em 23 abr 2017 OFICIAL BLOG Org Consulte se a placa é de veículo roubado furtado ou clonado 2014 Disponível em httpwwwoficialblogorg201404consultasituacaodeveiculopela placahtml Acesso em 01 maio 2017 OPENCV About Disponível em httpopencvorgabouthtml Acesso em 20 de jul 2017 PYTHON Disponível em httpswwwpythonorg Acesso em 01 de jul 2017 RASPBERRY PI Org RASPBERRY PI 2 ON SALE NOW AT 35 Disponível em httpswwwraspberrypiorgblograspberrypi2onsale Acesso em 20 abr 2017 REZAEI Mahdi Creating a Cascade of HaarLike Classifiers Step by Step Disponível em httpswwwcsaucklandacnzmrezaeiTutorialsCreatingaCascadeofHaar LikeClassifiersStepbySteppdf Acesso em 25 jun 2017 RICHARDSON Matt WALLACE Shawn Primeiros Passos com o Raspberry Pi 2013 Disponível em httpwwwmartinsfontespaulistacombranexosprodutoscapitulos704370pdf Acesso em 20 abr 2017 ROSEBROCK Adrian Using Tesseract OCR with Python 2017 Disponível em httpwwwpyimagesearchcom20170710usingtesseractocrpython Acesso em 01 jun 2017 SHIFERAW Serak Comp Serak Tesseract Trainer for Tesseract 302 Disponível em httpsgithubcomserakseraktesseracttrainer Acesso em 23 abr 2017