binery/Donut_Receipt
3
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()