Ultralytics YOLO27: Inscreve-te na lista de espera.
Começar

OCR de texto em cenas com Ultralytics YOLO26

O que é OCR de texto em cenas?#

O reconhecimento ótico de caracteres (OCR) deteta e lê texto em imagens. A solução de OCR combina um detetor de texto Ultralytics YOLO26 com um backend de reconhecimento de texto. Suporta caixas de deteção alinhadas aos eixos, caixas orientadas (OBB) e polígonos de segmentação e, em seguida, devolve o texto reconhecido pela ordem de leitura.

A deteção e o reconhecimento continuam a ser componentes separados, por isso podes combinar o teu detetor de texto em cenas com PaddleOCR ou com o teu próprio modelo de reconhecimento.

Porquê usar OCR de texto em cenas?#

  • Geometria de texto flexível: usa modelos de deteção, OBB ou segmentação para texto horizontal, rodado ou irregular.
  • Reconhecimento intercambiável: executa PaddleOCR sem código de integração adicional ou passa uma função chamável para outro modelo.
  • Saída estruturada: acede ao texto reconhecido, às confianças de reconhecimento e deteção, à geometria de origem e a uma imagem anotada a partir de um único objeto de resultados.

Executar OCR de texto em cenas com YOLO26#

PaddleOCR é opcional e é carregado quando OCR é criado com recognizer="paddleocr", instalando PaddleOCR 3.x e a compilação de CPU do PaddlePaddle, caso ainda não estejam instalados. Para reconhecimento na GPU, instala primeiro uma compilação compatível de paddlepaddle-gpu; não são adicionados pacotes de OCR às dependências base de Ultralytics.

Passa uma imagem e um detetor de texto à solução OCR. O resultado contém a imagem anotada e o texto reconhecido:

OCR de texto em cenas com Ultralytics YOLO26
yolo solutions ocr model="scene-text-obb.pt" source="path/to/video.mp4" recognizer="paddleocr"

Pontos de controlo YOLO26-Text#

A família pública YOLO26-Text disponibiliza pontos de controlo OBB n, s, m, l e x. Define ULTRALYTICS_API_KEY com a tua chave de API da Ultralytics Platform e, em seguida, carrega um ponto de controlo através do URI da Platform:

export ULTRALYTICS_API_KEY="your-api-key"
ocr = solutions.OCR(model="ul://ultralytics-yolo/yolo26-text/yolo26n-text", recognizer="paddleocr")
result = ocr(im0)

Substitui yolo26n-text por yolo26s-text, yolo26m-text, yolo26l-text ou yolo26x-text para usar um modelo maior.

Argumentos de OCR#

Aqui está uma tabela com os argumentos de OCR:

ArgumentoTipoPadrãoDescrição
modelstrNoneCaminho para um arquivo de modelo Ultralytics YOLO.
recognizerstr ou Callable'paddleocr'Backend de reconhecimento de texto ou função chamável que aceita um recorte BGR e devolve (text, confidence).
line_widthint2Espessura das linhas das caixas, dos pontos-chave e das contagens desenhados pela solução.
verboseboolTrueAtiva o registro por quadro da solução, com o formato da entrada, as contagens por classe e a velocidade de processamento. A chamada de rastreamento em si é sempre silenciosa.

Além disso, há suporte para as seguintes configurações de visualização:

ArgumentoTipoPadrãoDescrição
showboolFalseSe True, exibe as imagens ou os vídeos anotados em uma janela. Útil para obter feedback visual imediato durante o desenvolvimento ou os testes.
show_confboolTrueExibe a pontuação de confiança de cada detecção junto ao rótulo. Mostra o grau de certeza do modelo em cada detecção.
show_labelsboolTrueExibe os rótulos de cada detecção na saída visual. Permite identificar imediatamente os objetos detectados.

Como funciona o OCR de texto em cenas#

  1. Detetar texto: YOLO26 produz caixas alinhadas aos eixos, caixas orientadas ou polígonos de segmentação.
  2. Criar recortes para reconhecimento: as caixas são ajustadas aos limites da imagem. As OBB são retificadas por transformação afim ao longo da aresta que se estende mais da esquerda para a direita, para que as caixas quase quadradas permaneçam direitas e as linhas de texto inclinadas fiquem na horizontal, na direção de leitura. No caso dos polígonos de segmentação, o retângulo rodado de área mínima é retificado e o polígono original é mantido. Os recortes com uma altura pelo menos 1,5× superior à largura são rodados 90° no sentido anti-horário, tal como no PaddleOCR.
  3. Reconhecer texto: PaddleOCR processa todos os recortes em lotes de 16. Os reconhecedores personalizados recebem um recorte de cada vez.
  4. Ordenar e apresentar resultados: o texto é agrupado em linhas horizontais e ordenado de cima para baixo e da esquerda para a direita. A visualização usa um tipo de letra Unicode para texto não ASCII, como o chinês.

As coordenadas referem-se sempre à imagem original, não à entrada do detetor nem ao recorte de reconhecimento.

Usar um reconhecedor personalizado#

Passa uma função chamável para integrar outro modelo de reconhecimento sem alterar o fluxo de deteção, geometria ou ordenação. A função chamável é executada uma vez para cada recorte BGR numpy.ndarray não vazio. Devolve uma tupla (text, confidence) por chamada, não uma lista de resultados de lotes:

Elemento da tuplaTipo aceiteDescrição
textstrTexto descodificado deste recorte. Devolve "" se não for reconhecido nenhum texto.
confidencefloat, int ou numpy.floatingConfiança de reconhecimento numérica, convertida para float pela solução.
def recognize(crop):
    # Executa o teu modelo de reconhecimento no recorte BGR e descodifica aqui a respetiva saída.
    return "example", 0.95

ocr = solutions.OCR(model="custom-text.pt", recognizer=recognize)
result = ocr(im0)

Nomes de backend não suportados geram um erro ValueError. Quando não é detetado texto, result.texts fica vazio e o reconhecedor não é chamado.

Resultados de OCR#

Cada chamada devolve um objeto SolutionResults. Usa result.plot_im para obter a imagem anotada e result.texts para obter registos numa ordem de leitura determinística:

ChaveTipoDescrição
textstrTexto reconhecido.
confidencefloatConfiança de reconhecimento, mantida separada da confiança de deteção.
detection_confidencefloatConfiança do detetor YOLO.
detection_indexintÍndice da deteção de origem antes da ordenação pela ordem de leitura.
polygonlist[list[float]]Polígono na imagem original: quatro cantos para deteções de caixas e OBB, ou o contorno da máscara.

Dependências e licenças#

ComponenteObrigatórioFunçãoLicença
UltralyticsSimDeteção YOLO, geometria dos recortes e coordenação dos resultadosAGPL-3.0
PaddlePaddleApenas para recognizer="paddleocr"Ambiente de execução do reconhecimentoApache-2.0
PaddleOCR 3.xApenas para recognizer="paddleocr"Modelos de reconhecimento de linhas de texto e adaptador de inferênciaApache-2.0
Função chamável personalizadaNãoIntegração de reconhecimento pertencente ao utilizadorDefinido pelo backend

PaddleOCR pode transferir pesos de reconhecimento na primeira utilização. Consulta o cartão do modelo selecionado e os termos de redistribuição antes de empacotar ou implementar esses artefactos. As licenças dos pontos de controlo personalizados são independentes.

Perguntas frequentes#

  • Sim. Passa uma função chamável como recognizer e devolve (text, confidence) para cada recorte BGR. Consulta Usar um reconhecedor personalizado para ver o contrato de entrada e saída.

  • Não. O OCR trata cada imagem de entrada de forma independente, sem IDs de rastreamento nem reconhecimento em cache. Processa cada fotograma de vídeo como uma entrada separada quando for necessário executar OCR fotograma a fotograma.

  • Podes exportar o detetor YOLO com o modo de exportação normal, mas PaddleOCR ou um reconhecedor personalizado não é incorporado no artefacto ONNX, TensorRT ou noutro artefacto do detetor. Implementa o detetor exportado e o ambiente de execução do reconhecimento como componentes separados ou mantém esta camada de composição Python.

Colaboradores

Comentários

Faz uma pergunta, partilha os teus resultados ou ajuda alguém.