A tecnologia de detecção e reconhecimento de placas de veículos tem muitas aplicações. Pode ser usado em sistemas viários, estacionamentos sem ingresso, residências de controle de acesso de veículos e muito mais. Essa tecnologia combina visão computacional e Inteligência Artificial.
Você usará o Python para criar um programa de detecção e reconhecimento de placas de veículos. O programa pegará a imagem de entrada, processará para detectar e reconhecer a placa do carro e, finalmente, exibirá os caracteres da placa do carro como saída.
Configurando o ambiente Python
Para seguir confortavelmente com este tutorial, você precisa estar familiarizado com os fundamentos do Python. Isso começa com a configuração do ambiente do programa.
Antes de começar a codificar, você precisa instalar algumas bibliotecas em seu ambiente. Abra qualquer IDE Python e crie um arquivo Python. Execute cada comando no terminal para instalar a respectiva biblioteca. Você deve ter uma prévia
instalação do Python PIP em seu computador.-
OpenCV-PythonName: Você usará esta biblioteca para pré-processar a imagem de entrada e exibir várias imagens de saída.
pip instalar OpenCV-PythonName
-
imutils: Você usará esta biblioteca para recortar a imagem de entrada original na largura desejada.
pip instalar imutils
-
Pytesseract: Você usará esta biblioteca para extrair os caracteres da placa e convertê-los em strings.
A biblioteca pytesseract depende do Tesseract OCR mecanismo de reconhecimento de caracteres.pip instalar Pytesseract
O que é Tesseract OCR e como instalá-lo em seu computador
O Tesseract OCR é um mecanismo que pode reconhecer os caracteres de um idioma. Você deve instalá-lo em seu computador antes de usar a biblioteca pytesseract. Para fazer isso:
- Abra qualquer navegador baseado no Chrome
- Faça o download do Tesseract OCR configurar
- Execute a instalação e instale-a como qualquer outro programa
Tendo preparado o ambiente e instalado o tesseract OCR, você está pronto para codificar o programa.
1. Importando as Bibliotecas
Comece importando as bibliotecas que você instalou no ambiente. A importação das bibliotecas permite chamar e utilizar suas funções no projeto.
importar cv2
importar imutils
importar Pytesseract
Você precisa importar o OpenCV-PythonName biblioteca como cv2. Importe as outras bibliotecas usando os mesmos nomes usados para instalá-las.
2. Tomando a entrada
Em seguida, aponte pytesseract para o local onde o mecanismo Tesseract está instalado. Pegue a imagem do carro como entrada usando o cv2.imread função. Substitua o nome da imagem pelo nome da imagem que você está usando. Armazene a imagem na mesma pasta do seu projeto para facilitar as coisas.
pytesseract.pytesseract.tesseract_cmd = 'C:\\Arquivos de programas\\Tesseract-OCR\\tesseract.exe'
imagem_original = cv2.imread('image3.jpeg')
Você pode substituir a imagem de entrada a seguir pela que gostaria de usar.
3. Pré-processando a entrada
Redimensione a largura da imagem para 500 pixels. Em seguida, converta a imagem em tons de cinza como o função de detecção de borda sagaz só funciona com imagens em tons de cinza. Por fim, ligue para o filtro bilateral função para reduzir o ruído na imagem.
original_image = imutils.resize (original_image, largura=500 )
gray_image = cv2.cvtColor (original_image, cv2.COLOR_BGR2GRAY)
gray_image = cv2.bilateralFilter (gray_image, 11, 17, 17)
4. Detectando a placa de licença na entrada
Detectar a placa é o processo de determinar a parte do carro que contém os caracteres da placa.
Executando detecção de borda
Comece ligando para o cv2.Canny função que detectará automaticamente as bordas na imagem pré-processada.
edged_image = cv2.Canny (gray_image, 30, 200)
É a partir dessas arestas que encontraremos os contornos.
Encontrando os Contornos
Ligar para cv2.findContours função e passar uma cópia do imagem afiada. Esta função detectará os contornos. Desenhe os contornos detectados na imagem original usando o cv2.drawContours função. Por fim, imprima a imagem original com todos os contornos visíveis desenhados.
contornos, novo = cv2.findContours (edged_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
img1 = imagem_original.copy()
cv2.drawContours(img1, contornos, -1, (0, 255, 0), 3)
cv2.imshow("img1", img1)
O programa desenha distintamente todos os contornos que encontra na imagem do carro.
Depois de encontrar os contornos, você precisa classificá-los para identificar os melhores candidatos.
Classificando os contornos
Classifique os contornos com base na área mínima 30. Ignore os abaixo, pois é menos provável que sejam o contorno da placa do carro. Faça uma cópia da imagem original e desenhe o 30 melhores contornos na imagem. Finalmente, exiba a imagem.
contornos = classificados (contornos, chave = cv2.contourArea, reverse = Verdadeiro)[:30]
# armazena o contorno da placa
telaCnt = Nenhum
img2 = imagem_original.copy()
# desenha os 30 principais contornos
cv2.drawContours(img2, contornos, -1, (0, 255, 0), 3)
cv2.imshow("img2", img2)
Agora há menos contornos do que no início. Os únicos contornos desenhados são os aproximados para conter a placa do carro.
Finalmente, você precisa percorrer os contornos classificados e determinar qual deles é a matrícula.
Percorrendo os 30 principais contornos
Crie um loop for para percorrer os contornos. Procure o contorno com quatro cantos e determine seu perímetro e coordenadas. Armazene a imagem do contorno contendo a placa do carro. Por fim, desenhe o contorno da placa na imagem original e exiba-a.
contagem = 0
id x = 7para c em contornos:
# aproxima o contorno da placa
contorno_perímetro = cv2.arcLength (c, Verdadeiro)
aprox = cv2.approxPolyDP(c, 0.018 * contorno_perímetro, Verdadeiro)# Procure contornos com 4 cantos
selen(Aproximadamente)== 4:
telaCnt = aprox# encontre as coordenadas do contorno da placa
x, y, w, h = cv2.boundingRect (c)
new_img = original_image [ y: y + h, x: x + w]# armazena a nova imagem
cv2.imwrite('./'+str (idx)+'.png',new_img)
idx += 1
quebrar
# desenha o contorno da placa na imagem original
cv2.drawContours(imagem original, [screenCnt], -1, (0, 255, 0), 3)
cv2.imshow("placa de carro detectada", imagem original )
Após o loop, seu programa identificou o contorno que contém a placa do carro. Ele desenha apenas no contorno da placa de licença.
5. Reconhecendo a placa de licença detectada
Reconhecer a placa significa ler os caracteres na imagem recortada da placa. Carregue a imagem da placa que você armazenou anteriormente e exiba-a. Em seguida, ligue para o pytesseract.image_to_string função e passar a imagem da placa recortada. Esta função converte os caracteres da imagem em uma string.
# nome do arquivo da imagem da placa cortada
cropped_License_Plate = './7.png'
cv2.imshow("cortadolicençaplaca", cv2.eu estou lendo(cropped_License_Plate))
# converte os caracteres da placa do carro em string
text = pytesseract.image_to_string (cropped_License_Plate, lang='eng')
A placa cortada é mostrada abaixo. Os caracteres nele serão a saída que você imprimirá posteriormente na tela.
Tendo detectado e reconhecido a placa do carro, você está pronto para exibir a saída.
6. Exibindo a Saída
Esta é a etapa final. Você imprime o texto extraído na tela. Este texto contém os caracteres da placa do carro.
imprimir("A placa do carro é:", texto)
cv2.waitKey(0)
cv2.destroyAllWindows()
A saída esperada do programa deve ser semelhante à imagem abaixo:
O texto da placa pode ser visto no terminal.
Afie suas habilidades em Python
Detectar e reconhecer placas de carros em Python é um projeto interessante para se trabalhar. É desafiador, então deve ajudá-lo a aprender mais sobre Python.
Quando se trata de programação, a prática é fundamental para o domínio de uma linguagem. Para praticar suas habilidades, você precisa trabalhar em projetos interessantes.