RAG_test_1 / app.py
la04's picture
Update app.py
ee9ba92 verified
raw
history blame
2.24 kB
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()