Ultralytics YOLO27: Únete a la lista de espera.
Licencia YOLO
Ultralytics YOLO

OCR en Python con Ultralytics YOLO26: lee documentos, fotos y PDF desde cualquier ángulo

Lee texto en imágenes y páginas PDF con cualquier orientación usando Ultralytics YOLO26-Text y PP-OCRv6 con unas pocas líneas de Python, en CPU o GPU, con TensorRT opcional.

Jing QiuJing Qiu15 min de lectura
La demo en directo de OCR de Ultralytics YOLO26 lee un cartel de una calle de Wall St; las palabras 11-21, WALL ST y 1-26 aparecen delimitadas y con sus puntuaciones de confianza, junto al código Python que lo ejecuta

¿Cómo puedes ejecutar OCR en Python en un escaneo girado, una foto de un cartel hecha con el móvil o una página de un PDF y obtener las palabras en el orden en que las leería una persona? Con el paquete Ultralytics, basta con una clase: solutions.OCR() detecta texto con un modelo YOLO26-Text de Ultralytics, lee cada palabra con el reconocedor PP-OCRv6 de PaddleOCR y devuelve las palabras reconocidas línea por línea, con cualquier orientación de página, en CPU o GPU.

Esta canalización es nueva. Ultralytics 8.4.210 reconstruyó la solución de OCR en torno a PP-OCRv6 en ONNX Runtime, con gestión de la rotación y del orden de lectura, y 8.4.211 añadió un reconocedor TensorRT opcional. En nuestra evaluación con un tamaño de imagen de 1280, la configuración predeterminada obtuvo una F1 de palabras de 0,931 en seis páginas PDF y de 0,722 en 80 fotos de HierText. En una RTX PRO 6000, un motor TensorRT FP16 almacenado en caché leyó las 251 palabras detectadas en una foto en 82 ms, frente a los 249 ms de ONNX Runtime en CUDA.

Esta guía explica cómo funciona la canalización, cómo ejecutarla en imágenes y PDF, su velocidad y los idiomas que reconoce actualmente. Ultralytics ofrece una de las opciones de OCR que se comparan a continuación, así que la comparación se limita a las capacidades documentadas de cada proyecto.

YOLO26 OCR lee una página en dos pasos y después ordena las palabras#

El reconocimiento óptico de caracteres (OCR) tiene dos tareas: encontrar el texto y después leerlo. La solución de OCR de Ultralytics las separa claramente:

  • Detección: un modelo YOLO26-Text, un detector de cajas delimitadoras orientadas, dibuja cajas giradas alrededor del texto. Está disponible en tamaños n, s, m, l y x, y el modelo x es el predeterminado.
  • Reconocimiento: PP-OCRv6 medium lee cada recorte. Se ejecuta en ONNX Runtime desde la versión de recursos de Ultralytics, así que no tienes que instalar PaddlePaddle. Se descartan los recortes que no se leen como texto.
  • Ordenación: las palabras se agrupan en líneas y se devuelven de arriba abajo y de izquierda a derecha, cada una etiquetada con su número de línea.

Cada palabra se devuelve como un registro con su texto, la confianza del reconocimiento, la confianza del detector, un número de línea y un polígono en las coordenadas de la imagen original. Como las dos confianzas se mantienen separadas, puedes enviar a revisión humana una palabra detectada con confianza pero leída con poca certeza, en lugar de fiarte de ella.

Las dos etapas son independientes. Puedes sustituir el detector por uno más pequeño, por un modelo de detección o segmentación propio, o por otro reconocedor; la gestión de la rotación y el orden de lectura seguirán funcionando. Puedes probar el mismo flujo de código en el navegador, en nuestra página de procesamiento de documentos, antes de instalar nada.

Las páginas giradas y boca abajo se leen en el orden correcto#

La solución calcula la orientación de la página a partir del texto que detecta, así que no tienes que corregir la inclinación ni girar las páginas de antemano:

  1. Determina la dirección del texto. Calcula la media del ángulo del lado largo de las cajas detectadas, ponderándola según lo alargada que sea cada caja. Las cajas con una proporción inferior a 2:1, como las de un solo dígito, se excluyen del cálculo.
  2. Gira la página. Gira la página para que el texto vaya de izquierda a derecha, recorta cada palabra en posición vertical y agrupa las palabras en líneas.
  3. Resuelve si está a 0° o a 180°. Una caja no permite saber en qué sentido está orientado el texto, así que la solución lee las 8 palabras más anchas en ambos sentidos y conserva la orientación con mayor confianza de lectura. El texto boca abajo se lee como ruido de baja confianza, lo que hace que la respuesta correcta destaque.

Al girar 8 documentos y capturas de pantalla, además de 12 fotos, a 90°, 180° y 270°, la F1 de palabras fue de 0,925 en los documentos y de 0,654 en las fotos. En un formulario IRS 8802 en blanco, la solución leyó 404, 401 y 399 palabras a 0°, 180° y 90°, con las mismas primeras líneas. La versión anterior daba por sentado que todas las páginas estaban en posición vertical.

Los valores predeterminados se basan en una evaluación, no en una suposición#

Definimos los principales valores predeterminados mediante mediciones. La evaluación se ejecutó en una RTX PRO 6000 con la imagen de Platform de producción; las imágenes cargadas se enviaron como JPEG de hasta 1280 píxeles por el lado más largo. Se utilizaron 80 fotos de validación del conjunto de datos HierText de Google, con sus transcripciones de palabras legibles, 6 páginas PDF evaluadas frente a sus capas de texto (4 de un artículo de arXiv y los formularios IRS 1040 y 8802 en blanco), una captura de pantalla sintética y una imagen sintética. La métrica es la puntuación F1 a nivel de palabra, el equilibrio entre la precisión y la exhaustividad, contando las palabras en minúsculas de al menos 2 caracteres alfanuméricos.

Gráfico de barras de la F1 de palabras por detector y tamaño de imagen: YOLO26x-Text a 1280 píxeles, la opción predeterminada, obtiene 0.722 en 80 fotos de HierText y 0.931 en 6 páginas PDF

F1 de palabras de YOLO26-Text con PP-OCRv6 en 80 fotos de HierText y 6 páginas PDF, por detector y tamaño de imagen, en una RTX PRO 6000.

Las páginas PDF limpias se leen mucho mejor que las fotos de texto en escenas en todos los ajustes, y las cifras justifican tres valores predeterminados:

  • yolo26x-text a imgsz=1280. Bajar a 960 restó 0.042 de F1 en las fotos, mientras que subir a 1920 añadió 0.002 en las fotos y restó 0.007 en las páginas PDF. Las imágenes más pequeñas no se amplían a 1280; se procesan a su propio tamaño, redondeado hacia arriba al múltiplo del paso de 32 píxeles del modelo.
  • Leer palabra por palabra. Leer palabras sueltas superó en 4 puntos de F1 a la lectura de líneas completas en las fotos.
  • max_det=1000. Una página de documento densa contiene más de las 300 detecciones habituales.

Si necesitas un detector más ligero, YOLO26l-Text se quedó a menos de medio punto del modelo x en ambos conjuntos.

Cómo ejecutar OCR en Python con YOLO26#

Instala o actualiza con pip install -U "ultralytics>=8.4.211". La primera llamada de OCR descarga YOLO26x-Text y PP-OCRv6 e instala ONNX Runtime; usa onnxruntime-gpu si CUDA está disponible. El reconocedor ONNX Runtime predeterminado requiere Python 3.11+ y ONNX Runtime 1.26+.

Leer una imagen#

import cv2

from ultralytics import solutions

ocr = solutions.OCR()  # YOLO26x-Text con imgsz=1280 y PP-OCRv6
im0 = cv2.imread("receipt.jpg")
assert im0 is not None, "Image not found"
result = ocr(im0)
cv2.imwrite("receipt_ocr.jpg", result.plot_im)  # imagen anotada

for word in result.texts:
    print(word["line"], word["text"], round(word["confidence"], 2))

Desde la línea de comandos, yolo solutions ocr source="path/to/video.mp4" hace lo mismo con cada fotograma. Cada fotograma se lee de forma independiente, sin seguimiento.

Leer un PDF#

La solución acepta imágenes, así que primero debes renderizar cada página del PDF. PyMuPDF es una opción para hacerlo:

import cv2
import numpy as np
import pymupdf  # pip install pymupdf

from ultralytics import solutions

ocr = solutions.OCR()
for page in pymupdf.open("document.pdf"):
    pix = page.get_pixmap(dpi=200)
    rgb = np.frombuffer(pix.samples, np.uint8).reshape(pix.height, pix.width, pix.n)
    result = ocr(cv2.cvtColor(rgb, cv2.COLOR_RGB2BGR))

    lines = {}
    for word in result.texts:  # ya está en el orden de lectura
        lines.setdefault(word["line"], []).append(word["text"])
    print("\n".join(" ".join(words) for words in lines.values()))

Como result.texts ya está ordenado, reconstruir el texto sin formato solo requiere un diccionario y una operación de unión. Los polígonos permiten ir más allá; por ejemplo, puedes comprobar que una cantidad aparezca junto a la palabra "Total".

Elige el modelo, el dispositivo y el reconocedor#

  • Detector más pequeño: solutions.OCR(model="yolo26s-text.pt") carga un detector más pequeño y rápido; comprueba su precisión con tus propias páginas. Los cinco tamaños se descargan automáticamente.
  • CPU o GPU: el reconocedor se ejecuta en CUDA cuando se selecciona una GPU CUDA y está disponible el proveedor de ejecución CUDA de ONNX Runtime; de lo contrario, se ejecuta en CPU. Así, el mismo script funciona en un portátil o en un servidor.
  • Tu propio reconocedor: pasa una función como recognizer. Recibe cada recorte de palabra BGR y devuelve (text, confidence); la solución sigue encargándose de la detección, la rotación y la ordenación.
def recognize(crop):
    # Ejecuta cualquier modelo de reconocimiento sobre el recorte de palabra BGR
    return "example", 0.95


ocr = solutions.OCR(recognizer=recognize)

TensorRT lee palabras entre 2,5 y 3 veces más rápido en fotos densas#

En nuestras pruebas con GPU en páginas densas, el reconocimiento, y no la detección, era lo que más tiempo llevaba. Una optimización anterior midió unos 11 ms para la detección en una solicitud de 250 ms, y la solicitud de incorporación de TensorRT atribuyó buena parte del tiempo restante de reconocimiento a 33 lotes pequeños dominados por la sobrecarga de ejecución, no por el cálculo. Ultralytics 8.4.211 añade un argumento para esto:

ocr = solutions.OCR(recognizer="tensorrt")  # Motor TensorRT FP16 en GPU NVIDIA

La primera ejecución crea un motor TensorRT FP16 en unos 30 segundos y lo guarda en caché junto al modelo PP-OCRv6, una vez por versión de TensorRT y arquitectura de GPU. Las cargas posteriores tardan entre 0,05 y 0,2 segundos. Según la versión, es aproximadamente 2,5 veces más rápido que ONNX Runtime en páginas densas.

Medimos read_words, la etapa posterior a la detección que recorta, gira, reconoce y ordena las palabras, en cuatro fotos de texto en escenas. En las tres fotos con entre 195 y 263 palabras, el motor FP16 fue entre 2,5 y 3 veces más rápido que ONNX Runtime en CUDA; en una foto de 48 palabras fue 1,4 veces más rápido:

Gráfico de barras agrupadas del tiempo de lectura de palabras en cuatro fotos de texto en escenas: el motor TensorRT FP16 tarda 82 ms en una foto con 251 palabras, frente a los 249 ms de ONNX Runtime CUDA

Tiempo de lectura de palabras en cuatro fotos de texto en escenas con ONNX Runtime CUDA y motores TensorRT FP32 y FP16, mediana de 10 ejecuciones en una RTX PRO 6000 Blackwell con TensorRT 11.4.

Una llamada completa de OCR en una página densa pasó de 182 ms a 94 ms. En estas cuatro fotos, la aceleración no cambió el resultado: para las 757 palabras, ONNX Runtime y ambos motores devolvieron el mismo texto y la misma agrupación de líneas.

Mantén el valor predeterminado recognizer="paddleocr" si no puedes esperar a la primera compilación o no usas hardware NVIDIA. No compila nada y se inicia en aproximadamente un segundo. Nuestra comparación entre ONNX y TensorRT explica la misma disyuntiva para los modelos de detección, y la guía de integración de TensorRT explica cómo configurarlo.

Actualmente se admiten la escritura china, japonesa y latina#

PP-OCRv6 solo puede generar caracteres de su conjunto integrado de 18.708 caracteres. El detector YOLO26-Text no depende de ese conjunto y sigue encontrando palabras en otras escrituras, pero las palabras que no están incluidas se devuelven como caracteres parecidos. Por ejemplo, el texto ruso ТЕКСТ se lee como «TEKCT», a menudo con una confianza alta.

  • Admitidos: chino simplificado y tradicional (unos 15.600 caracteres CJK), japonés (hiragana, katakana y kanji) e idiomas con escritura latina, como inglés, francés, alemán, español, portugués, italiano, neerlandés, sueco, finés, danés, noruego, polaco, checo, húngaro, rumano, turco, croata, indonesio y malayo. Se admiten todas las letras, incluidas las acentuadas, excepto la ẞ mayúscula alemana y la ¡ española.
  • Parcialmente admitidos: vietnamita, al que le faltan la mayoría de las vocales con tonos, y griego, del que solo se admiten las letras básicas.
  • Aún no admitidos: cirílico, coreano (hangul), árabe, hebreo, devanagari y tailandés.

Para una escritura no admitida, conserva el detector YOLO26-Text y pasa un reconocedor entrenado para esa escritura como recognizer. La tabla completa de cobertura está en la sección de idiomas admitidos de la guía de OCR.

Comparativa de bibliotecas de OCR para Python según sus capacidades documentadas#

No hay un único modelo de OCR que sea el mejor; la elección depende de tus páginas, tus idiomas y dónde se ejecute el código. La tabla compara las capacidades documentadas, no los resultados medidos, según las páginas públicas de cada proyecto consultadas el 12 de noviembre de 2026. Las opciones aparecen en orden alfabético.

OpciónEntorno de ejecuciónTexto giradoIdiomas documentadosResultado
EasyOCRPyTorchrotation_info prueba 90°, 180° y 270° en cada cuadro de textoMás de 80, incluidos cirílico, árabe, devanagari, coreano y tailandésCuadros, texto y confianza
PaddleOCRPaddlePaddleClasificación de orientación opcionalMás de 100 (PP-OCRv6 admite 50 con un solo modelo)Cuadros, texto y confianza
Tesseract (pytesseract)Binario nativo, CPUDetección de orientación y escritura (image_to_osd); gira la imagen antes de leerla100+Texto, con datos de palabras opcionales
OCR de Ultralytics YOLO26Detector PyTorch; reconocedor en ONNX Runtime o TensorRT en GPU NVIDIAOrientación de la página estimada a partir del texto detectado; la solución determina automáticamente si está a 0° o a 180°Escrituras china, japonesa y latina; otras, mediante un reconocedor personalizadoPalabras en orden de lectura con números de línea, polígonos y valores de confianza de detección y reconocimiento por separado

Consulta la documentación de EasyOCR, el repositorio de PaddleOCR, la documentación de Tesseract y pytesseract para conocer las opciones actuales. Para saber cómo funcionan estos motores, consulta nuestra visión general de los modelos de OCR de código abierto más populares.

Dónde encaja Ultralytics#

El OCR de Ultralytics YOLO26 está pensado para desarrolladores de Python que necesitan extraer texto de entradas variadas, como formularios escaneados, páginas PDF, capturas de pantalla y fotos de etiquetas y carteles, con las palabras en orden de lectura y coordenadas que puedan comprobar. Es una buena opción cuando las páginas llegan con ángulos impredecibles, quieres ejecutar el OCR en tus propios equipos o ya utilizas modelos de Ultralytics YOLO26 y quieres OCR en el mismo paquete. Añade recognizer="tensorrt" si procesas grandes volúmenes en GPU NVIDIA.

El detector es un modelo normal de Ultralytics, así que se entrena, valida y exporta como cualquier otro. El proyecto YOLO26-Text en Ultralytics Platform incluye los cinco tamaños, de n a x, para que puedas comparar sus curvas de entrenamiento y clonar el proyecto para empezar a partir de ellos.

El proyecto YOLO26-Text en Ultralytics Platform, que muestra los cinco tamaños del detector, de yolo26n-text a yolo26x-text, con sus curvas de precisión, exhaustividad, mAP50-95 y pérdida

El proyecto YOLO26-Text en Ultralytics Platform: los cinco tamaños del detector con sus curvas de precisión, exhaustividad, mAP50-95 y pérdida durante el entrenamiento.

Para adaptarlo a tus documentos, empieza con el conjunto de datos Scene Text OBB, que combina COCO-Text y HierText en 65.325 imágenes con aproximadamente 1,29 millones de polígonos de palabras.

Sus limitaciones son concretas:

  • Escrituras. El reconocedor predeterminado aún no lee cirílico, coreano, árabe, hebreo, devanagari ni tailandés. Combina el detector con tu propio reconocedor o elige un motor que admita esas escrituras.
  • Direcciones mixtas. La solución gira toda la página según la dirección predominante del texto, así que el texto que va en varias direcciones en una misma página, como una nota vertical en el margen, puede leerse peor.
  • Exportación. El reconocedor no está integrado en el archivo exportado del detector, así que implementa el detector y el entorno de ejecución del reconocimiento en paralelo, o mantén la solución Python como elemento de conexión.
  • Rust. Ultralytics Inference lee texto en escenas con Rust y el mismo reconocedor PP-OCRv6 mediante ultralytics-inference predict --ocr, pero gestiona la orientación con un clasificador en lugar de usar el paso de rotación de página de la solución Python.
  • Privacidad. La solución Python se ejecuta en tu propio hardware, así que las páginas no tienen que salir de tus equipos; la demo del navegador carga las páginas para hacer la inferencia. En el caso de los campos que no se deben leer, cubre las zonas conocidas con una máscara opaca antes de ejecutar el OCR.

En formularios y contratos, un modelo YOLO personalizado puede localizar primero campos, tablas, firmas y sellos, para que solo tengas que leer las zonas necesarias. El conjunto de datos Signature en Ultralytics Platform y nuestra guía de análisis inteligente de documentos son buenos puntos de partida, y Ultralytics Platform te permite etiquetar páginas y entrenar ese modelo en un mismo lugar. Para probar primero el OCR en una página tuya, suelta una imagen o un PDF en la demo de OCR en directo.

Preguntas frecuentes

  • Instala el paquete Ultralytics con pip install -U "ultralytics>=8.4.211" y, después, llama a solutions.OCR() con una imagen cargada mediante OpenCV. Devuelve las palabras reconocidas con su texto, confianza, número de línea y polígono, en orden de lectura. La primera ejecución descarga automáticamente el detector YOLO26-Text y el reconocedor PP-OCRv6.

  • Depende de tus documentos, tus idiomas y tu hardware; nuestra visión general de los modelos de OCR de código abierto más populares compara las principales opciones. En nuestra evaluación con un tamaño de imagen de 1280 en una RTX PRO 6000, YOLO26x-Text con PP-OCRv6 obtuvo una F1 de palabras de 0,931 en seis páginas PDF y de 0,722 en 80 fotos de HierText, y lee páginas con cualquier orientación. Para las escrituras que aún no admite, como el cirílico o el coreano, utiliza un reconocedor entrenado para esa escritura.

  • Un modelo YOLO detecta texto, pero no lo lee. Ultralytics YOLO26-Text detecta el texto en forma de cuadros orientados y la solución de OCR pasa cada recorte al reconocedor PP-OCRv6, por lo que juntos realizan un OCR completo en una sola llamada.

  • Sí. Renderiza cada página del PDF como una imagen, por ejemplo, con get_pixmap de PyMuPDF; conviértela a BGR y pásala a solutions.OCR(). En el navegador, la demo y la pestaña Platform Predict aceptan un PDF y leen su primera página.

  • Sí. PP-OCRv6 funciona en ONNX Runtime en CPU o GPU con CUDA, y el mismo script funciona en ambos casos. El reconocedor opcional de TensorRT necesita una GPU NVIDIA.

  • Todavía no con el reconocedor predeterminado. PP-OCRv6 admite chino, japonés e idiomas que usan el alfabeto latino, pero no cirílico, hangul, árabe, hebreo, devanagari ni tailandés. Puedes mantener el detector YOLO26-Text y pasarle un reconocedor entrenado para ese sistema de escritura.

Escrito por

Jing Qiu
Jing Qiu

Ingeniero sénior de aprendizaje automático · Ultralytics

Jing Qiu es ingeniero sénior de aprendizaje automático en Ultralytics y se centra en mejorar el rendimiento, la escalabilidad y la aplicabilidad en el mundo real de los modelos de visión artificial más avanzados. Su trabajo abarca la arquitectura de modelos, la optimización del entrenamiento y la implementación, y contribuye a que Ultralytics YOLO ofrezca una precisión y eficiencia líderes en el sector a desarrolladores y empresas de todo el mundo.

Comentarios

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

Explora las soluciones

Visión artificial en el deporte

Visión artificial en el deporte

Descubre cómo Ultralytics YOLO impulsa la visión artificial en el deporte con el seguimiento de jugadores y balones, analíticas de rendimiento, información útil para entrenadores y rehabilitación de deportistas.
Más información
Visión artificial para imágenes aéreas

Visión artificial para imágenes aéreas

Convierte imágenes aéreas y de drones en información útil en tiempo real para la agricultura, la acuicultura, la conservación y el análisis geoespacial con Ultralytics YOLO.
Más información
Visión artificial en el sector aeroespacial

Visión artificial en el sector aeroespacial

Aplica la visión artificial en el sector aeroespacial con Ultralytics YOLO para inspeccionar aeronaves, detectar objetos extraños en pistas, gestionar operaciones en tierra y detectar defectos en materiales compuestos.
Más información
Visión artificial en seguridad

Visión artificial en seguridad

Protege todas tus instalaciones con los modelos Ultralytics YOLO. La IA visual permite supervisar perímetros, detectar amenazas, reconocer matrículas y mejorar la seguridad laboral.
Más información
Visión artificial en robótica

Visión artificial en robótica

Potencia máquinas más inteligentes con los modelos Ultralytics YOLO. La IA visual en robótica impulsa la navegación autónoma, la percepción, el seguimiento de objetos y el control en tiempo real.
Más información
Visión artificial en logística

Visión artificial en logística

Agiliza la logística con modelos Ultralytics YOLO. La IA visual permite inspeccionar paquetes, clasificarlos, realizar el seguimiento de vehículos y supervisar la seguridad del almacén en tiempo real.
Más información
Visión artificial en el comercio minorista

Visión artificial en el comercio minorista

Reinventa el comercio minorista con modelos Ultralytics YOLO. La IA visual permite realizar el seguimiento del inventario, supervisar estanterías, gestionar colas y obtener información más útil sobre los clientes.
Más información
Visión artificial en el sector sanitario

Visión artificial en el sector sanitario

Desarrolla soluciones sanitarias con modelos Ultralytics YOLO. La IA visual en el sector sanitario permite acelerar el diagnóstico por imagen, mejorar los diagnósticos y supervisar a los pacientes.
Más información
Visión artificial en la fabricación

Visión artificial en la fabricación

Optimiza la fabricación con modelos Ultralytics YOLO. La IA visual mejora el control de calidad, la detección de defectos, el cumplimiento de las normas de uso de EPI y la automatización de las líneas de montaje.
Más información
Visión artificial en la automoción

Visión artificial en la automoción

Aplica la visión artificial al sector de la automoción con modelos Ultralytics YOLO. La IA visual mejora la seguridad vial, la asistencia al conductor y la automatización de vehículos para lograr carreteras más inteligentes.
Más información
Visión artificial en la agricultura

Visión artificial en la agricultura

Incorpora la IA de visión a la agricultura inteligente con modelos Ultralytics YOLO. Impulsa la monitorización de cultivos, el seguimiento del ganado y la agricultura de precisión para obtener cosechas más abundantes e inteligentes.
Más información

¡Construyamos juntos el futuro de la IA!

Inicia tu recorrido hacia el futuro del aprendizaje automático