CoolFace
Apppublic

binery/Donut_Receipt

sourceHugging Faceotherupdated 4y agoView on Hugging Face
3likes
app.py56 linesDownload Raw Back to root
1import re2import gradio as gr3 4import torch5from transformers import DonutProcessor, VisionEncoderDecoderModel6 7processor = DonutProcessor.from_pretrained("Raj-Master/donut-demo-123")8model = VisionEncoderDecoderModel.from_pretrained("Raj-Master/donut-demo-123")9 10device = "cuda" if torch.cuda.is_available() else "cpu"11model.to(device)12 13def process_document(image):14    # prepare encoder inputs15    pixel_values = processor(image, return_tensors="pt").pixel_values16    17    # prepare decoder inputs18    task_prompt = "<s_cord-v2>"19    decoder_input_ids = processor.tokenizer(task_prompt, add_special_tokens=False, return_tensors="pt").input_ids20          21    # generate answer22    outputs = model.generate(23        pixel_values.to(device),24        decoder_input_ids=decoder_input_ids.to(device),25        max_length=model.decoder.config.max_position_embeddings,26        early_stopping=True,27        pad_token_id=processor.tokenizer.pad_token_id,28        eos_token_id=processor.tokenizer.eos_token_id,29        use_cache=True,30        num_beams=1,31        bad_words_ids=[[processor.tokenizer.unk_token_id]],32        return_dict_in_generate=True,33    )34    35    # postprocess36    sequence = processor.batch_decode(outputs.sequences)[0]37    sequence = sequence.replace(processor.tokenizer.eos_token, "").replace(processor.tokenizer.pad_token, "")38    sequence = re.sub(r"<.*?>", "", sequence, count=1).strip()  # remove first task start token39    40    return processor.token2json(sequence)41 42description = "Gradio Demo for Donut, an instance of `VisionEncoderDecoderModel` fine-tuned on CORD (document parsing). To use it, simply upload your image and click 'submit', or click one of the examples to load them. Read more at the links below."43article = "<p style='text-align: center'><a href='https://arxiv.org/abs/2111.15664' target='_blank'>Donut: OCR-free Document Understanding Transformer</a> | <a href='https://github.com/clovaai/donut' target='_blank'>Github Repo</a></p>"44 45demo = gr.Interface(46    fn=process_document,47    inputs="image",48    outputs="json",49    title="Demo: Donut 🍩 for Document Parsing",50    description=description,51    article=article,52    enable_queue=True,53    examples=[["example.png"], ["example_1.png"],["example_2.png"], ["example_3.png"],["example_4.png"]],54    cache_examples=False)55 56demo.launch()