Sitemap
Mert

Mert

Bioinformatics grad, now Master's in Informatics. Passionate about Computer Vision & Deep Learning.

OCR-VQA mit Donut

3 min readApr 9, 2024

--

Einführung

Stellen Sie sich vor, Sie können eine Frage zu einem Foto stellen und die Antwort wird nicht nur durch das Bild selbst, sondern auch durch den darin enthaltenen Text angezeigt! Dies ist die faszinierende Welt der optischen Zeichenerkennung (engl. Optical Character Recognition, OCR) und der visuellen Fragenbeantwortung (engl. Visual Question Answering, VQA).

Die OCR-Technologie überbrückt die Kluft zwischen dem Physischen und dem Digitalen und ermöglicht es Computern, Text in Bildern zu “lesen”. VQA geht noch einen Schritt weiter. Durch die Kombination der OCR-Fähigkeit, Text zu extrahieren, mit fortschrittlicher Bildanalyse können VQA-Systeme Fragen beantworten, bei denen es darauf ankommt, sowohl den visuellen Inhalt als auch den eingebetteten Text zu verstehen.

Hier kommt das Document Understanding Transformer (Donut)-Modell ins Spiel, ein leistungsstarkes Tool, das das Potenzial von OCR und VQA nutzt. In den folgenden Abschnitten sehen wir uns genauer an, wie Donut funktioniert und wie Sie es nutzen können, um die verborgenen Erkenntnisse in Ihren Bildern und Texten zu erschließen.

Get Mert’s stories in your inbox

Join Medium for free to get updates from this writer.

Während das Innenleben von Donut faszinierend ist, konzentriert sich dieser Blog auf seine praktische Anwendung. Wir ersparen Ihnen die theoretische Vertiefung und geben Ihnen stattdessen das Wissen an die Hand, um Donut in Ihren eigenen Projekten einzusetzen. Wir führen Sie durch die ersten Schritte, vom Einrichten des Modells bis zum Extrahieren wertvoller Informationen aus Ihren Bildern und Texten. Für diejenigen, die neugierig auf das Innenleben des Donut-Modells sind, gibt es am Ende einige Links. Sie können Donut auch für die Klassifizierung von Dokumentenbildern und das Verstehen von Formularen verwenden.

Wie man Donut für OCR-VQA nutzt

Schritt 1: Installiere die Bibliotheken

pip install transformers torch opencv-python

Schritt 2: Importiere die Bibliotheken

from transformers import DonutProcessor, VisionEncoderDecoderModel
import cv2
import torch
import re

Schritt 3: Lade das Model und den Prozessor

processor = DonutProcessor.from_pretrained("naver-clova-ix/donut-base-finetuned-docvqa")
model = VisionEncoderDecoderModel.from_pretrained("naver-clova-ix/donut-base-finetuned-docvqa")
device = "cuda" if torch.cuda.is_available() else "cpu"
model.to(device)

Wenn Sie einen Grafikprozessor haben, sollten Sie ihn verwenden, da Sie so viel schnellere Ergebnisse erzielen.

Schritt 4: Lade das Bild

image_path = r"DeinBildPfad"
image = cv2.imread(image_path)

Schritt 5: Gebe den Prompt ein

# prepare decoder inputs
task_prompt = "<s_docvqa><s_question>{user_input}</s_question><s_answer>"
question = "What's the population of Dade?"
prompt = task_prompt.replace("{user_input}", question)
decoder_input_ids = processor.tokenizer(prompt, add_special_tokens=False, return_tensors="pt").input_ids

Schritt 6: Bereite den Input des Decoders vor

decoder_input_ids = processor.tokenizer(prompt, add_special_tokens=False, return_tensors="pt").input_ids
pixel_values = processor(image, return_tensors="pt").pixel_values
outputs = model.generate(
pixel_values.to(device),
decoder_input_ids=decoder_input_ids.to(device),
max_length=model.decoder.config.max_position_embeddings,
pad_token_id=processor.tokenizer.pad_token_id,
eos_token_id=processor.tokenizer.eos_token_id,
use_cache=True,
bad_words_ids=[[processor.tokenizer.unk_token_id]],
return_dict_in_generate=True,
)

Schritt 7: Erhalte das Ergebnis

sequence = processor.batch_decode(outputs.sequences)[0]
sequence = sequence.replace(processor.tokenizer.eos_token, "").replace(processor.tokenizer.pad_token, "")
sequence = re.sub(r"<.*?>", "", sequence, count=1).strip() # remove first task start token
print(processor.token2json(sequence))

Fazit

In diesem Tutorial haben wir gelernt, wie man Donut für OCR-VQA verwendet. Wenn Sie diesen Code hilfreich fanden, klatschen Sie bitte in die Hände und kommentieren Sie diesen Beitrag! Ich würde mich auch freuen, wenn Sie mir folgen würden, um mehr über Data Science und andere verwandte Themen zu erfahren. Vielen Dank fürs Lesen!

Paper of Donut: https://arxiv.org/abs/2111.15664

Github-Page of Donut: https://github.com/WongKinYiu/yolov9

Huggingface-Demo: https://huggingface.co/spaces/nielsr/donut-docvqa

Wie man das Donut Model fine-tuned: https://www.freecodecamp.org/news/how-to-fine-tune-the-donut-model/

--

--

Mert
Mert

Bioinformatics grad, now Master's in Informatics. Passionate about Computer Vision & Deep Learning.