import gradio as gr | |
import os | |
import json | |
from pdf2image import convert_from_path | |
from PIL import Image | |
from ovis.serve.runner import RunnerArguments, OvisRunner | |
# Chemins des répertoires | |
model_path = '/home/nosmokingclub/public_html/MIKA/Ovis/ovis_model' | |
prompt = "Extraire la facture avec le listing produit avec les références au format JSON" | |
runner_args = RunnerArguments(model_path=model_path) | |
runner = OvisRunner(runner_args) | |
def process_pdf(pdf_file): | |
# Convertir le PDF en images | |
images = convert_from_path(pdf_file.name) | |
# Initialiser une liste pour stocker les résultats de chaque page | |
pdf_results = [] | |
for i, image in enumerate(images): | |
# Effectuer l'inférence avec Ovis sur chaque image | |
result = runner.run([image, prompt]) | |
# Convertir le résultat en JSON | |
try: | |
page_result = json.loads(result) | |
except json.JSONDecodeError: | |
page_result = {"error": f"Impossible de décoder la page {i + 1} en JSON", "raw_result": result} | |
# Ajouter les résultats de la page à la liste | |
pdf_results.append({"page": i + 1, "result": page_result}) | |
# Retourner le résultat JSON complet | |
return json.dumps(pdf_results, ensure_ascii=False, indent=4) | |
# Configurer Gradio Interface | |
demo = gr.Interface( | |
fn=process_pdf, | |
inputs="file", | |
outputs="text", | |
title="Traitement des Factures avec Ovis", | |
description="Téléchargez un PDF de facture pour extraire les produits et les références via Ovis" | |
) | |
demo.launch() | |