¿El PDF requiere OCR? Utilice PyMuPDF para realizar una verificación previa página por página en lugar de un nuevo reconocimiento completo

Si desea realizar OCR en el PDF, no es necesario volver a reconocer el PDF completo. Utilice PyMuPDF para determinar página por página si hay una capa de texto y si es una imagen de página completa, y envíe solo las páginas que realmente sean necesarias para el reconocimiento. Se adjuntan muestras ejecutables, pruebas de páginas rotativas e instrucciones de límites de sucursales.

Cuando muchos equipos se ocupan de la traducción o el archivado de PDF, están acostumbrados a etiquetar el documento completo como "escaneado" o "copiable" en la entrada. Un PDF de 300 páginas puede tener las primeras 280 páginas con capas de texto y solo las últimas 20 páginas como archivos adjuntos escaneados. Si se clasifica por partes enteras, el OCR completo aumentará el tiempo de espera y también puede identificar erróneamente los números originalmente correctos. Por otro lado, si sólo puedes copiar texto en la página de inicio y omitir el OCR en todas las páginas, también es arriesgado.

Un enfoque más confiable es dejar que cada página avance al siguiente paso con los resultados de la verificación previa. Este artículo implementa una división conservadora de tres vías: extracción directa, envío a la cola de candidatos de OCR e inspección manual. Es una heurística de ingeniería interpretable, no un clasificador universal para juzgar la calidad del texto. Después de leer, puede obtener un programa de verificación previa página por página ejecutable, así como límites de desvío e ideas comunes para el manejo de fallas.

Conclusión de una oración

No es necesario juzgar si el PDF requiere OCR. Utilice PyMuPDF para realizar una verificación previa página por página y enviar solo las páginas que realmente necesitan ser reconocidas al OCR.

tu situaciónPrácticas recomendadasrazón
Extraiga al menos 40 caracteres que no sean espacios en blanco de una sola páginaExtracción directa (TEXT_CANDIDATE)Ya tengo suficientes caracteres, pero aún necesito verificar si hay capas ocultas de OCR defectuosas
Menos de 40 palabras y una sola imagen que cubra al menos el 70% de la página.Enviar a la cola de candidatos de OCRLos escaneos de página completa son adecuados para la identificación, pero las fotografías puras también serán suficientes.
Página en blanco, tipo vectorial, título escaso o rompecabezas complejoInspección manual (REVISIÓN)Estas situaciones no se pueden clasificar de manera confiable en las dos primeras categorías y no se pueden omitir ni descartar automáticamente.
Un documento híbrido de 300 páginasVerificación previa página por página, no procesamiento completoEvite realizar OCR en todas las páginas debido a algunos archivos adjuntos escaneados u omitir todo el OCR porque hay texto en la página de inicio.

Nota: El contenido de la imagen proviene del PDF sintetizado generado por el siguiente código, no del archivo del cliente ni de la interfaz OmniDoc. El texto de la página de la imagen está formado por píxeles rasterizados; el texto en la página de texto tiene una capa de texto real.

Decide qué comprobar primero

Aquí se utilizan dos señales: el número de caracteres de texto después de eliminar los espacios en blanco y la proporción del área de la página ocupada por la imagen más grande de la página. El primero responde "¿Se han extraído suficientes caracteres?" y este último ayuda a diferenciar entre un escaneo de página completa y una página en blanco. El área de la imagen primero se cruzará con el cuadro de recorte para evitar exceder la proporción de ampliación de la imagen en la página.

observaciónDesvío de este artículo.Todavía necesito atención
Al menos 40 caracteres que no sean espacios en blancoTEXTO_CANDIDATOLas capas ocultas de OCR defectuosas también pueden tener muchas palabras
Menos de 40 palabras y una sola imagen que cubra al menos el 70%OCR_CANDIDATOLas fotos puras también cumplirán las condiciones, es posible que el OCR no sea significativo
Resto de los casosREVISARAquí son posibles espacios en blanco, tipos vectoriales, títulos escasos y acertijos complejos.

Los umbrales 40 y 0,70 tienen como objetivo hacer que este conjunto de pruebas sea fácil de auditar y no son estándares en varios idiomas. El chino, la fórmula, la portada y las formas breves deben calibrarse por separado. Aquí, se toma la imagen con el área más grande en lugar de simplemente agregar las áreas de imágenes superpuestas, por lo que una página escaneada compuesta por varias imágenes puede caer en REVISIÓN. Este es un límite intencionalmente reservado.

Ejemplo ejecutable completo

La muestra utiliza PyMuPDF==1.28.0, no depende de Tesseract y no llama a ningún servicio de traducción o OCR en línea. Guárdelo como example.py y ejecútelo en un directorio vacío. El nombre del archivo que crea se fija en routing-fixture.pdf. No sobrescriba el archivo de entrada en proyectos reales.

import json
import pymupdf

def inspect_page(page):
    chars = len("".join(page.get_text().split()))
    bounds = page.cropbox
    # 图片坐标与文本坐标都是未旋转坐标;不要混用旋转后的 page.rect。
    bounds = pymupdf.Rect(0, 0, bounds.width, bounds.height)
    ratios = []
    for image in page.get_image_info():
        rect = pymupdf.Rect(image["bbox"]) & bounds
        ratios.append(max(0, rect.get_area()) / bounds.get_area())
    largest = max(ratios, default=0.0)
    route = ("TEXT_CANDIDATE" if chars >= 40 else
             "OCR_CANDIDATE" if largest >= 0.70 else "REVIEW")
    return {"page": page.number + 1, "chars": chars,
            "largest_image_ratio": round(largest, 3), "route": route}

with pymupdf.open() as source:
    page = source.new_page(width=360, height=480)
    page.insert_text((28, 60), "Sample invoice 2026-09-26", fontsize=16)
    page.insert_text((28, 100), "Quantity 12   Unit price USD 15.00", fontsize=12)
    page.insert_text((28, 132), "Amount USD 180.00   Checked manually", fontsize=12)
    scan = page.get_pixmap(matrix=pymupdf.Matrix(2, 2)).tobytes("png")
    page = source.new_page(width=360, height=480)
    page.insert_image(page.rect, stream=scan)
    source.new_page(width=360, height=480)
    source.save("routing-fixture.pdf")

with pymupdf.open("routing-fixture.pdf") as pdf:
    result = [inspect_page(page) for page in pdf]
    assert [r["route"] for r in result] == [
        "TEXT_CANDIDATE", "OCR_CANDIDATE", "REVIEW"]
    assert result[1]["chars"] == 0
    assert result[1]["largest_image_ratio"] == 1.0
    pdf[1].set_rotation(90)
    assert inspect_page(pdf[1])["route"] == "OCR_CANDIDATE"
print(json.dumps(result, indent=2))

Al acceder a OCR, la página de texto se almacena en caché en lugar de una marca de éxito.

La interfaz OCR de PyMuPDF es page.get_textpage_ocr(...). Tesseract y los datos del idioma correspondiente deben prepararse por separado. Después de obtener TextPage, se debe pasar como parámetro textpage durante la extracción posterior para evitar el reconocimiento repetido de la misma página. Consulte Documento OCR PyMuPDF para conocer métodos y parámetros de instalación específicos.

Este artículo no ejecutó el motor OCR, por lo que los resultados de la prueba solo pueden demostrar que la lógica de desvío y las coordenadas se usan correctamente y no representan la tasa de reconocimiento de chino, la tasa de recuperación de tablas ni la calidad de la traducción. La versión del motor de OCR, el paquete de idioma, el número de página, el resumen del archivo de entrada y los resultados de la inspección manual deben registrarse en el entorno de producción. No se quede sólo con la cadena final, de lo contrario será difícil explicar de qué página proviene un determinado número.

Tres tipos de fallas que se pasan por alto más fácilmente

La capa de texto oculta puede estar confusa. Si el número de caracteres alcanza el estándar, solo significa "puedes continuar intentando extraer". También debe comprobar si los caracteres de reemplazo, las líneas repetidas y los campos clave corresponden a la representación. Los contenidos clave, como el número de contrato y el importe, deben comprobarse aleatoriamente.

Las palabras dibujadas por rutas vectoriales no son texto ni imágenes. Entrarán en REVISIÓN. No los marque automáticamente como en blanco ni descarte páginas silenciosamente.

Cerrar Documento y luego usar Página generará objetos no válidos. Mantenga el alcance de with pymupdf.open(...) y complete la verificación previa, el renderizado y la extracción antes de publicar el archivo. Para obtener más detalles sobre coordenadas, información de imágenes y ciclo de vida de la página, consulte PyMuPDF Page API.

Los PDF que no son de confianza también deben tener el tamaño de archivo, el número de páginas, los píxeles renderizados, el tiempo y los límites de memoria establecidos en un proceso separado. El ejemplo solo prueba archivos pequeños y no proporciona un entorno limitado para archivos maliciosos. Antes de utilizar PyMuPDF en producción, también debes verificar las condiciones de su licencia y su método de distribución.

Transición de flujos a flujo de trabajo de traducción

Una salida cualificada no es una cadena de texto, sino un registro con números de página y razones para la decisión. Antes de traducir, confirma qué páginas pueden extraerse de forma fiable; Tras la traducción, se revisan el contenido, los números y la maquetación. Puedes ver los servicios de procesamiento de documentos en Entrada de producto de OmniDoc. El programa local en este artículo funciona de forma independiente y no depende de una cuenta OmniDoc, ni significa que sea un algoritmo de producto interno.

📊 Comparación de núcleos

RecorridoCondiciones desencadenantesPágina adecuadaPrincipales riesgos
Extracción directa (TEXT_CANDIDATE)Al menos 40 caracteres no espaciadosLa página principal de la capa de texto existenteLas capas ocultas de OCR malas pueden contener texto distorsionado
Candidatos OCR (OCR_CANDIDATE)Menos de 40 palabras, con una sola imagen cubriendo al menos el 70%Copia escaneada a página completaLas fotos puras también cumplen los requisitos, pero los resultados de OCR pueden no ser significativos
Inspección manual (REVISIÓN)No cumple con las dos categorías anterioresPáginas en blanco, texto vectorial, títulos escasos, puzles complejosSe requiere juicio manual; saltarse o descartar no se puede hacer automáticamente

🎯 ¿Qué método te conviene?

Si ......

  • Gestionaba documentos mixtos, con grandes diferencias de calidad entre las páginas frontal y trasera: pre-check página por página, cada uno entrando en una ruta diferente.
  • Principalmente gestionan contratos, documentos financieros y otros documentos que contienen números clave: Para la página TEXT_CANDIDATE, comprueba aleatoriamente la correspondencia entre números y renderizaciones.
  • Procesamiento por lotes de escaneos: Registrar versiones del motor, paquetes de idiomas y números de página para resultados OCR para facilitar la trazabilidad.
  • Recibir PDFs de fuentes desconocidas: Establecer límites de recursos en procesos independientes; no procesarlos directamente en el proceso principal.

❓ Preguntas frecuentes (FAQ)

1. La página principal puede copiar texto; ¿puedo saltarme el proceso OCR para todo el PDF?

No, no puedes. Tener una capa de texto en la primera página no significa que las páginas siguientes también las tengan; debes juzgar página por página.

2. ¿Por qué no sumar directamente el área de la imagen?

Añadir las imágenes superpuestas por área sobreestimará la tasa de cobertura. Este artículo toma la imagen más grande por área, por lo que las páginas escaneadas unidas a partir de varias imágenes pueden entrar en la sección RESEÑA, que es un límite deliberado.

3. Si el recuento de caracteres llega a 40, ¿significa eso que la calidad del texto es correcta?

No se puede concluir así. Las capas ocultas de OCR malas también pueden tener muchos caracteres, así que aún tienes que comprobar si hay caracteres de reemplazo, líneas duplicadas y campos de teclas puntuales.

4. ¿Cómo deberían manejarse los textos dibujados en rutas vectoriales?

No son ni texto ni imágenes, introduzcan RESEÑA y se juzgan manualmente; no deben marcarse automáticamente como páginas en blanco o que se dejen caer silenciosamente.

5. ¿El programa local depende de una cuenta de OmniDoc?

No dependiente. El programa local mencionado en este artículo funciona de forma independiente y no ofrece servicios de OCR o traducción en línea.

📝 Resumen

Primero, deja evidencia página por página antes de decidir si realizar OCR. Dejar páginas inciertas en la cola es más efectivo que disfrazar resultados inciertos como éxito.

Experiencia ahora: Sube tu documento para empezar a traducir, conservando el formato original

Actualizado 2026-11-15