Spaces:
Sleeping
Sleeping
| 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() | |