kryman27's picture
Update app.py
a5d0c27 verified
raw
history blame
1.76 kB
from transformers import TrOCRProcessor, VisionEncoderDecoderModel
from PIL import Image
import pdf2image
import gradio as gr
import base64
import io
import torch
import os
# ✅ Sprawdzenie, czy Poppler jest dostępny
poppler_path = os.getenv("PATH")
print(f"Poppler PATH: {poppler_path}")
# ✅ Używamy lżejszego modelu dla większej wydajności
MODEL_NAME = "microsoft/trocr-base-stage1"
processor = TrOCRProcessor.from_pretrained(MODEL_NAME)
model = VisionEncoderDecoderModel.from_pretrained(MODEL_NAME)
# ✅ Funkcja przetwarzania faktury (odbiera Base64 PDF)
def process_invoice(pdf_base64):
try:
# ✅ Dekodowanie Base64 na plik PDF
pdf_bytes = base64.b64decode(pdf_base64)
pdf_stream = io.BytesIO(pdf_bytes)
# ✅ Konwersja PDF do obrazu
images = pdf2image.convert_from_bytes(pdf_stream.read())
if not images:
return "Błąd: Nie udało się przekonwertować PDF na obraz."
# ✅ Przetwarzanie pierwszej strony faktury
image = images[0].convert("RGB")
pixel_values = processor(images=image, return_tensors="pt").pixel_values
# ✅ Uruchomienie modelu AI
generated_ids = model.generate(pixel_values)
extracted_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
return extracted_text
except Exception as e:
return f"Błąd przetwarzania: {str(e)}"
# ✅ API Gradio (teraz akceptuje Base64 jako wejście)
interface = gr.Interface(
fn=process_invoice,
inputs=gr.Textbox(label="PDF w Base64"),
outputs="text",
title="AI Invoice Processor",
description="Prześlij fakturę jako Base64, a AI wyodrębni dane tekstowe.",
)
# ✅ Uruchomienie aplikacji
interface.launch()