(DEMO) Reconhecimento de Placas de Veículos utilizando PYTHON & OPENCV
ฝัง
- เผยแพร่เมื่อ 13 ต.ค. 2024
- Modulo de reconhecimento de Placas de Veículos utilizando Python & OpenCV, desenvolvido como trabalho de conclusão de curso (2017)
DEMONSTRATIVO
OpencvPython
Algoritmos de PDI (Processamento Digital de Imagens) com Tesseract-OCR & Opencv em Python, para reconhecimento de identificação de Placas em Imagens/Vídeos de veículos.
Projeto disponivel na IDE PyCharm
Bibliotecas: OpenCV - docs.opencv.or... & Tesseract-OCR - github.com/mad...
Video de demonstração : • (DEMO) Reconhecimento ...
Artigo : drive.google.c...
Github : github.com/ayu...
O Vídeo acima é apenas a demonstração do Script "Reconhecimento de Placas através de Retângulo", no site acima está disponível o link para o projeto no GitHub. Não se prendam apenas em copiar e colar o código base,, foi disponibilizado também o livro em PDF "Python e OpenCV" na qual foi retirado o conteúdo necessário,
Leiam sobre o funcionamento da funções e como ela se comporta no contexto, o que cada passo e comentário quer dizer, que com o básico de PDI qualquer pessoa conseguirá utilizar o Reconhecimento de Placas por Retângulos.
Boa Sorte!
Sobre o scripts disponibilizados no GitHub, na demonstração é utilizado apenas o EncontrarPlacaHD.py leiam sobre Tesseract-OCR o script apenas faz a "Detecção" das placas, está no artigo! Boa Sorte!
(Leiam o livro disponibilizado e não apenas copiem e colem")
Estou trabalhando com detecção de imagens e o seu trabalho está me ajudando muito! Conforme você falou, não apenas copiem, mas estudem e leiam para entender. Trabalho perfeito.
Porque o algoritmo entende um U ao invés de um O? Tipo, o dá pra entender que o desenho do U está contido no desenho do O, mas nao deveria acontecer esse tipo de erro... Vc conseguiu concertar?
Qual o tempo médio de resposta do reconhecimento dos caracteres?
Links atualizados para o Código e Artigo (y)
Alexandre. Você poderia disponibiizar o link dos livros aqui? O seu site está fora do ar.
Alexandre teria como você disponibilizar o conteúdo do seu trabalho pois o site que você indicou não esta no ar, obrigado.
Hello! Can you do some examples using the camera? I mean, detect some numbers using camera and python?
Muito bom! Parabéns!!
alguém já fez uso do ecognition para esta finalidade?
hola amigo disculpa tendras todo tu proyecto en git no sale todo como en este video, faltan archivos .py
Alexandre, seu site não está no ar, vc poderia disponibilizar seu artigo?
Fiz uma alteração passando o parametro (0), ele identifica a camera em tempo real. Eu estou usando a webcam do computador.
O video fica ligado intermitente, diferente do do video gravado que você colocou no teste (Ele da o play no video), e fecha os frame (Embora mostra o resultado da placa do uno errado) porém finaliza.
No video com source (0), ele não fecha fica os frame aberto sem fechar, ele até foca a placa, mas estou usando papel na simulação.
Ele identifica a placa marcando o quadrado referente onde fica a placa porém não fecha e não da nenhum resultado.
Dai eu não sei se foi pq alterei o fonte
onde passava a area eu passei o frame porque estava dando erro alterando video = cv2.VideoCapture(0)
#######################################################
# Detecção de Placas atraves de contornos HD #
# by AY7 #
#######################################################
import pytesseract
import cv2
def desenhaContornos(contornos, imagem):
for c in contornos:
# perimetro do contorno, verifica se o contorno é fechado
perimetro = cv2.arcLength(c, True)
if perimetro > 120:
# aproxima os contornos da forma correspondente
approx = cv2.approxPolyDP(c, 0.03 * perimetro, True)
# verifica se é um quadrado ou retangulo de acordo com a qtd de vertices
if len(approx) == 4:
# Contorna a placa atraves dos contornos encontrados
(x, y, lar, alt) = cv2.boundingRect(c)
cv2.rectangle(imagem, (x, y), (x + lar, y + alt), (0, 255, 0), 2)
# segmenta a placa da imagem
roi = imagem[y:y + alt, x:x + lar]
cv2.imwrite("output/roi.png", roi)
def buscaRetanguloPlaca(source):
# Captura ou Video
video = cv2.VideoCapture(0)
while video.isOpened():
ret, frame = video.read()
if (ret == False):
break
# area de localização u 720p
area = frame[500:, 300:800]
# area de localização 480p
# area = frame[350:, 220:500]
# escala de cinza
img_result = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# limiarização
ret, img_result = cv2.threshold(img_result, 90, 255, cv2.THRESH_BINARY)
# desfoque
img_result = cv2.GaussianBlur(img_result, (5, 5), 0)
# lista os contornos
contornos, hier = cv2.findContours(img_result, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
# limite horizontal
cv2.line(frame, (0, 500), (1280, 500), (0, 0, 255), 1)
# limite vertical 1
cv2.line(frame, (300, 0), (300, 720), (0, 0, 255), 1)
# limite vertical 2
cv2.line(frame, (800, 0), (800, 720), (0, 0, 255), 1)
cv2.imshow('FRAME', frame)
desenhaContornos(contornos, frame)
cv2.imshow('RES', frame)
if cv2.waitKey(1) & 0xff == ord('q'):
break
video.release()
preProcessamentoRoi()
cv2.destroyAllWindows()
def preProcessamentoRoi():
img_roi = cv2.imread("output/roi.png")
# cv2.imshow("ENTRADA", img_roi)
if img_roi is None:
return
# redmensiona a imagem da placa em 4x
img = cv2.resize(img_roi, None, fx=4, fy=4, interpolation=cv2.INTER_CUBIC)
# Converte para escala de cinza
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# cv2.imshow("Escala Cinza", img)
# Binariza imagem
_, img = cv2.threshold(img, 70, 255, cv2.THRESH_BINARY)
cv2.imshow("Limiar", img)
# Desfoque na Imagem
img = cv2.GaussianBlur(img, (5, 5), 0)
# cv2.imshow("Desfoque", img)
# Aplica reconhecimento OCR no ROI com o Tesseract
cv2.imwrite("output/roi-ocr.png", img)
return img
def reconhecimentoOCR():
img_roi_ocr = cv2.imread("output/roi-ocr.png")
if img_roi_ocr is None:
return
config = r'-c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 --psm 6'
saida = pytesseract.image_to_string(img_roi_ocr, lang='eng', config=config)
print(saida)
return saida
if __name__ == "__main__":
source = "resource/video720p.mkv"
buscaRetanguloPlaca(source)
preProcessamentoRoi()
reconhecimentoOCR()
Gostaria de poder ver seu artigo e código, estou tentando desenvolver um projeto que abrange o mesmo assunto, mas sua pagina está fora do ar. Teria como disponibilizar novamente?
Links atualizado na descricao
@@AlexandreH7 Muito obrigado pelo retorno!
Tem como disponibilizar o haarcascade ?
Qual câmera deve ser usada ?
Nesse caso aí uma WebCam 720p... Enquanto maior a resolução maior o processamento e mais demorado o reconhecimento
poderia disponibilizar o codigo estou fazendo um projeto que abrange esta area
junior jr verifica meu Git/Hub, Link na minha Page: alexandrehenrique.esy.es/
Eu estou tentando desenvolver um projeto no mesmo sentido e estou com muitas duvidas, alguem poderia me ajudar?
Luana Ketlin Procura sobre OpenCV e Tesseract, tem bastante conteúdo incluisive em Python/Java/C++
Luana Ketlin Pode me mandar um e-mail caso precise saber sobre algo!
Olá Alexandre, muito legal seu projeto, Parabéns!!
Estou tentando compilar o projeto, (EncontrarPlacaHD) mas estou tendo algumas dificuldades, poderia me ajudar?
Eu criei o caminho no diretório C: /Tesseract-OCR/saidas/roi, mas não coloquei nada neste, e me aparece esse erro:
File "C:/Users/ONLY ON LUCAS/Desktop/OpencvPython-master/PDIPython/EncontrarPlacaHD.py", line 116, in
reconhecimentoOCR("C:/Tesseract-OCR/saidas/roi")
File "C:/Users/ONLY ON LUCAS/Desktop/OpencvPython-master/PDIPython/EncontrarPlacaHD.py", line 40, in reconhecimentoOCR
img = cv2.resize(entrada, None, fx=4, fy=4, interpolation=cv2.INTER_CUBIC)
cv2.error: C:\projects\opencv-python\opencv\modules\imgproc\src
esize.cpp:4044: error: (-215) ssize.width > 0 && ssize.height > 0 in function cv::resize
Lucas Rezende amigo dá uma olhada nas bibliotecas se foram importadas corretamente, pra mais informações verifica o Artigo completo sobre o projeto no meu site alexandrehenrique.esy.es/
Alexandre, verifiquei as bibliotecas!! Não há nenhum erro nelas, quando o projeto é executado.
O erro que ocorre, é na linha 116 no projeto EncontrarPlacaHD, nas pastas que você criou: /Tesseract-OCR/saidas/roi.
Há algo nessas pastas, ou em uma delas? Pois eu simplesmente as criei e não descompactei nenhum arquivo em nenhuma delas.
estou com um projeto parecido, poderia me fornecer o codigo fonte?
Felipe Lima de Oliveira alexandrehenrique.esy.es/ e vai no meu Git/Hub
Vou procurar, muito obrigado!
Olá Felipe, você conseguiu rodar o projeto?
Oi, tudo bom? Não consegui, baixei os arquivos necessários, comecei a ler uma apostila que ele indicou no link acima que vai falando meio que um passo a passo para instalação e rodar o programa, mas mesmo assim não rodou.
Tudo Ótimo!!
Felipe, a apostila que você se refere que tem o passo a passo é a monografia? Pois não encontrei um passo a passo do que precisa para rodar o programa(instalar), etc.
Estou tentando executar o arquivo EncontrarPlacaHD, mas ele dá erro na linha onde tem esse caminho
C: /Tesseract-OCR/saidas/roi
Neste caminho, no diretório C:, vc criou as pastas subsequentes? Ou seja, Tesseract-OCR, saidas e roi?O que vc colou em cada uma delas? Descompactou algo? colou algum arquivo nelas?