Spaces:
Sleeping
Sleeping
from transformers import TrOCRProcessor, TrOCRForConditionalGeneration | |
from pdf2image import convert_from_path | |
from PIL import Image | |
import torch | |
import os | |
# Klasse für die Textextraktion mit trOCR | |
class TrOCR: | |
def __init__(self): | |
# Laden des TrOCR Prozessors und Modells | |
self.processor = TrOCRProcessor.from_pretrained("microsoft/trocr-base-stage1") | |
self.model = TrOCRForConditionalGeneration.from_pretrained("microsoft/trocr-base-stage1") | |
def extract_text(self, pdf_path): | |
# Konvertiere PDF-Seiten in Bilder | |
images = convert_from_path(pdf_path) | |
text_pages = [] | |
for image in images: | |
# Prozessiere das Bild mit trOCR | |
pixel_values = self.processor(images=image, return_tensors="pt").pixel_values | |
generated_ids = self.model.generate(pixel_values) | |
text = self.processor.decode(generated_ids[0], skip_special_tokens=True) | |
text_pages.append(text) | |
return text_pages | |
# OCR-Tool initialisieren | |
ocr_tool = TrOCR() | |
# Beispiel: Funktion zum Verarbeiten von PDFs und Beantworten von Fragen | |
def process_pdf_and_query(pdf_path, question): | |
# Extrahiere Text aus dem PDF | |
extracted_text = ocr_tool.extract_text(pdf_path) | |
# In diesem Beispiel geben wir den gesamten extrahierten Text zurück | |
# Hier kannst du Logik hinzufügen, um gezielt Fragen zu beantworten | |
return "\n".join(extracted_text) | |
# Gradio Funktion zum Einlesen der Datei und Beantworten von Fragen | |
def chatbot_response(pdf, question): | |
pdf_path = "uploaded_pdf.pdf" | |
# Speichern der hochgeladenen PDF-Datei | |
with open(pdf_path, "wb") as f: | |
f.write(pdf.read()) | |
# Extrahiere Text und beantworte die Frage | |
answer = process_pdf_and_query(pdf_path, question) | |
# Nach der Verarbeitung die Datei löschen | |
os.remove(pdf_path) | |
return answer | |
# Beispiel für Gradio UI | |
import gradio as gr | |
with gr.Blocks() as demo: | |
pdf_input = gr.File(label="PDF-Datei hochladen") | |
question_input = gr.Textbox(label="Frage eingeben") | |
output = gr.Textbox(label="Antwort") | |
pdf_input.upload(chatbot_response, inputs=[pdf_input, question_input], outputs=output) | |
demo.launch() | |