EyesCareVit / app.py
mostafasmart's picture
mostafa add notifction API8
ce63b32
import gradio as gr
from PIL import Image, UnidentifiedImageError
import numpy as np
import requests
from io import BytesIO
import json
from transformers import AutoFeatureExtractor, AutoModelForImageClassification, pipeline
# معرف النموذج الخاص بك على Hugging Face
model_id = "smartgmin/Entrnal_5class_agumm_last_newV7_model"
# تحميل النموذج ومعالج الميزات مرة واحدة عند بدء التطبيق
model2 = AutoModelForImageClassification.from_pretrained(model_id, from_tf=True)
feature_extractor = AutoFeatureExtractor.from_pretrained(model_id)
clsss = pipeline('image-classification', model=model2, feature_extractor=feature_extractor)
def predict(image_url):
try:
# التحقق من صحة الرابط وتحميل الصورة
response = requests.get(image_url, timeout=10)
response.raise_for_status() # سيقوم برفع استثناء إذا كان الطلب غير ناجح
# التحقق من نوع المحتوى
content_type = response.headers.get('Content-Type')
if not content_type or not content_type.startswith('image'):
return json.dumps({"error": "الرابط المقدم لا يشير إلى صورة صالحة."})
# تحميل الصورة من الرابط
image = Image.open(BytesIO(response.content)).convert("RGB")
# تمرير الصورة إلى النموذج
yl = clsss(image)
max_item = max(yl, key=lambda x: x['score'])
nn = "{:.2f}".format(max_item['score']) # تنسيق الدقة ليكون مقروءًا بشكل أفضل
dd = max_item['label']
# إرجاع النتيجة بصيغة JSON
return json.dumps({"label": dd, "score": nn})
except requests.exceptions.RequestException as e:
return json.dumps({"error": f"خطأ في تحميل الصورة من الرابط المقدم: {e}"})
except UnidentifiedImageError:
return json.dumps({"error": "لا يمكن تحديد نوع الصورة من الرابط المقدم."})
except Exception as e:
return json.dumps({"error": f"حدث خطأ أثناء معالجة الصورة: {e}"})
# إنشاء واجهة Gradio باستخدام المكونات الجديدة
iface = gr.Interface(
fn=predict,
inputs=gr.Textbox(lines=2, placeholder="أدخل رابط الصورة هنا...", label="رابط الصورة"),
outputs="text", # مخرجات النص تُستخدم هنا لعرض نص الـ JSON
title="نموذج ViT لتصنيف الصور",
description="أدخل رابط صورة للحصول على تصنيف باستخدام نموذج ViT المدرب."
)
# تشغيل الواجهة
iface.launch(share=True)