El consejo que todos dan sobre el escaneo de texto es que use la resolución más alta que pueda y obtenga la iluminación correcta. Ejecuté el motor de este sitio contra un conjunto de imágenes dañadas deliberadamente para averiguar cuál de esos asuntos, y la respuesta fue ninguna. La misma frase surgió perfectamente de una imagen de un tercio del tamaño original, perfectamente de texto gris sobre fondo gris, y perfectamente de un JPEG guardado en Quality 25. Lo que destrozó fue inclinar la página cinco grados. Cada número a continuación salió de esa carrera y apuntan a una lista de verificación diferente a la habitual.
TL;Dr: Tesseract lee el texto renderizado limpiamente hasta que dos cosas específicas salen mal. La inclinación es la primera: de 0 a 3 grados de sesgo dio una tasa de error de carácter del 0%, 5 grados dieron 2.9%, 12 grados dieron 16.7% y 20 grados dieron 32.4%. El tamaño es el segundo, y es un acantilado en lugar de una pendiente: el texto se mantuvo perfecto hasta una altura mayúscula de unos 7 píxeles y luego colapsó hasta un 85,3 % de errores a 5,8 píxeles. Bajo contraste, desenfoque y de compresión JPEG pesada apenas se registró. Endereza la imagen antes de hacer cualquier otra cosa. los Convertidor de imagen a texto Ejecuta el motor en tu navegador, por lo que la imagen nunca se carga.
¿Cómo se produjeron estos números?
Al renderizar una oración conocida, dañar la imagen de una manera a la vez, leerla y contar las ediciones necesarias para reparar el resultado.
La métrica es la tasa de error de caracteres: la distancia entre lo que decía la imagen y lo que devolvía el motor, dividido por la longitud de la verdad. Una tasa de error del 2% en una línea de cincuenta caracteres es un carácter incorrecto. El texto era de tres líneas que mezclaban prosa, un número de factura, una fecha, una moneda, una dirección de correo electrónico y un número de teléfono, porque los errores que importan en la práctica ocurren en el segundo tipo de contenido en lugar del primero.
Una advertencia pertenece a la parte superior en lugar de enterrarla. Estas son imágenes renderizadas, no fotografías. Cada uno aísla una única variable, que es la única forma de atribuir un fallo a una causa, pero llega una foto real de una página con varias a la vez: una ligera inclinación, una iluminación desigual en el pliegue, un desenfoque de movimiento en un borde y una cámara que agudiza todo antes de guardar. Los umbrales a continuación son, por lo tanto, los mejores casos. Una fotografía que está justo en el límite de dos ejes hará peor de lo que sugiere cualquiera de los números.
El motor es el modelo LSTM de Tesseract 4 a través de tesseract.js, que es exactamente lo que ejecuta la herramienta, por lo que estos no son números de un sistema diferente.
¿Cuánto sesgo es demasiado?
Entre tres y cinco grados, que es menos inclinado de lo que notaría.
| rotación | Tasa de error de caracteres | Confianza reportada |
|---|---|---|
| 0 grados | 0.0% | 95 |
| 1 grado | 0.0% | 95 |
| 2 grados | 0.0% | 95 |
| 3 grados | 0.0% | 94 |
| 5 grados | 2,9% | 91 |
| 8 grados | 7.8% | 82 |
| 12 grados | 16,7% | 70 |
| 20 grados | 32,4% | 66 |
No pasa nada durante tres grados y luego se cae de un estante. La razón está en cómo funciona el motor: encuentra líneas de texto y luego corta cada línea en caracteres. Una línea inclinada cruza varias filas de píxeles, por lo que el corte atraviesa la parte superior de algunas letras y la parte inferior de otras, y se pide al modelo que clasifica los fragmentos.
A 5 grados los errores eran pequeños y caros. "fechado" volvió como "fecha" y "total" como "totg)". Ambos son una sola letra dentro de una palabra que un humano leería directamente, y ambos se sentaron junto a un número de factura y una moneda que una persona iba a copiar sin verificar.
Un teléfono que se mantiene a mano sobre una página se sale de forma rutinaria en más de cinco grados. Esta es la única cosa que vale la pena arreglar antes de ejecutar cualquier cosa, y la solución es gratuita: Gire la imagen hasta que las líneas estén niveladas.
¿Qué tan pequeño puede ser el texto antes de que falle el OCR?
Más pequeño de lo que esperas, hasta el punto en que deja de funcionar por completo.
| Ancho de la imagen | Altura de la letra mayú | porcentaje de errores | Confianza |
|---|---|---|---|
| 1600 px | ~29 px | 0.0% | 95 |
| 800 px | ~14 px | 0.0% | 95 |
| 533 px | ~10 px | 0.0% | 92 |
| 400 px | ~7 px | 0.0% | 84 |
| 320 px | ~6 píxel | 85,3% | 41 |
| 240 px | ~4 px | 100.0% | 0 |
Las mismas tres líneas se leen perfectamente en una cuarta parte de su tamaño original, donde cada letra mayúscula tiene una altura de unos siete píxeles. Un paso más abajo y la salida no se puede usar, luego vacía.
Eso es un acantilado, no un degradado, y cambia el consejo. "Utiliza la resolución más alta que tienes" no es incorrecta, pero describe un problema que la mayoría de las imágenes no tienen. Una captura de pantalla de una página web, una foto de un letrero, una imagen de teléfono de una carta impresa: todos estos tienen mucho más de siete píxeles de altura de la letra. Lo que más a menudo tienen es una inclinación.
El lugar donde el acantilado muerde es un cultivo desde la distancia. Texto en el fondo de una foto de vacaciones, un cartel a través de una calle, una línea de letra pequeña dentro de un escaneo de página completa a resolución de pantalla. Si las letras son difíciles de leer para el zoom al 100%, el motor también está cerca de su piso.
¿El bajo contraste arruina la lectura?
No, y este fue el resultado que más contradijo lo que esperaba.
Texto gris en #8A8A8A sobre un fondo gris en #BDBDBD Leer de nuevo con una tasa de error del 0,0% y una confianza de 95, idéntica a la negra sobre blanco. Un desenfoque gaussiano de tres píxeles sobre toda la imagen dio un 0,6%. Un JPEG guardado en Calidad 25 y escalado a la mitad dio 0.0%.
La razón es que el motor no lee sus grises. Binarisana la imagen primero, convirtiendo todo en blanco y negro con un umbral elegido de la imagen, y el contraste uniforme bajo sobrevive intacto. Lo que no sobrevive es el contraste que varía a lo largo de la página, que es lo que produce una sombra o un flash de teléfono: un umbral no puede adaptarse a ambas mitades de la imagen.
Por lo tanto, la versión útil del consejo de iluminación es más estrecha que la habitual. Incluso la iluminación importa. La iluminación brillante no. Una foto tenue y uniformemente iluminada de una página golpea a una brillante con una sombra en el medio.
¿Por qué sale codificado un diseño de dos columnas?
Porque el orden de lectura es un juicio de diseño y el motor lo hace solo con geometría.
Renderé dos bloques de texto uno al lado del otro, tres líneas cada uno, en líneas de base compartidas. El resultado vino entrelazado:
LEFT ONE RIGHT ONE LEFT TWO RIGHT TWO LEFT THREE RIGHT THREE
Cada palabra es correcta. El pedido es inútil. El motor encontró seis líneas de texto en tres posiciones verticales y lee cada fila de ancho, que es el comportamiento correcto para una mesa y el incorrecto para dos columnas de prosa.
Una página de periódico real o un PDF académico a menudo sobrevive a esto, porque la canaleta entre columnas es lo suficientemente amplia y consistente para detectar el paso de segmentación de la página. Una captura de pantalla de un diseño con dos bloques sueltos uno al lado del otro, que es el caso común de este tipo de herramienta, a menudo no lo hace.
La solución confiable es recortar. Ejecute una columna, copie el resultado y luego ejecute la otra. Suena laborioso y toma unos quince segundos, lo que es menos que reconstruir un párrafo cuyas oraciones han sido barajadas.
¿puede leer escritura a mano?
No de manera confiable, y el límite se trata de si las letras se tocan en lugar de si parecen informales.
No podía probar la escritura a mano real sin proporcionar una fotografía, que tendría variables mixtas, así que probé tres fuentes de regularidad decreciente como suplente:
| tipo de letra | porcentaje de errores | Confianza |
|---|---|---|
| cómic sans MS | 0.0% | 95 |
| script de pincel MT | 5,9% | 67 |
| Snell Roundhand | 20,6% | 55 |
Comic Sans es informal y perfectamente legible para el motor, porque sus letras son formas separadas de ancho constante. Snell Roundhand es un guión conectado, y una quinta parte de los personajes se equivocó.
Esa es la verdadera distinción. El modelo de Tesseract se entrenó en el tipo impreso y espera cortar una línea en glifos discretos. La escritura conectada no tiene puntos de corte limpios, por lo que la segmentación falla antes de que el reconocimiento tenga una oportunidad. La escritura genuina es peor que la mano redonda de Snell, no mejor, porque también varía carta a letra.
Si necesita leer la escritura a mano, esta es la herramienta incorrecta y también lo son todos los demás Tesseract Front End. Ese trabajo necesita un modelo capacitado en escritura a mano.
¿Qué personajes se equivoca?
Letras que parecen dígitos y la dirección es consistente.
Renderé una línea de los sospechosos habituales y la leí de vuelta:
truth: O0 l1I 5S 8B 2Z rn/m
read: 00 111 5S 8B 2Z rn/m
El capital O se convirtió en cero. L y Capital L minúsculas se convirtieron en el dígito 1. Las parejas que más se preocupan, 5 contra S y 8 contra B, regresaron correctamente, al igual que RN contra M.
El patrón es que se lee como dígito una letra aislada con un glifo en forma de dígito. En la prosa en ejecución esto rara vez importa, porque el modelo de idioma que lo rodea atrae el resultado a la palabra. En un código de referencia, un número de serie o una placa de licencia, no hay una palabra circundante para ayudar, y ahí es exactamente donde se usa este tipo de herramienta.
Revise cualquier cadena que mezcle letras y dígitos sin espacios. Es la única clase de salida donde el motor está equivocado con confianza.
¿Qué te dice la puntuación de confianza?
Aproximadamente cómo fue la página, y no si el número que te importa es el correcto.
La herramienta muestra la palabra media de confianza como alta, media o baja, con un alto de 85 y superior. Contra las tasas de error medidos, ese mapeo es ampliamente sensato y optimista en el borde:
| estuche | Confianza | Etiqueta | Tasa de error real |
|---|---|---|---|
| Limpio | 95 | alto | 0.0% |
| 5 grados de sesgo | 91 | alto | 2,9% |
| 12 grados de sesgo | 70 | médium | 16,7% |
| 320 px de ancho | 41 | deficiente | 85,3% |
| Guión conectado | 55 | deficiente | 20,6% |
Una puntuación baja es una advertencia confiable: todo lo que obtuvo menos de 60 estaba realmente roto. Una puntuación alta es una evidencia más débil de lo que parece. El caso de 5 grados obtuvo una puntuación de 91, que la interfaz llama alto, mientras que se desgarra silenciosamente una palabra en una línea de factura.
Úselo como una alarma de humo en lugar de una garantía. Bajo significa que no se molesta en leer la salida. Alto significa que la página en su conjunto salió bien, lo cual no es lo mismo que todos los personajes.
¿Cuánto cuesta descargar cada idioma?
entre 0,67 y 2,82 megabytes, una vez, y luego se almacena en caché.
El motor necesita un archivo de datos entrenado por idioma. Debido a que la herramienta solo ejecuta el modelo LSTM, extrae el conjunto de calidad de mejor calidad, que es considerablemente más pequeño que los archivos que la mayoría de los archivos cotizan. Medido desde el CDN, la biblioteca tiene como valor predeterminado:
| estilo | descargar | estilo | descargar |
|---|---|---|---|
| inglés | 2.82 Mb | hindi | 1.32 MB |
| ruso | 2.56 MB | bengalí | 1.31 Mb |
| castellano | 2.00 MB | coreano | 1.50 MB |
| japonés | 1,94 MB | de procedencia alemana | 1.27 Mb |
| Chino (simplificado) | 1,64 MB | idioma portugu | 1.33 Mb |
| árabe | 1.58 Mb | italiano | 1.58 Mb |
| francés | 0,67 MB |
Los trece juntos llegan a unos 21 MB, que es menos de una fotografía de un teléfono moderno. La suposición común de que el chino o el japonés deben ser enormes no se cumplen aquí: el chino simplificado es 1,64 MB, más pequeño que el inglés, porque el archivo almacena una modelo en lugar de una biblioteca de glifos.
¿Por qué la primera carrera es más lenta que la segunda?
Porque el primero es descargar y arrancar un motor, y el segundo es solo leer.
La primera ejecución de un lenguaje obtiene la compilación de WebAssembly de Tesseract, obtiene el archivo de datos de lenguaje e inicializa un trabajador. Después de eso, el trabajador permanece vivo en la página y el navegador en caché el archivo de datos, por lo que una segunda imagen en el mismo idioma comienza de inmediato. Cambiar de idiomas reinicializa al trabajador pero no vuelve a descargar nada que ya se haya recuperado.
El reconocimiento en sí es rápido. En esta máquina, leer la imagen de prueba de tres líneas tomó 186 milisegundos para la versión limpia y entre 70 y 125 milisegundos para los dañados, todo en un trabajador que ya se está ejecutando. Para una página completa de texto, espere uno o dos segundos en lugar de una décima de uno, pero la espera de la primera ejecución que nota está configurada, no la lectura.
Una vez que se almacena un idioma en caché, la herramienta funciona sin ninguna red, que es una capacidad genuina fuera de línea en lugar de una línea de marketing.
¿Qué debe hacer con una imagen antes de ejecutar OCR?
Tres cosas, en este orden, y la primera importa más que las otras dos combinadas.
- enderezarlo. Gire hasta que las líneas de texto estén niveladas. Tres grados es gratis, cinco no.
- recortar al texto. Esto soluciona el problema de la columna, elimina el fondo que el segmentador tiene que rechazar y hace que el texto sea una mayor parte del marco.
- Deja todo lo demás en paz. No afirme, no levante el contraste, no convierta a mano en blanco y negro. De todos modos, el motor se bina y un filtro de afilado agrega un sonido alrededor de los bordes de las letras que antes no estaba allí.
Lo que vale la pena agregar en lugar de eliminar es la resolución, pero solo si está cerca del piso. Pasar de una altura de capital de 7 píxeles a una de 14 píxeles no cambió nada en las medidas. Pasar de 6 a 7 cambió todo.
¿Cuándo es OCR la herramienta equivocada?
Cuando la imagen no es de texto, cuando el texto está escrito a mano y cuando lo que desea es un documento de búsqueda en lugar de un bloque de caracteres.
OCR le da las palabras sin estructura: sin encabezados, sin celdas de tabla, sin límites de párrafo en los que puede confiar, sin orden de lectura en un diseño complejo. Para una cotización de una captura de pantalla o una dirección de una foto que es exactamente correcta. Para convertir un informe escaneado en algo editable, es el primero de varios pasos.
Si lo que desea es una descripción de una imagen en lugar de las palabras impresas en ella, ese es un modelo completamente diferente y una herramienta diferente. Y si la fuente es un PDF que se generó en lugar de escaneado, el texto ya está en el archivo: al extraerlo directamente, el diseño no pierde nada, lo que no puede coincidir ninguna cantidad de reconocimiento de imagen.
¿Por qué se ejecuta esto en el navegador?
Porque las fotos que la gente pone a través de OCR son las que menos les gustaría subir.
Recibos, cartas bancarias, recetas, pasaportes, tarjetas de identificación, foto de un contrato, captura de pantalla de una conversación privada. La alternativa habitual es un sitio que toma su imagen, la procesa en un servidor del que no sabe nada y guarda lo que sea que se mantenga.
Aquí el motor se ejecuta en el Websamsemble en la página, en un trabajador. La imagen se decodifica en la memoria de pestañas, se lee allí y aparece el texto. No se carga nada, no hay cola ni copia almacenada, y después de la primera ejecución, todo funciona sin conexión. Los costos son la descarga única del idioma y que las imágenes muy grandes están limitadas por lo que puede contener la pestaña.
Dos cosas que este sitio aún no hace, y que pertenecen a la misma tubería: enderezar una página fotografiada y recortarla al texto. Ambos tienen que suceder en cualquier visor que ya tenga, que es la costura incómoda en el flujo de trabajo anterior. Lo que viene después está cubierto: si la fuente es una foto de varias páginas, La guía sobre la combinación de imágenes se ocupa de volver a armar los resultados.



