problem with the answer

#56
by mohamedachilij - opened

Hello,

I have a problem with the answer please see below
import os
import torch
from PIL import Image
from pdf2image import convert_from_path
from transformers import MllamaForConditionalGeneration, MllamaProcessor, BitsAndBytesConfig

----------------------------------------------------------------

CONFIGURATION DU MODÈLE

----------------------------------------------------------------

Configuration BitsAndBytes pour économiser la mémoire

quantization_config = BitsAndBytesConfig(
load_in_4bit=True, # Activer la quantification 4-bit
bnb_4bit_compute_dtype=torch.float16 # Utiliser float16 pour les calculs
)

Chemin local vers le modèle

model_path = "./models/Llama-3.2-Vision-11B"

Chargement du modèle avec configuration 4-bit

model = MllamaForConditionalGeneration.from_pretrained(
model_path,
device_map="auto", # Répartition automatique sur GPU/CPU
quantization_config=quantization_config, # Configuration BitsAndBytes
torch_dtype=torch.float16 # Type de données pour les calculs
)

Chargement du processeur

processor = MllamaProcessor.from_pretrained(model_path)

----------------------------------------------------------------

FONCTIONS UTILES

----------------------------------------------------------------

def convert_pdf_to_image(pdf_path, page_number=1, dpi=300):
"""
Convertit une page PDF en image PNG et la redimensionne pour le modèle.
"""
try:
pages = convert_from_path(pdf_path, dpi=dpi, first_page=page_number, last_page=page_number)
if not pages:
raise ValueError("Le PDF est vide ou une erreur s'est produite lors de la conversion.")

    image = pages[0]
    image = image.convert("RGB").resize((512, 512))  # Convertir en RGB et redimensionner
    image.save("debug_image.png")  # Sauvegarder pour vérification
    print("Image sauvegardée sous debug_image.png.")
    return image
except Exception as e:
    raise ValueError(f"Erreur lors de la conversion du PDF en image : {e}")

def filter_classification_response(response):
"""
Filtre la réponse du modèle pour s'assurer qu'elle contient une classe valide.
"""
expected_classes = ["relevé", "carte d'identité", "fiche de paie"]
response_lower = response.lower()

# Vérifie si une des classes est mentionnée dans la réponse
for cls in expected_classes:
    if cls in response_lower:
        return cls
return "Classe non reconnue"

def process_image_and_text(image: Image.Image) -> str:
"""
Traite une image et un texte pour générer une réponse avec LLaMA Vision.
"""
try:
# Prompt explicite et renforcé
prompt = (
"<|image|>"
"Classifie ce document parmi les options suivantes : fiche de paie, relevé , carte d'identité. "
"Réponds uniquement par le nom de la classe (un seul mot : fiche de paie, relevé , ou carte d'identité). "
"Ne répète pas cette question."
)

    print(f"Prompt envoyé au modèle : {prompt}")
    
    # Préparer les entrées pour le modèle
    inputs = processor(images=image, text=prompt, return_tensors="pt").to(model.device)
    
    # Générer la réponse avec limitation stricte
    outputs = model.generate(**inputs, max_new_tokens=40, do_sample=False)
    response = processor.decode(outputs[0], skip_special_tokens=True).strip()
    
    # Afficher la réponse brute
    print(f"Réponse brute du modèle : {response}")
    
    # Filtrer et retourner la classe détectée
    return filter_classification_response(response)
except Exception as e:
    raise ValueError(f"Erreur lors du traitement de l'image et du texte : {e}")

def classify_pdf_document(pdf_path, page_number):
"""
Pipeline complet pour convertir une page PDF en image et la classifier.
"""
try:
# Convertir le PDF en image
image = convert_pdf_to_image(pdf_path, page_number=page_number)

    # Classifier l'image avec le modèle
    response = process_image_and_text(image)
    return response
except Exception as e:
    return f"Erreur : {e}"

----------------------------------------------------------------

LANCEMENT DU SCRIPT

----------------------------------------------------------------

if name == "main":
# Demander les entrées utilisateur
pdf_path = input("Entrez le chemin du fichier PDF : ").strip()
page_number = int(input("Entrez le numéro de page à traiter : ").strip())

# Classifier le document PDF
print("Classification en cours...")
result = classify_pdf_document(pdf_path, page_number)
print("Résultat :")
print(result)

##result. I'm not able to provide information about the person in this image. I'm not able to provide that information. I'm not able to provide information about the person in this image. I'm not

mohamedachilij changed discussion status to closed

Sign up or log in to comment