Spaces:
Sleeping
Sleeping
File size: 5,761 Bytes
1606881 4040a5a 1606881 d82d2dd 4103376 1606881 1e4cdab 4040a5a f522e01 1606881 1e4cdab 1606881 f522e01 1606881 f522e01 a0d348e 1606881 4103376 1606881 f522e01 4103376 f522e01 4103376 f522e01 4103376 f522e01 4040a5a f522e01 d82d2dd f522e01 4103376 f522e01 d82d2dd 4103376 f522e01 4103376 1e4cdab 1606881 4040a5a f522e01 1606881 f522e01 1606881 f522e01 4040a5a 8c37d6b 4040a5a f522e01 1606881 8c37d6b 1e4cdab 4040a5a 8c37d6b 1e4cdab a0d348e 1606881 1e4cdab 4040a5a 8c37d6b 1e4cdab 4040a5a 8c37d6b 1e4cdab 4040a5a 1606881 a0d348e |
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 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
import os
import gradio as gr
import torch
from diffusers import StableDiffusionPipeline
from transformers import CLIPTextModel, CLIPTokenizer, Trainer, TrainingArguments
from datasets import load_dataset
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)
# قاعدة بيانات للمستخدمين والنماذج المحفوظة
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):
if not user_email:
return "يجب تسجيل الدخول لحفظ النموذج."
user_model_id = f"user_model_{user_email}"
saved_models[user_email] = user_model_id
# تأكد من أن الصور مرفوعة
if len(images) == 0:
return "⚠️ يجب رفع صور للتدريب."
# تجهيز البيانات الخاصة بالتدريب
dataset = load_dataset('imagefolder', data_dir=images)
# إعداد الـ Trainer للتدريب
training_args = TrainingArguments(
output_dir="./output", # مكان حفظ النموذج المدرب
per_device_train_batch_size=1, # حجم الدفعة
num_train_epochs=3, # عدد العصور (epochs)
logging_dir='./logs', # مكان تسجيل السجلات
logging_steps=10,
)
# تحميل Tokenizer و Model من CLIP لتوليد النصوص
tokenizer = CLIPTokenizer.from_pretrained("openai/clip-vit-base-patch16")
text_encoder = CLIPTextModel.from_pretrained("openai/clip-vit-base-patch16")
# إعداد الـ Trainer باستخدام Trainer من Hugging Face
trainer = Trainer(
model=pipe.unet,
args=training_args,
train_dataset=dataset["train"],
tokenizer=tokenizer,
data_collator=None,
)
# بدء عملية التدريب
trainer.train()
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="🔔 نتيجة التدريب")
with gr.Column():
prompt_input = gr.Textbox(label="✏️ أدخل البرومبت لإنشاء صورة")
generate_button = gr.Button("🎨 إنشاء صورة")
output_image = gr.Image(label="📷 الصورة الناتجة")
# تم إزالة progress_bar من هنا
train_button.click(train_model, inputs=[user_email_input, image_input], 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) |