amaliogomezlopez/GLM-OCR-AMALIOMETRIA

Transcribe lo que quieras con GLM OCR. Plug and play

Python

11

2 commits

updated Mar 20, 2026

See the code

README

GLM-OCR Amaliometría 🔍

Proyecto para testear las capacidades de GLM-OCR (modelo de 0.9B parámetros) ejecutándose en local con Ollama para transcripción de texto desde imágenes y PDFs, generando JSONs estructurados consistentes.

📊 Sobre GLM-OCR

  • Modelo: glm-ocr:latest (2.2GB, 128K contexto)
  • Score: 94.62 en OmniDocBench V1.5 (#1 del benchmark)
  • Capacidades: Reconocimiento de texto, tablas, fórmulas, código, sellos, escritura a mano
  • Idiomas: Español, Inglés, Francés, Alemán, Japonés, Coreano, Ruso y más
  • Tech Report: arXiv:2603.10910

Nota: Requiere Ollama 0.18.1+ (versiones anteriores tienen un bug con el procesamiento de imágenes del modelo glmocr).

📁 Estructura del Proyecto

GLM-OCR/
├── config/
│   └── settings.py          # Configuración central (rutas, prompts, modelo)
├── input/
│   ├── images/              # ← PON TUS IMÁGENES AQUÍ (.png, .jpg, .jpeg, .webp)
│   └── pdfs/                # ← PON TUS PDFs AQUÍ
├── output/
│   ├── json/                # JSONs estructurados generados
│   ├── markdown/            # Resultados en Markdown
│   └── raw/                 # Respuestas crudas del modelo
├── src/
│   ├── ocr_client.py        # Cliente Ollama API con preprocesamiento SDK
│   ├── invoice_parser.py    # Parser regex de facturas → JSON estructurado
│   ├── pdf_handler.py       # Conversión PDF → imágenes
│   ├── processor.py         # Orquestador del pipeline
│   ├── result_formatter.py  # Parseo y guardado de resultados
│   └── utils.py             # Utilidades (logger, base64, etc.)
├── logs/                    # Logs de ejecución
├── run.py                   # Procesar TODOS los archivos
├── run_single.py            # Procesar UN archivo individual
├── check_setup.py           # Verificar que todo está listo
└── requirements.txt         # Dependencias Python

🚀 Setup Rápido

1. Requisitos previos

  • Python 3.10+
  • Ollama 0.18.1+ instalado y corriendo (ollama.com)

2. Descargar el modelo

ollama pull glm-ocr:latest

3. Instalar dependencias Python

pip install -r requirements.txt

4. Verificar que todo funciona

python check_setup.py

5. Poner archivos en input/

  • Imágenes → input/images/
  • PDFs → input/pdfs/

6. Ejecutar

# Procesar facturas → JSON estructurado (default)
python run.py --mode invoice

# Otros modos
python run.py --mode text             # Solo texto plano
python run.py --mode table            # Reconocimiento de tablas
python run.py --mode markdown         # Conversión a Markdown
python run.py --mode structured_json  # JSON genérico

# Procesar un archivo individual
python run_single.py input/images/factura1.PNG --mode invoice

🏗️ Arquitectura del Pipeline

El pipeline opera en dos fases:

  1. OCR con GLM-OCR: El modelo extrae texto/markdown de la imagen usando el endpoint /api/generate de Ollama, con preprocesamiento de imagen compatible con el SDK oficial (smart_resize a 28px, conversión RGBA→RGB, codificación JPEG).

  2. Estructuración con Parser: Para el modo invoice, el texto OCR se parsea con regex en invoice_parser.py extrayendo: número de factura, fechas, emisor/receptor, líneas de detalle (descripción, cantidad, precio, total), subtotal, descuento, IVA, retención, total y datos de pago.

📋 Modos de Procesamiento

ModoDescripciónOutput
structured_jsonExtrae texto y lo estructura en JSON con tipos de bloqueoutput/json/
textReconocimiento de texto planooutput/markdown/
tableReconocimiento de tablasoutput/markdown/
markdownDocumento completo en Markdownoutput/markdown/
figureReconocimiento de figuras/gráficosoutput/markdown/

📦 Formato JSON de Salida

{
  "pages": [
    {
      "page": 1,
      "blocks": [
        {
          "type": "title",
          "content": "Título del documento",
          "order": 1
        },
        {
          "type": "paragraph",
          "content": "Texto del párrafo extraído...",
          "order": 2
        },
        {
          "type": "table",
          "content": "| Col1 | Col2 |\n|------|------|\n| A | B |",
          "order": 3
        }
      ]
    }
  ]
}

⚙️ Configuración

Edita config/settings.py para ajustar:

  • OLLAMA_BASE_URL — URL de Ollama (default: http://localhost:11434)
  • OLLAMA_MODEL — Modelo a usar (default: glm-ocr:latest)
  • PDF_DPI — Calidad de conversión PDF→imagen (default: 300)
  • PROMPTS — Prompts personalizados para cada modo

🔗 Referencias

Contributors

amaliogomezlopez/GLM-OCR-AMALIOMETRIA

Transcribe lo que quieras con GLM OCR. Plug and play

Python

11

2 commits

updated Mar 20, 2026

See the code

README

GLM-OCR Amaliometría 🔍

Proyecto para testear las capacidades de GLM-OCR (modelo de 0.9B parámetros) ejecutándose en local con Ollama para transcripción de texto desde imágenes y PDFs, generando JSONs estructurados consistentes.

📊 Sobre GLM-OCR

  • Modelo: glm-ocr:latest (2.2GB, 128K contexto)
  • Score: 94.62 en OmniDocBench V1.5 (#1 del benchmark)
  • Capacidades: Reconocimiento de texto, tablas, fórmulas, código, sellos, escritura a mano
  • Idiomas: Español, Inglés, Francés, Alemán, Japonés, Coreano, Ruso y más
  • Tech Report: arXiv:2603.10910

Nota: Requiere Ollama 0.18.1+ (versiones anteriores tienen un bug con el procesamiento de imágenes del modelo glmocr).

📁 Estructura del Proyecto

GLM-OCR/
├── config/
│   └── settings.py          # Configuración central (rutas, prompts, modelo)
├── input/
│   ├── images/              # ← PON TUS IMÁGENES AQUÍ (.png, .jpg, .jpeg, .webp)
│   └── pdfs/                # ← PON TUS PDFs AQUÍ
├── output/
│   ├── json/                # JSONs estructurados generados
│   ├── markdown/            # Resultados en Markdown
│   └── raw/                 # Respuestas crudas del modelo
├── src/
│   ├── ocr_client.py        # Cliente Ollama API con preprocesamiento SDK
│   ├── invoice_parser.py    # Parser regex de facturas → JSON estructurado
│   ├── pdf_handler.py       # Conversión PDF → imágenes
│   ├── processor.py         # Orquestador del pipeline
│   ├── result_formatter.py  # Parseo y guardado de resultados
│   └── utils.py             # Utilidades (logger, base64, etc.)
├── logs/                    # Logs de ejecución
├── run.py                   # Procesar TODOS los archivos
├── run_single.py            # Procesar UN archivo individual
├── check_setup.py           # Verificar que todo está listo
└── requirements.txt         # Dependencias Python

🚀 Setup Rápido

1. Requisitos previos

  • Python 3.10+
  • Ollama 0.18.1+ instalado y corriendo (ollama.com)

2. Descargar el modelo

ollama pull glm-ocr:latest

3. Instalar dependencias Python

pip install -r requirements.txt

4. Verificar que todo funciona

python check_setup.py

5. Poner archivos en input/

  • Imágenes → input/images/
  • PDFs → input/pdfs/

6. Ejecutar

# Procesar facturas → JSON estructurado (default)
python run.py --mode invoice

# Otros modos
python run.py --mode text             # Solo texto plano
python run.py --mode table            # Reconocimiento de tablas
python run.py --mode markdown         # Conversión a Markdown
python run.py --mode structured_json  # JSON genérico

# Procesar un archivo individual
python run_single.py input/images/factura1.PNG --mode invoice

🏗️ Arquitectura del Pipeline

El pipeline opera en dos fases:

  1. OCR con GLM-OCR: El modelo extrae texto/markdown de la imagen usando el endpoint /api/generate de Ollama, con preprocesamiento de imagen compatible con el SDK oficial (smart_resize a 28px, conversión RGBA→RGB, codificación JPEG).

  2. Estructuración con Parser: Para el modo invoice, el texto OCR se parsea con regex en invoice_parser.py extrayendo: número de factura, fechas, emisor/receptor, líneas de detalle (descripción, cantidad, precio, total), subtotal, descuento, IVA, retención, total y datos de pago.

📋 Modos de Procesamiento

ModoDescripciónOutput
structured_jsonExtrae texto y lo estructura en JSON con tipos de bloqueoutput/json/
textReconocimiento de texto planooutput/markdown/
tableReconocimiento de tablasoutput/markdown/
markdownDocumento completo en Markdownoutput/markdown/
figureReconocimiento de figuras/gráficosoutput/markdown/

📦 Formato JSON de Salida

{
  "pages": [
    {
      "page": 1,
      "blocks": [
        {
          "type": "title",
          "content": "Título del documento",
          "order": 1
        },
        {
          "type": "paragraph",
          "content": "Texto del párrafo extraído...",
          "order": 2
        },
        {
          "type": "table",
          "content": "| Col1 | Col2 |\n|------|------|\n| A | B |",
          "order": 3
        }
      ]
    }
  ]
}

⚙️ Configuración

Edita config/settings.py para ajustar:

  • OLLAMA_BASE_URL — URL de Ollama (default: http://localhost:11434)
  • OLLAMA_MODEL — Modelo a usar (default: glm-ocr:latest)
  • PDF_DPI — Calidad de conversión PDF→imagen (default: 300)
  • PROMPTS — Prompts personalizados para cada modo

🔗 Referencias

Contributors

Languages

Python

100.0%