File size: 4,917 Bytes
1606881
4040a5a
1606881
 
 
 
1e4cdab
4040a5a
1606881
 
 
1e4cdab
1606881
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4040a5a
2cd60b1
 
1e4cdab
1606881
1e4cdab
1606881
4040a5a
1606881
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1e4cdab
4040a5a
 
8c37d6b
4040a5a
 
 
1606881
 
8c37d6b
 
1606881
1e4cdab
4040a5a
8c37d6b
 
 
1e4cdab
1606881
 
1e4cdab
4040a5a
 
 
 
8c37d6b
 
 
 
1e4cdab
4040a5a
8c37d6b
 
 
 
1e4cdab
4040a5a
 
1606881
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import os
import gradio as gr
import torch
from diffusers import StableDiffusionPipeline
from werkzeug.security import generate_password_hash, check_password_hash
import json
import time

# تحميل نموذج Stable Diffusion الأخف
MODEL_NAME = "runwayml/stable-diffusion-v1-5"
device = "cuda" if torch.cuda.is_available() else "cpu"

pipe = StableDiffusionPipeline.from_pretrained(MODEL_NAME)
pipe.to(device)

# قاعدة بيانات للمستخدمين والنماذج المحفوظة (سيتم حفظها في ملف JSON)
user_data_file = "user_data.json"

# تحميل البيانات من ملف JSON إذا كان موجودًا
if os.path.exists(user_data_file):
    with open(user_data_file, "r") as f:
        users = json.load(f)
else:
    users = {}

saved_models = {}

# وظيفة تدريب النموذج (التدريب يتم مرة واحدة فقط)
def train_model(user_email, images, progress):
    if not user_email:
        return "يجب تسجيل الدخول لحفظ النموذج."
    
    user_model_id = f"user_model_{user_email}"
    saved_models[user_email] = user_model_id

    # محاكاة عملية التدريب (يمكنك تعديل هذا الجزء ليتناسب مع عملية التدريب الفعلية)
    for i in range(1, 101):  # محاكاة من 0% إلى 100%
        time.sleep(0.1)  # تأخير زمني لمحاكاة الوقت
        progress(i)  # تحديث شريط التقدم

    return f"✅ تم حفظ النموذج بنجاح: {user_model_id}"

# وظيفة إنشاء الصور باستخدام البرومبتات
def generate_image(prompt, user_email=None):
    if user_email and user_email in saved_models:
        model_id = saved_models[user_email]
        result = pipe(prompt).images[0]
    else:
        result = pipe(prompt).images[0]

    return result

# وظيفة تسجيل المستخدمين
def register(email, password):
    if email in users:
        return "⚠️ البريد الإلكتروني مسجل بالفعل!"
    users[email] = {"password": generate_password_hash(password)}
    save_users_data()
    return "✅ تم التسجيل بنجاح!"

# وظيفة تسجيل الدخول
def login(email, password):
    if email not in users or not check_password_hash(users[email]["password"], password):
        return "❌ البريد الإلكتروني أو كلمة المرور غير صحيحة!"
    return f"✅ تم تسجيل الدخول: {email}"

# حفظ بيانات المستخدمين إلى ملف JSON
def save_users_data():
    with open(user_data_file, "w") as f:
        json.dump(users, f)

# واجهة Gradio
with gr.Blocks() as demo:
    gr.Markdown("# 🖼️ إنشاء صور مخصصة باستخدام الذكاء الاصطناعي")
    
    with gr.Row():
        with gr.Column():
            image_input = gr.Files(label="📤 رفع صورك للتدريب")  # ✅ تعديل هنا
            user_email_input = gr.Textbox(label="📧 بريدك الإلكتروني (اختياري لحفظ النموذج)")
            train_button = gr.Button("🔧 تدريب النموذج")
            train_output = gr.Textbox(label="🔔 نتيجة التدريب")
            progress_bar = gr.Progress()  # بدون label هنا
 
        with gr.Column():
            prompt_input = gr.Textbox(label="✏️ أدخل البرومبت لإنشاء صورة")
            generate_button = gr.Button("🎨 إنشاء صورة")
            output_image = gr.Image(label="📷 الصورة الناتجة")
 
    train_button.click(train_model, inputs=[user_email_input, image_input, progress_bar], outputs=train_output)
    generate_button.click(generate_image, inputs=[prompt_input, user_email_input], outputs=output_image)
 
    gr.Markdown("### 🔑 تسجيل الدخول / التسجيل")
    
    with gr.Row():
        with gr.Column():
            login_email = gr.Textbox(label="📧 البريد الإلكتروني")
            login_password = gr.Textbox(label="🔑 كلمة المرور", type="password")
            login_button = gr.Button("🚀 تسجيل الدخول")
            login_output = gr.Textbox(label="🔔 حالة تسجيل الدخول")
 
        with gr.Column():
            register_email = gr.Textbox(label="📧 البريد الإلكتروني للتسجيل")
            register_password = gr.Textbox(label="🔑 كلمة المرور للتسجيل", type="password")
            register_button = gr.Button("📝 تسجيل حساب جديد")
            register_output = gr.Textbox(label="🔔 حالة التسجيل")
 
    login_button.click(login, inputs=[login_email, login_password], outputs=login_output)
    register_button.click(register, inputs=[register_email, register_password], outputs=register_output)

# تشغيل التطبيق مع رابط عام
demo.launch(share=True)