/ Модель

Характеристики

Лицензия
MIT
Архитектура
vision-encoder-decoder · dense
Базовая модель
donut-base-finetuned-cord-v2
Библиотека
transformers
Опубликована
17 авг 2026

donut-boletas-peru

Описание изображенийИзображение → текст3 профессии

Экспериментальная Donut-модель извлекает поля и позиции из изображений печатных чеков Перу и выдаёт структурированные данные.

36скачиваний за 30 дней0лайковвеса обновлены20 сен 2026

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Тесты пользователейпока нет

Никто ещё не опубликовал тест этой модели. Соберите бенчмарк из своих задач — результат появится здесь.

  1. Добавьте модель в бенчмарк

    Вместе с другими моделями категории «Распознавание текста» — сравнение идёт внутри одной категории.

  2. Опишите свои задачи

    Напишите запросы, при необходимости приложите файлы и эталонные ответы.

  3. Запустите и опубликуйте

    Модели ответят на каждую задачу, судья оценит ответы. Опубликованный результат появится на этой странице.

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

Donut para boletas peruanas — модель извлечения структурированных данных из изображений печатных чеков Перу. Это экспериментальная низкоресурсная адаптация Donut, разработанная на основе naver-clova-ix/donut-base-finetuned-cord-v2; модель не использует отдельный OCR. Архитектура VisionEncoderDecoderModel сочетает энкодер Donut-Swin с декодером mBART и содержит около 201 млн параметров.

На вход подаётся изображение целого чека, на выходе формируется текстовое представление данных для преобразования в JSON: продавец, RUC, дата, номер документа, позиции меню, подытог, IGV и итоговая сумма. Модель рассчитана на прототипы и контролируемые эксперименты с печатными чеками на испанском языке из Перу. Для обучения использовались 140 аннотированных чеков из частного датасета, который не распространяется.

В тесте из 20 документов JSON корректно разбирался в 75% случаев, все восемь ключей присутствовали в 50%, а строгой проверке схемы соответствовали 20%; точность извлечения полного списка меню в зарегистрированной оценке составила 0%. Результаты ограничены малым тестовым набором. Лицензия — MIT.

Сценарии применения

  • извлечение продавца, RUC, даты и номера из перуанского чека
  • извлечение сумм подытога, IGV и итога с чека
  • преобразование изображения чека в структурированные поля JSON
  • создание прототипа системы разбора печатных чеков Перу
  • оценка и дообучение извлечения данных из перуанских чеков

Ограничения

Обучение и тестирование проведены на малом частном наборе; в тесте строгой схеме соответствовали только 20% результатов, а точное извлечение меню — 0%. Модель может пропускать или искажать поля и суммы, поэтому каждый результат нужно проверять по исходному изображению; она не валидирована для счетов-фактур, рукописных документов и чеков других стран.

Для каких профессий подходит3

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

Donut para boletas peruanas

Modelo experimental de extracción estructurada, sin OCR explícito, para imágenes de boletas peruanas. Es una adaptación de bajo recurso de naver-clova-ix/donut-base-finetuned-cord-v2, no un modelo entrenado desde cero.

El modelo recibe una imagen completa y genera una representación que DonutProcessor.token2json convierte al siguiente esquema:

{
  "empresa": "",
  "ruc": "",
  "fecha": "",
  "nro_comprobante": "",
  "menu": [
    {
      "nm": "",
      "price": ""
    }
  ],
  "sub_total": "",
  "igv": "",
  "total": ""
}

Uso previsto

Este checkpoint está pensado para investigación, demostraciones y prototipos supervisados sobre boletas impresas peruanas en español. Puede servir como punto de partida para nuevas evaluaciones o fine-tuning con datos propios.

No debe utilizarse sin revisión humana para contabilidad, tributación, auditoría, pagos, cumplimiento normativo ni otras decisiones de alto impacto. Tampoco es un extractor universal de comprobantes: no fue validado para facturas, documentos manuscritos, documentos de otros países o imágenes fuera del dominio de entrenamiento.

Uso con Transformers

El checkpoint fue exportado con transformers==5.12.1 y se verificó localmente con transformers==5.15.0. Se recomienda cargar el modelo directamente en lugar de usar pipeline, porque requiere el prompt de tarea específico.

pip install "transformers==5.15.0" "torch>=2.4,<3" "pillow>=10"
from PIL import Image
import torch
from transformers import DonutProcessor, VisionEncoderDecoderModel

model_id = "eng-aesr/donut-boletas-peru"
task_prompt = "<s_receipt_peru>"

processor = DonutProcessor.from_pretrained(model_id)
model = VisionEncoderDecoderModel.from_pretrained(model_id)

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device).eval()

image = Image.open("boleta.jpg").convert("RGB")
pixel_values = processor(image, return_tensors="pt").pixel_values.to(device)
decoder_input_ids = processor.tokenizer(
    task_prompt,
    add_special_tokens=False,
    return_tensors="pt",
).input_ids.to(device)

generation_config = model.generation_config
generation_config.max_length = 768
generation_config.num_beams = 1
generation_config.pad_token_id = processor.tokenizer.pad_token_id
generation_config.eos_token_id = processor.tokenizer.eos_token_id

unk_token_id = processor.tokenizer.unk_token_id
bad_words_ids = [[unk_token_id]] if unk_token_id is not None else None

with torch.inference_mode():
    output_ids = model.generate(
        pixel_values,
        decoder_input_ids=decoder_input_ids,
        generation_config=generation_config,
        bad_words_ids=bad_words_ids,
    )

sequence = processor.batch_decode(output_ids, skip_special_tokens=False)[0]
for token in (
    task_prompt,
    processor.tokenizer.eos_token,
    processor.tokenizer.pad_token,
):
    if token:
        sequence = sequence.replace(token, "")

result = processor.token2json(sequence.strip())
print(result)

Detalles del modelo

PropiedadValor
ArquitecturaVisionEncoderDecoderModel (encoder Donut-Swin + decoder mBART)
Checkpoint base inmediatonaver-clova-ix/donut-base-finetuned-cord-v2
Parámetros201,133,176
Prompt de tarea<s_receipt_peru>
Resolución del procesador1280 × 960 píxeles
Longitud máxima de generación768 tokens
Formato de pesosSafeTensors
SHA-256 de los pesos27330e48fda6bf3f4ac117b28afc2ae354a039dbae179eb29bfc72b829ea960a

Datos y entrenamiento

La adaptación utilizó un dataset privado de 140 boletas peruanas anotadas. El dataset y sus imágenes no se distribuyen con este modelo.

El checkpoint base inmediato ya había sido ajustado sobre CORD v2 por sus autores upstream. La etapa descrita aquí corresponde únicamente a la adaptación posterior al dominio peruano.

  • Entrenamiento: 100 documentos originales. Se aplicaron tres variantes visuales suaves únicamente a este split (blur, noise y rotate), dando 400 registros de entrenamiento pero conservando 100 fuentes independientes.
  • Validación: 20 documentos reales, sin augmentation; se usaron para seleccionar el checkpoint.
  • Test: 20 documentos reales, sin augmentation y sin uso durante la selección.
  • Split: por identificador de documento (source_id), no por empresa o plantilla visual.

Configuración principal de fine-tuning:

HiperparámetroValor
Learning rate1e-5
Batch size por dispositivo2
Gradient accumulation1
Gradient clipping1.0
Épocas máximas30
Épocas ejecutadas10
Early stoppingpaciencia 4
Seed2022
Selecciónmenor eval_loss

El mejor checkpoint fue el step 1200 (época 6), con eval_loss = 1.1445. La ejecución usó Python 3.12.13 y Transformers 5.12.1.

Evaluación

Las métricas se calcularon una sola vez sobre el test privado congelado de 20 documentos. Por el tamaño del test, cada error equivale a 5 puntos porcentuales; los resultados se presentan con conteo y porcentaje.

MétricaResultado
JSON parseable15/20 (75.0%)
Ocho claves de nivel superior presentes10/20 (50.0%)
Esquema estricto válido (claves y tipos)4/20 (20.0%)
Normalized edit distance promedio0.4297
total exacto14/20 (70.0%)
sub_total exacto10/20 (50.0%)
fecha exacta9/20 (45.0%)
ruc exacto8/20 (40.0%)
igv exacto8/20 (40.0%)
nro_comprobante exacto5/20 (25.0%)
empresa exacta4/20 (20.0%)
empresa Token-F1 promedio0.3229
Cantidad de ítems correcta10.0%
Precio de ítems correcto16.7%
Nombre de ítems Token-F1 promedio0.1004
Menú exacto0/20 (0.0%)

Estos números describen este test concreto y no deben interpretarse como una estimación robusta del rendimiento sobre todas las boletas peruanas. No se calcularon intervalos de confianza.

Esquema estricto válido es una auditoría posterior de claves y tipos sobre las mismas predicciones guardadas. El evaluador original solo comprobaba la presencia de las ocho claves. Además, las métricas registradas de menu están sesgadas a la baja porque el evaluador original trataba como lista vacía el objeto que token2json produce para algunos menús de un solo ítem. Se conservan aquí por trazabilidad; no se publican métricas corregidas hasta repetir formalmente la evaluación.

Limitaciones y riesgos

  • El dataset es pequeño y puede no representar la diversidad de comercios, impresoras, cámaras, iluminación y diseños presentes en Perú.
  • El split evita duplicar el mismo documento entre conjuntos, pero no garantiza separación por empresa o plantilla; puede existir similitud visual entre splits.
  • El modelo produce una salida no parseable en 25% del test. Solo 50% incluye las ocho claves de nivel superior y 20% satisface la auditoría estricta de claves y tipos.
  • La extracción de listas es especialmente débil: el menú exacto fue 0% en el test registrado.
  • Cuando hay un solo ítem, menu puede generarse como un objeto en vez de una lista. Los consumidores deben preservar la salida cruda, validar tipos y tratar esta normalización explícitamente.
  • Puede confundir total, subtotal e IGV; copiar texto incorrectamente; omitir campos; o generar valores que no aparecen en la imagen.
  • No devuelve una probabilidad calibrada que permita aceptar automáticamente una predicción.
  • Los documentos pueden contener identificadores comerciales o personales. Aunque el dataset no se publica, un modelo generativo puede memorizar fragmentos; no debe asumirse que sus salidas están libres de información sensible.

Toda salida debe validarse estructuralmente y contrastarse con la imagen original antes de utilizarla.

Licencia y atribución

El checkpoint base se publica con licencia MIT. Esta adaptación se distribuye bajo la misma licencia. La licencia del modelo no concede derechos sobre las imágenes o documentos que cada usuario procese.

DONUT: OCR-free Document Understanding Transformer fue presentado en:

@article{kim2021donut,
  title={OCR-free Document Understanding Transformer},
  author={Kim, Geewook and Hong, Teakgyu and Yim, Moonbin and Park, Jinyoung and Yim, Jinyeong and Hwang, Wonseok and Yun, Sangdoo and Han, Dongyoon and Park, Seunghyun},
  journal={arXiv preprint arXiv:2111.15664},
  year={2021}
}

Contacto

Responsable del repositorio: eng-aesr.

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм · transformers

Можно запустить

Подбираем GPU…

Класс архитектуры
VisionEncoderDecoderModel
Ревизия весов
48b72fe

0 моделей