3 puntos por GN⁺ 2024-11-17 | 1 comentarios | Compartir por WhatsApp
  • Es una herramienta web que reduce el trabajo de transcribir imágenes de documentos a texto y luego reorganizarlas, convirtiéndolas en Markdown estructurado
  • La entrada web actual se centra en la carga de imágenes, y se informa que el soporte para PDF estará disponible pronto
  • El servicio funciona sobre la base del paquete npm llama-ocr y Together AI
  • En JavaScript, se puede pasar filePath y TOGETHER_API_KEY a la función ocr para obtener el resultado en Markdown
  • Al admitir tanto cargas desde la web como llamadas desde código, permite probar la conversión de imágenes de documentos según flujos manuales o de desarrollo

Convertir documentos en imagen a Markdown

  • LlamaOCR.com es una herramienta que convierte documentos cargados a Markdown
  • La página web indica “Upload an image to turn it into structured markdown” y genera Markdown estructurado a partir de la carga de una imagen
  • El soporte para PDF aparece como “soon”, por lo que el alcance actual está centrado en imágenes

Cómo usarlo desde código

  • Con el paquete npm llama-ocr, se puede ejecutar OCR desde código JavaScript
import { ocr } from 'llama-ocr';

const markdown = await ocr({
  filePath: './trader-receipt.jpg',
  apiKey: process.env.TOGETHER_API_KEY
});
  • El ejemplo coloca la ruta del archivo de imagen en filePath y pasa la variable de entorno TOGETHER_API_KEY en apiKey
  • El servicio se basa en llama-ocr y Together AI

1 comentarios

 
GN⁺ 2024-11-17
Opiniones en Hacker News
  • Soy quien creó llama-ocr. Gracias por compartirlo y por la buena recepción. Necesitaba una API de OCR simple, así que la hice a principios de esta semana; parsea imágenes a Markdown estructurado usando Llama 3.2 Vision, alojado en Together.ai.
    También está disponible como paquete npm. Planeo agregar funciones como parseo de PDF y respuestas JSON; si tienen preguntas, intentaré responderlas.

    • Le pasé una factura con 3 ítems iguales y, en vez de exportarla como 3 viñetas como de costumbre, creó una tabla con una columna de cantidad que no estaba en el papel original.
      Me pregunto si una transformación tan grande como esa es un comportamiento esperado o deseable. Como la salida a veces es una lista con viñetas y otras veces una tabla, el procesamiento automático posterior se vuelve un poco más difícil.
    • Tuve dificultades para extraer contenido científico de PDFs de pósteres; por ejemplo, Nougat suele fallar cuando cambia el layout.
      Me pregunto si también contemplaste ese caso de uso.
    • “Need an example image? Try ours.” es una buena idea. Ojalá más servicios ofrecieran una función similar.
    • Me pregunto qué tan buena es la precisión.
      Quisiera saber qué tipos de errores comete en comparación con los sistemas de OCR existentes.
    • Me pregunto si también sería posible una opción para usar un LLM local.
  • Esto no es más que enviar la imagen a Llama 3.2 Vision y pedirle que lea el texto.
    Como cualquier otra salida de un LLM, es vulnerable a alucinaciones. No está leyendo formas de letras a partir de píxeles, sino que decide el texto mientras describe la imagen con base en imágenes y captions que aprendió. En especial, si algo es difícil de leer, puede inventarse palabras por completo.

    • A otros sistemas de OCR les pasaba lo mismo; solo que en este contexto no llamábamos alucinaciones a esos errores.
  • Se ve genial. Últimamente hago mucho OCR, así que me alegra ver una herramienta nueva en este campo. El líder actual en PDF→Markdown probablemente sea Nougat de Facebook[1], y me gustaría conectarlo con DSPy para comparar cuál funciona mejor con libros de filosofía.
    El proyecto Zerox[2] de la startup enlazada por este repositorio también se ve bien y, como mínimo, su promoción es mucho más pulida que la de Nougat. Si pasa por aquí alguien realmente experto, me gustaría recibir correcciones o consejos.
    Tengo dos dudas. 1) Me pregunto qué es Together.ai y si este modelo es open source. El sitio web parece un servicio de hosting, y la página de “Custom Models”[3] se ve más como fine-tuning personalizado que como entrenamiento de modelos propietarios propios. Parece que tienen un perfil en HuggingFace, pero no queda claro si de verdad es de ellos https://huggingface.co/TogetherAI
    2) En GitHub dice “hosted demo”, pero la parte alojada parece ser solo una WebGUI pequeña y prolija. Me pregunto si eso significa que esta función, ahora y en el futuro, solo podrá usarse mediante llamadas a la API.
    P. D.: En el navegador de escritorio, los enlaces del header están rotos y no se dispara el onClick.
    [1] https://facebookresearch.github.io/nougat/
    [2] https://github.com/getomni-ai/zerox
    [3] https://www.together.ai/products#custom-models

    • El autor del proyecto es de DevRel de Together.ai. Aun así, es una excelente forma de promocionar herramientas para desarrolladores.
    • Supongo que together.ai está patrocinando al menos parte de la demo.
    • Esperaba que pudiera autoalojarse, por privacidad y costos.
    • together.ai ofrece más de 100 modelos open source, incluido Llama 3.2 multimodal, mediante una API compatible con OpenAI.
  • Noté algo peculiar. Subí un webcómic como ejemplo y, aunque todos los diálogos estaban en mayúsculas, la salida mezcló de forma inconsistente mayúsculas/minúsculas tipo oración y tipo título según el panel.
    También probé un problema para el que realmente querría usar OCR. Tengo diapositivas viejas que necesitan digitalizarse y la mayoría tienen etiquetas; al subir una, la describió como si pareciera una diapositiva o un fotograma de película, vieja y amarillenta, con un recorte rectangular oscuro en el centro, y dijo que el texto era “Once Upon a Time” y el número “1069”.
    La descripción innecesariamente repetitiva de la diapositiva ya es un problema, pero el texto real no estaba en cursiva ni nada: era “Once Uniquitous.”, y el número era 106g. Era muy claramente una ‘g’, no un ‘9’.
    Lo interesante es que podría ser un ejemplo de sesgo del modelo. Vio la diapositiva como algo demasiado antiguo y terminó alucinando un título totalmente cliché; además, el rectángulo negro era resultado de iluminarla desde el frente para que no se vieran las partes transparentes, y eso se le pasó.
    Además, parece que la API en sí tiene límites de tamaño de archivo o resolución que no están documentados.

  • Hace poco usé llama3.2-vision para procesar hojas de pujas en papel de una subasta benéfica, y fue bastante preciso incluso con letra manuscrita bastante mala. Me gustaría usarlo también en el evento del año que viene.
    Dicho eso, es bastante molesto lo difícil que es hacer que genere CSV de forma consistente. ChatGPT y Gemini parecen mejores en esa parte, aunque no llegué a automatizarlo.
    La escala es de unas 100 páginas de hojas de pujas, así que un poco de limpieza manual está bien. Sin duda es mejor que quemar horas de voluntarios.
    https://github.com/philips/paper-bidsheets

    • Me gustaría saber qué tan bien se compara Handwriting OCR(https://www.handwritingocr.com) para esta tarea.
      No es gratis, pero la precisión en documentos manuscritos está entre las mejores. Soy el fundador, así que estoy sesgado, pero el nivel de precisión actual realmente me entusiasma. Para un proyecto de 100 páginas, solo costaría 12 dólares y podría ahorrar tiempo.
    • ¿Qué tal si se deja la parte de OCR a llama3.2-vision y se pasa la conversión a CSV a ChatGPT?
  • Últimamente hice bastante OCR, sobre todo para digitalizar texto en fotos familiares. Los modelos de OCR comunes son pésimos, y los LLM lo hicieron mucho mejor. Entre los modelos que probé, Gemini Flash fue abrumadoramente superior, pero aun así tuvo suficientes fallos y alucinaciones como para que fuera más rápido escribirlo a mano
    Es frustrante que parezca que casi funciona, pero no. Esta herramienta parece peor. A veces responde solo con el texto, y otras veces da una descripción completa como “The image is a scanned document with handwritten text...”. Esperaba que hubiera algo como un fine-tuning que pudiera superar a Gemini Flash; habría ahorrado mucho tiempo, así que es una lástima

    • Me pregunto si probaron hacer downscaling de las imágenes. Empecé a obtener mejores resultados con imágenes de menor resolución. Usé escaneos hechos con la cámara de un celular
      convert -density 76 input.pdf output-%d.png
      https://github.com/philips/paper-bidsheets
    • Para modelos comunes, el estado del OCR open source es bastante malo. Lamentablemente, las opciones cerradas como Microsoft y Google son mucho mejores. Me pregunto si también probaron esas
      Flash suena interesante; también me da curiosidad qué LLM probaron
    • Hace poco corrí OCR sobre un corpus de imágenes con gpt-4o y obtuve resultados bastante buenos. La lección más importante que saqué es que, aunque uses un LLM sofisticado, la preparación de datos común y corriente sigue siendo importante
      Recortar las imágenes para dejar solo las partes con texto, quitar los bordes y aumentar el contraste ayudó muchísimo. Escribí esto en 2015, pero sigue aplicando muy bien incluso para GPT: https://www.danvk.org/2015/01/07/finding-blocks-of-text-in-a...
      Para GPT fue mejor darle unos pocos párrafos o menos por vez, en lugar de una página completa. Cuanto más corto el texto, menor la probabilidad de alucinaciones
    • Qué lástima, yo justo estoy intentando hacer exactamente lo mismo. Estoy digitalizando fotos familiares, y algunas tienen alemán en el reverso
      El OCR del que se habló recientemente era pésimo, y esperaba que esto fuera mejor. ChatGPT 4o funcionó bien cuando pegaba imágenes individuales en el chat, pero todavía no probé la API. No sé cuánto costaría procesar 6500 fotos, y aunque muchas están en blanco, tampoco tengo una forma fácil de filtrarlas
    • Me pregunto si probaron Claude
      Todavía no es bueno devolviendo la ubicación del texto, pero en mis pruebas su rendimiento de OCR fue increíble
  • Me pregunto si esto debería ser un post de “Show HN”. Parece simplemente un frontend, y tampoco veo nada que lo vincule directamente con Llama en el nombre. Tal vez together.ai haya proporcionado el espacio en la nube

  • Probé una frase generada colocando 500 círculos con un algoritmo genético, y dibujada con círculos físicos reales
    https://www.instagram.com/marekgibney/p/BiFNyYBhvGr/
    Curiosamente, reconoce bien los círculos, pero no ve la frase. Respondió algo como que “la imagen no contiene texto ni elementos que puedan representarse en Markdown; es solo una composición visual de círculos y no hay información que traducir a Markdown”

    • Partiendo de la idea de que se lee si entrecierras los ojos, apliqué desenfoque gaussiano a la imagen y obtuve una respuesta que decía que el texto borroso se leía como “STOP THINKING IN CIRCLES.”
      Como las respuestas no son determinísticas, también probé varias veces con la imagen original, pero nunca tuvo éxito. En cambio, todos los efectos de filtro pasabajos que apliqué funcionaron con alta tasa de éxito
      https://imgur.com/q7Zd7fa
    • Yo tampoco puedo leer eso
      Desde lejos es más fácil de leer
    • Me pregunto si el LLM original alguna vez fue entrenado con este tipo de material original
      La forma en que usaron el algoritmo genético está bastante buena. Me gustaría ver el código, o al menos la función de recompensa
    • Antes de ver la respuesta correcta, yo tampoco pude leer nada salvo “stop”
    • No entiendo qué tiene de interesante. La imagen no parece nada, y para ver las letras apenas se distinguen si la miras desde cierto ángulo
  • Me dio risa. Le pasé 3 capturas de pantalla de un documento largo y lo procesó relativamente bien, pero al corregirlo vi que la IA había inventado un párrafo que no estaba en el original
    Probablemente, por la naturaleza de las capturas, algunas oraciones o párrafos quedaron cortados a la mitad, y eso activó la tendencia del LLM a rellenar los espacios en blanco. No pudo dejar un párrafo inconcluso tal cual, e incluso agregó un breve párrafo de conclusión que no existía en absoluto en el documento original

    • No entiendo que una tecnología con aunque sea una mínima posibilidad de inventar cosas se considere para uso en el mundo real
  • Probé con un escaneo viejo del diagrama esquemático de una motherboard Asus P3B-F de 1997
    Solo extrajo parte del texto del bloque de título, por ejemplo el nombre del proyecto y la fecha, y aun con una tipografía clara mezcló todos los 8/B y 1/I
    La información realmente útil terminó convertida en algo como “Tables / Table 1: [Insert table 1 here] / Other Elements / [Insert other elements here]”