Leitores como você ajudam a apoiar o MUO. Quando você faz uma compra usando links em nosso site, podemos ganhar uma comissão de afiliado. Consulte Mais informação.

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

instagram viewer
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.
    pip instalar Pytesseract
    A biblioteca pytesseract depende do Tesseract OCR mecanismo de reconhecimento de caracteres.

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:

  1. Abra qualquer navegador baseado no Chrome
  2. Faça o download do Tesseract OCR configurar
  3. 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 = 7

para 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.