Ultralytics YOLO27: Únete a la lista de espera.
Empezar

OCR de texto en escenas con Ultralytics YOLO26

¿Qué es el OCR de texto en escenas?#

El reconocimiento óptico de caracteres (OCR) detecta y lee texto en imágenes. La solución de OCR combina un detector de texto Ultralytics YOLO26 con un backend de reconocimiento de texto. Admite cuadros de detección alineados con los ejes, cuadros orientados (OBB) y polígonos de segmentación, y devuelve el texto reconocido en orden de lectura.

La detección y el reconocimiento siguen siendo componentes separados, así que puedes combinar tu detector de texto en escenas con PaddleOCR o con tu propio modelo de reconocimiento.

¿Por qué usar el OCR de texto en escenas?#

  • Geometría de texto flexible: usa modelos de detección, OBB o segmentación para texto horizontal, rotado o irregular.
  • Reconocimiento intercambiable: ejecuta PaddleOCR sin código de integración adicional o pasa una función invocable para usar otro modelo.
  • Salida estructurada: accede al texto reconocido, a las confianzas de reconocimiento y detección, a la geometría de origen y a una imagen anotada desde un único objeto de resultados.

Ejecuta el OCR de texto en escenas con YOLO26#

PaddleOCR es opcional y se carga cuando se crea OCR con recognizer="paddleocr"; si faltan, instala PaddleOCR 3.x y la versión de PaddlePaddle para CPU. Para el reconocimiento con GPU, instala primero una versión compatible de paddlepaddle-gpu; no se añaden paquetes de OCR a las dependencias base de Ultralytics.

Pasa una imagen y un detector de texto a la solución OCR. El resultado contiene la imagen anotada y el texto reconocido:

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

Puntos de control de YOLO26-Text#

La familia pública YOLO26-Text ofrece puntos de control OBB n, s, m, l y x. Establece ULTRALYTICS_API_KEY con tu propia clave de API de Ultralytics Platform y, después, carga un punto de control mediante su URI de Platform:

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

Sustituye yolo26n-text por yolo26s-text, yolo26m-text, yolo26l-text o yolo26x-text para usar un modelo más grande.

Argumentos de OCR#

Aquí tienes una tabla con los argumentos de OCR:

ArgumentoTipoPredeterminadoDescripción
modelstrNoneRuta a un archivo de modelo Ultralytics YOLO.
recognizerstr o Callable'paddleocr'Backend de reconocimiento de texto o función invocable que acepta un recorte BGR y devuelve (text, confidence).
line_widthint2Grosor de línea de los cuadros, puntos clave y recuentos que dibuja la solución.
verboseboolTrueActiva el registro por fotograma de la forma de entrada, los recuentos por clase y la velocidad de procesamiento de la solución. La llamada de seguimiento en sí siempre es silenciosa.

Además, se admiten los siguientes ajustes de visualización:

ArgumentoTipoPredeterminadoDescripción
showboolFalseSi True, muestra las imágenes o los vídeos anotados en una ventana. Es útil para obtener información visual inmediata durante el desarrollo o las pruebas.
show_confboolTrueMuestra la puntuación de confianza de cada detección junto a su etiqueta. Permite conocer el grado de certeza del modelo para cada detección.
show_labelsboolTrueMuestra etiquetas para cada detección en la salida visual. Facilita la identificación inmediata de los objetos detectados.

Cómo funciona el OCR de texto en escenas#

  1. Detectar texto: YOLO26 genera cuadros alineados con los ejes, cuadros orientados o polígonos de segmentación.
  2. Crear recortes para el reconocimiento: los cuadros se recortan a los límites de la imagen. Los OBB se rectifican mediante una transformación afín a lo largo del borde que abarca la mayor distancia de izquierda a derecha, de modo que los cuadros casi cuadrados permanecen erguidos y las líneas de texto inclinadas quedan horizontales en la dirección de lectura. En los polígonos de segmentación, se rectifica el rectángulo girado de área mínima y se conserva el polígono original. Los recortes que tengan una altura al menos 1,5 veces superior a la anchura se giran 90° en sentido antihorario, como en PaddleOCR.
  3. Reconocer texto: PaddleOCR procesa todos los recortes en lotes de 16. Los reconocedores personalizados reciben un recorte cada vez.
  4. Ordenar y representar los resultados: el texto se agrupa en líneas horizontales y se ordena de arriba abajo y de izquierda a derecha. La visualización usa una fuente Unicode para texto no ASCII, como el chino.

Las coordenadas siempre se refieren a la imagen original, no a la entrada del detector ni al recorte para el reconocimiento.

Usar un reconocedor personalizado#

Pasa una función invocable para integrar otro modelo de reconocimiento sin cambiar la ruta de detección, geometría u ordenación. La función se ejecuta una vez por cada recorte BGR numpy.ndarray que no esté vacío. Devuelve una tupla (text, confidence) por llamada, no una lista de resultados por lotes:

Elemento de la tuplaTipo admitidoDescripción
textstrTexto decodificado para este recorte. Devuelve "" si no se reconoce ningún texto.
confidencefloat, int o numpy.floatingConfianza de reconocimiento numérica, que la solución convierte a float.
def recognize(crop):
    # Ejecuta tu modelo de reconocimiento en el recorte BGR y decodifica aquí su salida.
    return "example", 0.95

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

Los nombres de backend no compatibles generan un ValueError. Si no se detecta texto, result.texts está vacío y no se llama al reconocedor.

Resultados de OCR#

Cada llamada devuelve un objeto SolutionResults. Usa result.plot_im para la imagen anotada y result.texts para los registros en orden de lectura determinista:

ClaveTipoDescripción
textstrTexto reconocido.
confidencefloatConfianza del reconocimiento, separada de la confianza de detección.
detection_confidencefloatConfianza del detector YOLO.
detection_indexintÍndice de detección de origen antes de ordenar por orden de lectura.
polygonlist[list[float]]Polígono de la imagen original: cuatro esquinas para detecciones de cuadros y OBB, o el contorno de la máscara.

Dependencias y licencias#

ComponenteObligatorioRolLicencia
UltralyticsSíDetección YOLO, geometría de los recortes y coordinación de resultadosAGPL-3.0
PaddlePaddleSolo para recognizer="paddleocr"Entorno de ejecución del reconocimientoApache-2.0
PaddleOCR 3.xSolo para recognizer="paddleocr"Modelos de reconocimiento de líneas de texto y adaptador de inferenciaApache-2.0
Función invocable personalizadaNoIntegración de reconocimiento propiedad del usuarioDefinido por el backend

PaddleOCR puede descargar los pesos de reconocimiento la primera vez que se usa. Revisa la ficha del modelo seleccionado y las condiciones de redistribución antes de empaquetar o desplegar esos artefactos. Las licencias de los puntos de control personalizados son independientes.

Preguntas frecuentes#

  • Sí. Pasa una función invocable como recognizer y devuelve (text, confidence) para cada recorte BGR. Consulta Usar un reconocedor personalizado para conocer el contrato de entrada y salida.

  • No. El OCR trata cada imagen de entrada de forma independiente, sin ID de seguimiento ni reconocimiento en caché. Procesa cada fotograma de vídeo como una entrada independiente cuando necesites OCR fotograma a fotograma.

  • Puedes exportar el detector YOLO con el modo de exportación habitual, pero PaddleOCR o un reconocedor personalizado no se integran en el artefacto del detector de ONNX, TensorRT u otro formato. Despliega el detector exportado y el entorno de ejecución del reconocimiento como componentes separados, o conserva esta capa de composición de Python.

Colaboradores

Comentarios

Haz una pregunta, comparte tus resultados o ayuda a otra persona.