FCAP / app.py
hackergeek's picture
Update app.py
fdad5ba verified
import gradio as gr
from transformers import AutoProcessor, AutoModelForCausalLM # یا AutoModelForVision2Seq اگر vision2seq باشه
import torch
from PIL import Image
# repo_id دقیق
MODEL_ID = "erfanasghariyan/mobilew-v11-convnext-tiny-6layer-radimagenet"
processor = AutoProcessor.from_pretrained(MODEL_ID)
model = AutoModelForCausalLM.from_pretrained(MODEL_ID) # اگر causalLM نباشه، عوض کن به AutoModelForVision2Seq
model.eval()
device = "cuda" if torch.cuda.is_available() else "cpu"
model.to(device)
def generate_report(image: Image.Image, prompt: str = "Describe this radiology image in detail:"):
# پردازش تصویر + متن prompt
inputs = processor(images=image, text=prompt, return_tensors="pt").to(device)
# generation
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=200,
do_sample=True,
temperature=0.7,
top_p=0.9,
num_beams=4, # اگر deterministic می‌خوای beam search
repetition_penalty=1.2
)
# decode خروجی
generated_text = processor.decode(outputs[0], skip_special_tokens=True)
# اگر prompt در خروجی تکرار شده، تمیز کن
if generated_text.startswith(prompt):
generated_text = generated_text[len(prompt):].strip()
return generated_text, image
demo = gr.Interface(
fn=generate_report,
inputs=[
gr.Image(type="pil", label="تصویر رادیولوژی آپلود کن (X-ray, CT, MRI و ...)"),
gr.Textbox(label="پرامپت (اختیاری)", value="Generate a detailed radiology report for this image:")
],
outputs=[
gr.Textbox(label="گزارش / توصیف تولید شده"),
gr.Image(label="تصویر ورودی")
],
title="MobileW-v11 – ConvNeXt Tiny + 6-Layer Decoder for Radiology",
description=(
"مدل سبک multimodal برای تحلیل تصاویر پزشکی.\n"
"encoder: ConvNeXt-Tiny (فریز شده)\n"
"decoder: 6 لایه برای تولید متن بهتر\n"
"مثال پرامپت‌ها: 'Describe findings', 'Write a radiology report', 'Is there pneumonia?'"
),
examples=[
# اگر مثال تصویر داری، آپلود کن به Space و مسیر بده
# [ "example_chest_xray.jpg", "Write a structured report" ]
],
allow_flagging="never"
)
if __name__ == "__main__":
demo.launch()