yomna-ashraf's picture
Update app.py
27e887d verified
raw
history blame contribute delete
2.45 kB
import gradio as gr
from transformers import AutoModelForImageClassification, AutoProcessor
from PIL import Image
import io
import fitz # PyMuPDF
import os
# Load model and processor
model_name = "AsmaaElnagger/Diabetic_RetinoPathy_detection"
model = AutoModelForImageClassification.from_pretrained(model_name)
processor = AutoProcessor.from_pretrained(model_name)
# PDF to image conversion
def pdf_to_images_pymupdf(pdf_data):
try:
pdf_document = fitz.open(stream=pdf_data, filetype="pdf")
images = []
for page_num in range(pdf_document.page_count):
page = pdf_document.load_page(page_num)
pix = page.get_pixmap()
img_data = pix.tobytes("jpeg")
images.append(img_data)
return images
except Exception as e:
print(f"Error converting PDF: {e}")
return None
# File classification
def classify_file(file_path):
try:
file_ext = os.path.splitext(file_path)[-1].lower()
if file_ext in ['.jpg', '.jpeg', '.png', '.gif']:
# Handle image upload
image = Image.open(file_path).convert("RGB")
inputs = processor(images=image, return_tensors="pt")
outputs = model(**inputs)
predicted_class_idx = outputs.logits.argmax(-1).item()
result = model.config.id2label[predicted_class_idx]
return result
elif file_ext == '.pdf':
# Handle PDF upload
with open(file_path, "rb") as f:
pdf_data = f.read()
images = pdf_to_images_pymupdf(pdf_data)
if images:
image = Image.open(io.BytesIO(images[0])).convert("RGB")
inputs = processor(images=image, return_tensors="pt")
outputs = model(**inputs)
predicted_class_idx = outputs.logits.argmax(-1).item()
result = model.config.id2label[predicted_class_idx]
return result
else:
return "PDF conversion failed."
else:
return "Unsupported file type."
except Exception as e:
return f"An error occurred: {e}"
# Gradio UI
demo = gr.Interface(
fn=classify_file,
inputs=gr.File(label="Upload PDF or Image"),
outputs="text",
title="Diabetic Retinopathy Detection",
description="Upload a fundus scan (image or PDF) to detect diabetic retinopathy."
)
# Launch app
demo.launch()