VITA - Visually Impaired Transit Assistant

O Desenvolvimento do OCR para Paragens de Autocarros

11/06/2025 - Post feito por Alexandre Escudeiro

Prótotipo inicial com OpenCV e TesseractOCR

A jornada de desenvolvimento do algoritmo de reconhecimento de caracteres dos letreiros dos autocarros começou em Abril deste mesmo ano, com uma pesquisa profunda sobre as ferramentas disponíveis online para nos ajudarem a solucionar o nosso problema. Após essa pesquisa decidimos utilizar dois softwares “open source” chamados OpenCV e Tesseract OCR.

Assim, arrancámos com um pequeno teste a uma imagem de um sinal de STOP e com acesso ao comando cv2.imread(). Utilizamos a função de leitura estática desta mesma imagem, de seguida aplicamos um pré-processamento simples, com conversão da imagem para cinzento e um filtro com threshold adaptativo, de forma a melhorar a definição da imagem. Por fim, aplicámos o comando pytesseract.image_to_string para extrair o texto bruto da imagem.

Embora os resultados tenham sido bons em imagens muito controladas, rapidamente percebemos que iríamos ter de implementar uma solução muito mais complexa do que a que tínhamos. Encontrámos ruído, ângulos inclinados e placas parcialmente visíveis, que nos levaram a ter uma taxa de sucesso de cerca de 50% das imagens.


EasyOCR e Filtros

Para aumentar a robustez do programa integrámos outro algoritmo de OCR chamado EasyOCR para tirar partido de reconhecimento de texto em layouts mais complexos, sendo que este algoritmo já vem pré-treinado para encontrar texto em ângulos mais difíceis ou imagens com menor resolução.

Aplicámos também filtros morfológicos e de nitidez através do comando cv2.filter2D para reduzir o ruído de fundo, mas estes filtros exigiam calibragem individual para cada uma das imagens que queríamos ler.

E, por fim, introduzimos um filtro de confiança para ler apenas imagens com um nível de confiança superior a 60%, para descartar fragmentos sem importância. Assim conseguimos aumentar a nossa taxa de sucesso para cerca de 60% das imagens lidas.

Teste com EasyOCR

Transição para YOLOv8 e OCR Híbrido

Perante a persistente dificuldade em aplicar o OCR à região de interesse (ROI) correta testámos uma abordagem diferente da anterior: a de utilizar um modelo de reconhecimento de imagens treinado com ajuda de “machine learning” através de uma ferramenta da Ultralytics. Treinámos o nosso algoritmo para detetar rapidamente a posição dos letreiros dos autocarros de maneira a podermos fazer posteriormente o crop dessa zona dos letreiros e aplicar o OCR apenas a essa zona e assim eliminar a maior parte do ruído que encontrávamos.

Assim, conseguimos filtrar rapidamente todos os frames que não estavam na nossa “ROI” e fazer com que só os crops importantes passem pelo OCR, passando assim a processar cerca de 3 frames por segundo no RaspberryPi e com uma precisão de leitura de cerca de 90%.

Resultados do modelo de treino dos autocarros

Correção com GTFS

Com acesso aos ficheiros GTFS das operadoras locais, neste caso Carris e Carris Metropolitana, disponíveis online, tivemos acesso a toda a informação sobre as carreiras, os seus horários e as paragens disponíveis na área metropolitana de Lisboa.

Carregámos ambos os ficheiros num DataFrame único com todas as rotas e viagens, de seguida expandimos os destinos do tipo A – B em A e B, de forma a ficar com linhas do género Número + Direção para cada sentido das carreiras.

Implementámos ainda um “fuzzy-match”, uma ferramenta que faz uma comparação entre dados, que aplicámos ao texto que resulta do processamento do OCR e tentámos encontrar uma correspondência nos ficheiros GTFS. Para obter um menor tempo de busca adicionámos um passo extra em que é pedido ao técnico que está a instalar para fornecer o ID correspondente à paragem onde está, limitando o algoritmo a procurar apenas carreiras que estão previstas para essa mesma paragem.

Sempre que a similaridade exceda 0.6 (ou seja 60%), substituímos o texto bruto do OCR pela versão do GTFS, garantindo assim consistência nos resultados obtidos pelo nosso programa.

Filtro GTFS para carreiras específicas

Resultados finais

Conseguimos assim obter um sistema autónomo que, em tempo real, deteta, lê, corrige e envia para o exterior via áudio, toda a informação sobre os autocarros, facilitando assim o acesso a estes transportes públicos por parte de pessoas invisuais ou com baixa visão.

Exemplo de output final
← Voltar ao Blog