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:
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:
| Argumento | Tipo | Padrão | Descrição |
|---|---|---|---|
model | str | None | Caminho para um arquivo de modelo Ultralytics YOLO. |
recognizer | str ou Callable | 'paddleocr' | Backend de reconhecimento de texto ou função chamável que aceita um recorte BGR e devolve (text, confidence). |
line_width | int | 2 | Espessura das linhas das caixas, dos pontos-chave e das contagens desenhados pela solução. |
verbose | bool | True | Ativa 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:
| Argumento | Tipo | Padrão | Descrição |
|---|---|---|---|
show | bool | False | Se 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_conf | bool | True | Exibe 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_labels | bool | True | Exibe 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#
- Detetar texto: YOLO26 produz caixas alinhadas aos eixos, caixas orientadas ou polígonos de segmentação.
- 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.
- Reconhecer texto: PaddleOCR processa todos os recortes em lotes de 16. Os reconhecedores personalizados recebem um recorte de cada vez.
- 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 tupla | Tipo aceite | Descrição |
|---|---|---|
text | str | Texto descodificado deste recorte. Devolve "" se não for reconhecido nenhum texto. |
confidence | float, int ou numpy.floating | Confianç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:
| Chave | Tipo | Descrição |
|---|---|---|
text | str | Texto reconhecido. |
confidence | float | Confiança de reconhecimento, mantida separada da confiança de deteção. |
detection_confidence | float | Confiança do detetor YOLO. |
detection_index | int | Índice da deteção de origem antes da ordenação pela ordem de leitura. |
polygon | list[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#
| Componente | Obrigatório | Função | Licença |
|---|---|---|---|
| Ultralytics | Sim | Deteção YOLO, geometria dos recortes e coordenação dos resultados | AGPL-3.0 |
| PaddlePaddle | Apenas para recognizer="paddleocr" | Ambiente de execução do reconhecimento | Apache-2.0 |
| PaddleOCR 3.x | Apenas para recognizer="paddleocr" | Modelos de reconhecimento de linhas de texto e adaptador de inferência | Apache-2.0 |
| Função chamável personalizada | Não | Integração de reconhecimento pertencente ao utilizador | Definido 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
recognizere 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.
Comentários
Faz uma pergunta, partilha os teus resultados ou ajuda alguém.