Ahmed1871992 commited on
Commit
4103376
·
verified ·
1 Parent(s): 7c8ef9e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +62 -29
app.py CHANGED
@@ -1,10 +1,16 @@
1
  import os
2
  import gradio as gr
3
  import torch
4
- from diffusers import StableDiffusionPipeline
 
 
5
  from werkzeug.security import generate_password_hash, check_password_hash
6
  import json
7
  import time
 
 
 
 
8
 
9
  # تحميل نموذج Stable Diffusion
10
  MODEL_NAME = "runwayml/stable-diffusion-v1-5"
@@ -13,7 +19,7 @@ device = "cuda" if torch.cuda.is_available() else "cpu"
13
  pipe = StableDiffusionPipeline.from_pretrained(MODEL_NAME)
14
  pipe.to(device)
15
 
16
- # قاعدة بيانات للمستخدمين والنماذج المحفوظة
17
  user_data_file = "user_data.json"
18
 
19
  # تحميل البيانات من ملف JSON إذا كان موجودًا
@@ -25,16 +31,59 @@ else:
25
 
26
  saved_models = {}
27
 
28
- # وظيفة تدريب النموذج (تمت إزالة شريط التقدم)
29
- def train_model(user_email, images):
 
 
 
 
 
30
  if not user_email:
31
- return "يجب تسجيل الدخول لحفظ النموذج."
32
 
33
  user_model_id = f"user_model_{user_email}"
34
- saved_models[user_email] = user_model_id
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
 
36
- # محاكاة عملية التدريب
37
- time.sleep(5) # تأخير زمني لمحاكاة التدريب (يمكن تعديله)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
 
39
  return f"✅ تم حفظ النموذج بنجاح: {user_model_id}"
40
 
@@ -42,31 +91,14 @@ def train_model(user_email, images):
42
  def generate_image(prompt, user_email=None):
43
  if user_email and user_email in saved_models:
44
  model_id = saved_models[user_email]
45
- result = pipe(prompt).images[0]
 
 
46
  else:
47
  result = pipe(prompt).images[0]
48
 
49
  return result
50
 
51
- # وظيفة تسجيل المستخدمين
52
- def register(email, password):
53
- if email in users:
54
- return "⚠️ البريد الإلكتروني مسجل بالفعل!"
55
- users[email] = {"password": generate_password_hash(password)}
56
- save_users_data()
57
- return "✅ تم التسجيل بنجاح!"
58
-
59
- # وظيفة تسجيل الدخول
60
- def login(email, password):
61
- if email not in users or not check_password_hash(users[email]["password"], password):
62
- return "❌ البريد الإلكتروني أو كلمة المرور غير صحيحة!"
63
- return f"✅ تم تسجيل الدخول: {email}"
64
-
65
- # حفظ بيانات المستخدمين إلى ملف JSON
66
- def save_users_data():
67
- with open(user_data_file, "w") as f:
68
- json.dump(users, f)
69
-
70
  # واجهة Gradio
71
  with gr.Blocks() as demo:
72
  gr.Markdown("# 🖼️ إنشاء صور مخصصة باستخدام الذكاء الاصطناعي")
@@ -77,13 +109,14 @@ with gr.Blocks() as demo:
77
  user_email_input = gr.Textbox(label="📧 بريدك الإلكتروني (اختياري لحفظ النموذج)")
78
  train_button = gr.Button("🔧 تدريب النموذج")
79
  train_output = gr.Textbox(label="🔔 نتيجة التدريب")
 
80
 
81
  with gr.Column():
82
  prompt_input = gr.Textbox(label="✏️ أدخل البرومبت لإنشاء صورة")
83
  generate_button = gr.Button("🎨 إنشاء صورة")
84
  output_image = gr.Image(label="📷 الصورة الناتجة")
85
 
86
- train_button.click(train_model, inputs=[user_email_input, image_input], outputs=train_output)
87
  generate_button.click(generate_image, inputs=[prompt_input, user_email_input], outputs=output_image)
88
 
89
  gr.Markdown("### 🔑 تسجيل الدخول / التسجيل")
 
1
  import os
2
  import gradio as gr
3
  import torch
4
+ from diffusers import StableDiffusionPipeline, DDPMScheduler, Trainer, TrainingArguments, DiffusionPipeline
5
+ from datasets import load_dataset
6
+ from transformers import CLIPTextModel, CLIPTokenizer, PreTrainedModel
7
  from werkzeug.security import generate_password_hash, check_password_hash
8
  import json
9
  import time
10
+ from pathlib import Path
11
+ from PIL import Image
12
+ from diffusers import DreamBoothTrainer, DreamBoothPipeline
13
+ from accelerate import Accelerator
14
 
15
  # تحميل نموذج Stable Diffusion
16
  MODEL_NAME = "runwayml/stable-diffusion-v1-5"
 
19
  pipe = StableDiffusionPipeline.from_pretrained(MODEL_NAME)
20
  pipe.to(device)
21
 
22
+ # قاعدة بيانات للمستخدمين والنماذج المحفوظة (سيتم حفظها في ملف JSON)
23
  user_data_file = "user_data.json"
24
 
25
  # تحميل البيانات من ملف JSON إذا كان موجودًا
 
31
 
32
  saved_models = {}
33
 
34
+ # دالة لحفظ بيانات المستخدم
35
+ def save_users_data():
36
+ with open(user_data_file, "w") as f:
37
+ json.dump(users, f)
38
+
39
+ # وظيفة تدريب النموذج على الصور المرفوعة باستخدام DreamBooth أو LoRA
40
+ def train_model(user_email, images, progress):
41
  if not user_email:
42
+ return "يجب تسجيل الدخول لحفظ النموذج."
43
 
44
  user_model_id = f"user_model_{user_email}"
45
+
46
+ # إعداد مجلد لحفظ الصور
47
+ user_image_folder = Path(f"user_images/{user_email}")
48
+ user_image_folder.mkdir(parents=True, exist_ok=True)
49
+
50
+ # حفظ الصور في المجلد
51
+ for img in images:
52
+ img.save(user_image_folder / img.name)
53
+
54
+ # إعداد بيانات التدريب (يمكنك تخصيص هذه الطريقة لتناسب النموذج الخاص بك)
55
+ image_paths = [str(user_image_folder / img.name) for img in images]
56
+ dataset = load_dataset('imagefolder', data_dir=str(user_image_folder))
57
+
58
+ # تجهيز المعلمات لتدريب DreamBooth
59
+ accelerator = Accelerator()
60
 
61
+ # إعداد DreamBooth باستخدام مكتبة diffusers
62
+ model = StableDiffusionPipeline.from_pretrained(MODEL_NAME)
63
+ tokenizer = CLIPTokenizer.from_pretrained("openai/clip-vit-base-patch32")
64
+
65
+ # تفعيل التدريب باستخدام DreamBooth
66
+ trainer = DreamBoothTrainer(
67
+ model=model,
68
+ args=TrainingArguments(
69
+ output_dir=f"user_models/{user_email}",
70
+ per_device_train_batch_size=4,
71
+ num_train_epochs=1,
72
+ gradient_accumulation_steps=2,
73
+ logging_dir='./logs',
74
+ logging_steps=10,
75
+ report_to="none"
76
+ ),
77
+ train_dataset=dataset["train"],
78
+ tokenizer=tokenizer
79
+ )
80
+
81
+ # بداية عملية التدريب
82
+ trainer.train()
83
+
84
+ # حفظ النموذج المدرب
85
+ model.save_pretrained(f"user_models/{user_email}")
86
+ saved_models[user_email] = user_model_id
87
 
88
  return f"✅ تم حفظ النموذج بنجاح: {user_model_id}"
89
 
 
91
  def generate_image(prompt, user_email=None):
92
  if user_email and user_email in saved_models:
93
  model_id = saved_models[user_email]
94
+ model = StableDiffusionPipeline.from_pretrained(f"user_models/{user_email}") # تحميل النموذج المدرب للمستخدم
95
+ model.to(device)
96
+ result = model(prompt).images[0]
97
  else:
98
  result = pipe(prompt).images[0]
99
 
100
  return result
101
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
  # واجهة Gradio
103
  with gr.Blocks() as demo:
104
  gr.Markdown("# 🖼️ إنشاء صور مخصصة باستخدام الذكاء الاصطناعي")
 
109
  user_email_input = gr.Textbox(label="📧 بريدك الإلكتروني (اختياري لحفظ النموذج)")
110
  train_button = gr.Button("🔧 تدريب النموذج")
111
  train_output = gr.Textbox(label="🔔 نتيجة التدريب")
112
+ progress_bar = gr.Progress() # بدون label هنا
113
 
114
  with gr.Column():
115
  prompt_input = gr.Textbox(label="✏️ أدخل البرومبت لإنشاء صورة")
116
  generate_button = gr.Button("🎨 إنشاء صورة")
117
  output_image = gr.Image(label="📷 الصورة الناتجة")
118
 
119
+ train_button.click(train_model, inputs=[user_email_input, image_input, progress_bar], outputs=train_output)
120
  generate_button.click(generate_image, inputs=[prompt_input, user_email_input], outputs=output_image)
121
 
122
  gr.Markdown("### 🔑 تسجيل الدخول / التسجيل")