Conclusiones clave
- /document/ocr actualmente solo acepta PDF; ejecuta primero /document/convert para documentos de Word, de PowerPoint o basados en imágenes.
- Usa /image/ocr para fotografías, capturas de pantalla y tomas de cámara.
- El formato meta mantiene el texto en el objeto de archivo para que Steps posteriores puedan filtrarlo o incrustarlo sin una segunda pasada.
La extracción de texto resulta útil cuando forma parte del pipeline que ya gestiona la subida, en lugar de ser un servicio aparte al que hay que indicarle dónde está el archivo. Las decisiones principales son qué Robot se ajusta a la entrada y qué forma debe tener el resultado en las fases posteriores.
Lo más importante
- La granularidad list devuelve fragmentos con su posición, mientras que full devuelve un solo bloque de texto.
- Los proveedores se pueden fijar en aws o gcp cuando la coherencia importa más que la disponibilidad.
Enruta cada entrada al Robot que la acepta
La extracción de texto falla con más frecuencia en el paso de enrutamiento que en el reconocimiento. /document/ocr actualmente solo acepta PDF, así que un archivo de Word, una presentación de PowerPoint o un TIFF enviados directamente allí no producirán texto. Convierte esos archivos primero con /document/convert y envía en su lugar las fotografías y las capturas de pantalla a /image/ocr. Por lo general basta con un solo Step de /file/filter al inicio del pipeline para repartir el tráfico por tipo.
Ambos Robots aceptan los mismos tres parámetros. provider elige entre AWS y GCP, y de forma predeterminada usa la selección automática. granularity decide entre un solo bloque de texto y una lista de fragmentos con su posición. format determina si el texto se devuelve como archivo o se adjunta al objeto de archivo para que Steps posteriores lo lean.
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"pdfs": {
"use": ":original",
"robot": "/file/filter",
"accepts": [
["${file.mime}", "regex", "application/pdf"]
]
},
"photos": {
"use": ":original",
"robot": "/file/filter",
"accepts": [
["${file.mime}", "regex", "^image/"]
]
},
"deskewed": {
"use": "pdfs",
"robot": "/document/autorotate"
},
"pdf_text": {
"use": "deskewed",
"robot": "/document/ocr",
"format": "json",
"granularity": "full"
},
"photo_text": {
"use": "photos",
"robot": "/image/ocr",
"format": "json",
"granularity": "full"
}
}
}Archivos PDF
/document/ocr los procesa directamente. Todo lo demás que sea un documento debería pasar primero por /document/convert.
Fotografías y capturas de pantalla
/image/ocr los acepta sin conversión, lo que importa para la captura de recibos y las subidas desde móviles.
Lotes mixtos
Filtra por tipo desde el principio para que un único formato inesperado no haga fallar una Assembly que por lo demás es válida.
Elige la forma de la salida antes de elegir el proveedor
El parámetro format influye en el pipeline que lo rodea más que cualquier otra decisión. json y text devuelven un archivo, lo que se adapta bien al archivado y a la indexación. meta no devuelve ningún archivo y, en su lugar, guarda las cadenas en el objeto de archivo bajo ${file.meta.recognized_text}, donde Steps posteriores pueden leerlas. Eso es lo que permite filtrar por el contenido reconocido, o incrustar el texto extraído en una imagen, sin ejecutar el reconocimiento dos veces.
granularity se deriva de la misma pregunta. full devuelve un solo bloque, que es lo que necesita un índice de búsqueda. list devuelve fragmentos con su posición, que es lo que necesitas para censurar una región, extraer un campo concreto o resaltar una coincidencia en un visor. Elegir list cuando solo necesitas un índice de búsqueda no cuesta nada, pero produce un resultado que da más trabajo consumir.
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"recognized": {
"use": ":original",
"robot": "/document/ocr",
"format": "meta",
"granularity": "full",
"provider": "gcp"
},
"only_invoices": {
"use": "recognized",
"robot": "/file/filter",
"accepts": [
["${file.meta.recognized_text}", "regex", "(?i)invoice"]
]
}
}
}meta
Mantiene el texto en el objeto de archivo para Steps posteriores. No se produce ningún archivo.
json y text
Producen un archivo para almacenar o indexar. Úsalos cuando el texto sale de la Assembly.
granularidad list
Añade posiciones, que la censura y la extracción de campos necesitan y un índice de búsqueda no.
Prepara la entrada en lugar de cambiar de proveedor
Cuando la calidad del reconocimiento decepciona, el reflejo es probar con el otro proveedor. Preparar la entrada suele rendir más. Los escaneos llegan rotados, torcidos y con iluminación despareja, y cada uno de esos factores cuesta exactitud antes de que el modelo vea la página. Ejecutar /document/autorotate antes del reconocimiento corrige la orientación, y normalizar el contraste en las páginas fotografiadas elimina una causa común de líneas perdidas.
El costo se comporta igual. El OCR conlleva un cargo mínimo de un megabyte por archivo, de modo que cien escaneos de una sola página enviados individualmente cuestan bastante más que esas mismas cien páginas agrupadas en una sola Assembly. Agrupa en lotes cuando la carga de trabajo lo permita, y mantén el reconocimiento interactivo separado de los rellenos masivos de datos históricos, para que una importación grande no pueda retrasar a un usuario que espera una sola subida.
Corrige la inclinación primero
/document/autorotate antes del reconocimiento corrige la causa más común de resultados deficientes.
Agrupa los archivos pequeños
El cargo mínimo de un megabyte por archivo hace que las Assemblies por página resulten caras a gran volumen.
Colas separadas
Mantén los rellenos masivos de datos históricos lejos de las subidas interactivas, para que los usuarios no queden en cola detrás de una importación.
Trata el texto reconocido como evidencia, no como un registro
Ambos Robots llaman a servicios de IA de terceros, y esos proveedores reentrenan sus modelos. El mismo PDF puede devolver un texto ligeramente distinto meses después. Eso es manejable siempre que el sistema no suponga lo contrario: guarda el texto reconocido junto al archivo de origen, con el proveedor y la fecha en que se produjo, para que una diferencia posterior sea visible en lugar de silenciosa.
Esa misma propiedad hace que las aserciones de coincidencia exacta sean una mala opción en las pruebas. Comprueba que aparece una frase conocida, o que un campo se analiza correctamente, en lugar de comparar una transcripción completa. Cuando un valor tiene consecuencias legales o financieras, conserva el documento de origen como registro y trata el texto extraído como un índice hacia él.
Guarda la procedencia
Conserva el proveedor y la fecha de ejecución junto al texto para poder detectar la deriva más adelante.
Usa aserciones flexibles
Comprueba la presencia del contenido esperado en lugar de una transcripción exacta.
Conserva el original
El documento de origen sigue siendo el registro; el texto reconocido es una forma de encontrarlo.
Extrae campos individuales en lugar de transcripciones completas
Muchas cargas de trabajo no quieren el texto de un documento en absoluto. Quieren un número de factura, una fecha, un total o la región de una página que se debe tachar antes de compartir el archivo. Ahí es donde granularity: "list" justifica su costo: devuelve fragmentos con posiciones, de modo que un Step posterior puede seleccionar por ubicación en lugar de analizar un único bloque indiferenciado.
Anclarse solo en el diseño es frágil, porque un proveedor rediseña un formulario y todas las coordenadas cambian de sitio. Anclarse en una etiqueta cercana y usar la posición solo para desambiguar entre coincidencias repetidas sobrevive a ese rediseño. Cuando el conjunto de documentos es realmente impredecible, pasar el texto reconocido a un modelo con un esquema de salida estricto resulta más robusto que una colección creciente de expresiones regulares.
Posiciones para el tachado
Las coordenadas de los fragmentos permiten que un Step posterior cubra una región en lugar de reescribir el archivo.
Ancla en las etiquetas
Busca el texto junto a una etiqueta conocida y usa la posición solo para desempatar.
Esquemas antes que patrones
Para diseños impredecibles, un esquema de extracción tipado envejece mejor que un cúmulo de expresiones regulares.
Decide qué ocurre cuando una página no se puede leer
Todo archivo documental contiene páginas que el reconocimiento no puede procesar: la fotografía de una pantalla, un fax de un fax, escritura a mano en un margen. Devolver texto vacío en esos casos es el comportamiento correcto, y el pipeline necesita un destino al que enviarlas. Tratar un resultado vacío o muy corto como una señal de enrutamiento, y no como un fallo, mantiene el lote en movimiento y pone las excepciones ante una persona.
Reintentar el mismo archivo con el mismo proveedor rara vez ayuda, porque nada de la entrada cambió. Reintentar después de un Step de preparación, como la rotación automática, a veces sí ayuda. Registrar qué archivos no produjeron nada, y cuántos, convierte un problema de calidad invisible en un número que se puede vigilar a lo largo del tiempo.
Un resultado vacío es una señal
Enruta los resultados cortos o vacíos a revisión en lugar de contarlos como fallos.
Reintenta de otra forma
Un segundo intento solo ayuda si la entrada se preparó de otra forma esa segunda vez.
Haz seguimiento de la tasa
Medir las páginas ilegibles a lo largo del tiempo revela problemas de escáner y de recepción en su origen.
Detalles técnicos que conviene conocer
- Tanto /document/ocr como /image/ocr aceptan los parámetros provider, granularity y format. El parámetro provider usa de forma predeterminada la selección automática y se puede fijar en aws o gcp.
- El parámetro format acepta json, meta y text. La opción meta no devuelve ningún archivo y, en su lugar, almacena las cadenas en el objeto de archivo bajo ${file.meta.recognized_text}, que los Steps posteriores pueden leer.
- El parámetro granularity acepta full y list. Usa list cuando necesites posiciones por fragmento para el tachado o la extracción de campos, y full cuando solo necesites el texto.
- El OCR conlleva un cargo mínimo de un megabyte por archivo, así que agrupar muchos escaneos pequeños en una sola Assembly resulta más barato que emitir una Assembly por página.
- La calidad del reconocimiento depende mucho más de la preparación de la entrada que de la elección del proveedor. Enderezar la inclinación con /document/autorotate y normalizar el contraste antes del reconocimiento suele dar mejores resultados que cambiar de proveedor.
- Como la salida varía a medida que los proveedores reentrenan sus modelos, guarda el texto reconocido junto con el archivo de origen y la fecha en que se produjo, para que un cambio posterior sea visible en lugar de silencioso.
Un enfoque práctico
- 1
Divide la entrada por tipo: los PDF a /document/ocr, las fotografías a /image/ocr y todo lo demás primero por /document/convert.
- 2
Endereza los escaneos con /document/autorotate antes del reconocimiento.
- 3
Elige el formato meta cuando un Step posterior consuma el texto, y json o text cuando lo vayas a almacenar.
- 4
Guarda el texto junto con el archivo de origen, el proveedor y la fecha de ejecución para que la deriva siga siendo visible.
Cuándo resulta útil Transloadit
Usa /document/ocr para PDF y /image/ocr para fotografías y capturas de pantalla. Convierte primero otros formatos de documento a PDF con /document/convert. Elige el formato meta cuando Steps posteriores necesiten el texto, y los formatos json o text cuando lo vayas a almacenar.
Límite de la arquitectura
El OCR se ejecuta en servicios de IA de terceros cuyos modelos cambian con el tiempo, por lo que la misma entrada puede devolver un texto distinto más adelante. Trata el texto reconocido como evidencia para búsquedas, no como un registro de referencia, y nunca hagas aserciones sobre cadenas exactas en las pruebas.
Preguntas frecuentes
¿Por qué /document/ocr no devuelve nada con mi archivo de Word?
Actualmente solo acepta PDF. Ejecuta primero /document/convert para generar un PDF y luego pasa ese resultado a /document/ocr. Lo mismo se aplica a los archivos de PowerPoint y a los documentos basados en imágenes, como los TIFF de varias páginas.
¿Debería usar /document/ocr o /image/ocr?
Usa /document/ocr para los PDF y /image/ocr para fotografías, capturas de pantalla y tomas de cámara. Si un único endpoint de subida recibe ambos tipos, divide el tráfico con un Step /file/filter en lugar de enviarlo todo a un solo Robot.
¿Cómo uso el texto extraído en un Step posterior?
Configura format: "meta". No se devuelve ningún archivo y las cadenas se guardan en el objeto de archivo bajo ${file.meta.recognized_text}, que los Steps posteriores pueden leer para filtrar, aplicar marcas de agua o enrutar. Usa en su lugar json o text cuando el texto salga de la Assembly para almacenarse o indexarse.
¿Puedo obtener resultados consistentes entre ejecuciones?
Fijar provider en aws o gcp elimina la variación de la selección automática, pero los proveedores siguen reentrenando sus propios modelos, así que la salida puede cambiar con el tiempo de todos modos. Guarda el texto junto con su proveedor y la fecha de ejecución, y evita hacer aserciones sobre cadenas exactas en las pruebas.
¿Cuál es la forma más económica de procesar un gran archivo de escaneos?
Agrupa los archivos por lotes en menos Assemblies. Cada archivo tiene un cargo mínimo de un megabyte, por lo que las Assemblies por página resultan bastante más caras a gran volumen. Ejecuta el relleno retroactivo por separado del tráfico interactivo para que una importación larga no retrase las subidas que un usuario está esperando.