dream2589632147 commited on
Commit
5cedf62
·
verified ·
1 Parent(s): cecbfad

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +10 -16
app.py CHANGED
@@ -6,15 +6,13 @@ from PIL import Image
6
  from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, DDIMScheduler
7
  from controlnet_aux import CannyDetector
8
  from diffusers.utils import load_image
9
- # تم إزالة: from moviepy.editor import VideoFileClip
10
  import os
11
  import shutil
12
  import tempfile
13
  import datetime
14
- import ffmpeg # المكتبة الجديدة
15
 
16
  # 1. تهيئة النموذج
17
- # ... (كود التهيئة يبقى كما هو)
18
  device = "cuda" if torch.cuda.is_available() else "cpu"
19
  torch_dtype = torch.float16 if device == "cuda" else torch.float32
20
 
@@ -40,14 +38,11 @@ canny_processor = CannyDetector()
40
 
41
  # 2. دالة معالجة الفيديو والنموذج
42
  def colorize_video_multistyle(video_file, reference_image_path, prompt, style_choice, steps=25):
43
-
44
  timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
45
  output_temp_video_no_audio = os.path.join(tempfile.gettempdir(), f"temp_colored_{timestamp}_no_audio.mp4")
46
  final_output_name = f"colored_output_{timestamp}.mp4"
47
 
48
- # === 1. استخراج الإطارات و الصوت (باستخدام FFMPEG مباشرةً عبر OpenCV) ===
49
- # نستخدم FFMPEG-Python لاستخراج مسار ملف الصوت المؤقت
50
-
51
  # 1.1 استخراج الصوت
52
  audio_path = os.path.join(tempfile.gettempdir(), f"temp_audio_{timestamp}.aac")
53
  try:
@@ -68,7 +63,7 @@ def colorize_video_multistyle(video_file, reference_image_path, prompt, style_ch
68
  width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
69
  height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
70
 
71
- # 2. تجهيز المدخلات للنموذج (كود الأنماط يبقى كما هو)
72
  style_prompts = {
73
  "Auto Color": "photorealistic color photo, cinematic, detailed, masterpiece",
74
  "Vivid": "highly saturated, vibrant color photo, pop art colors",
@@ -86,7 +81,7 @@ def colorize_video_multistyle(video_file, reference_image_path, prompt, style_ch
86
  break
87
 
88
  pil_image = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
89
- canny_image = canny_processor(pil_image)
90
 
91
  image_out = pipe(
92
  prompt=final_prompt,
@@ -101,7 +96,6 @@ def colorize_video_multistyle(video_file, reference_image_path, prompt, style_ch
101
  cap.release()
102
 
103
  # 4. تجميع الإطارات في فيديو مؤقت (MP4) باستخدام OpenCV
104
- # نستخدم MP4V-2 لتجنب الاعتماد على الترميز الخارجي
105
  fourcc = cv2.VideoWriter_fourcc(*'mp4v')
106
  out = cv2.VideoWriter(output_temp_video_no_audio, fourcc, fps, (width, height))
107
 
@@ -128,22 +122,22 @@ def colorize_video_multistyle(video_file, reference_image_path, prompt, style_ch
128
  # 6. تنظيف الملفات المؤقتة
129
  if os.path.exists(audio_path):
130
  os.remove(audio_path)
131
-
132
  return final_output_name
133
 
134
- # 3. واجهة Gradio النهائية (بدون تغيير)
135
  iface = gr.Interface(
136
  fn=colorize_video_multistyle,
137
  inputs=[
138
  gr.Video(label="ملف الفيديو (إلزامي)"),
139
- gr.Image(label="الصورة المرجعية (لنقل الألوان)", type="filepath", required=False),
140
- gr.Textbox(label="المطالبة النصية (لتوجيه التلوين)", required=False, value=""),
141
  gr.Dropdown(["Auto Color", "Vivid", "Vintage"], label="اختيار النمط المسبق", value="Auto Color"),
142
- gr.Slider(minimum=10, maximum=50, step=5, value=25, label="خطوات التوليد (للسرعة/الجودة)")
143
  ],
144
  outputs=gr.Video(label="الفيديو الملون (MP4)"),
145
  title="🎨 Multi-Style Video Colorizer",
146
- description="تلوين احترافي للفيديو باستخدام ControlNet: يُحافظ على الهيكل وتتغير الألوان فقط."
147
  )
148
 
149
  if __name__ == "__main__":
 
6
  from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, DDIMScheduler
7
  from controlnet_aux import CannyDetector
8
  from diffusers.utils import load_image
 
9
  import os
10
  import shutil
11
  import tempfile
12
  import datetime
13
+ import ffmpeg
14
 
15
  # 1. تهيئة النموذج
 
16
  device = "cuda" if torch.cuda.is_available() else "cpu"
17
  torch_dtype = torch.float16 if device == "cuda" else torch.float32
18
 
 
38
 
39
  # 2. دالة معالجة الفيديو والنموذج
40
  def colorize_video_multistyle(video_file, reference_image_path, prompt, style_choice, steps=25):
 
41
  timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
42
  output_temp_video_no_audio = os.path.join(tempfile.gettempdir(), f"temp_colored_{timestamp}_no_audio.mp4")
43
  final_output_name = f"colored_output_{timestamp}.mp4"
44
 
45
+ # === 1. استخراج الإطارات والصوت ===
 
 
46
  # 1.1 استخراج الصوت
47
  audio_path = os.path.join(tempfile.gettempdir(), f"temp_audio_{timestamp}.aac")
48
  try:
 
63
  width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
64
  height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
65
 
66
+ # 2. تجهيز المدخلات للنموذج
67
  style_prompts = {
68
  "Auto Color": "photorealistic color photo, cinematic, detailed, masterpiece",
69
  "Vivid": "highly saturated, vibrant color photo, pop art colors",
 
81
  break
82
 
83
  pil_image = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
84
+ canny_image = canny_processor(pil_image)
85
 
86
  image_out = pipe(
87
  prompt=final_prompt,
 
96
  cap.release()
97
 
98
  # 4. تجميع الإطارات في فيديو مؤقت (MP4) باستخدام OpenCV
 
99
  fourcc = cv2.VideoWriter_fourcc(*'mp4v')
100
  out = cv2.VideoWriter(output_temp_video_no_audio, fourcc, fps, (width, height))
101
 
 
122
  # 6. تنظيف الملفات المؤقتة
123
  if os.path.exists(audio_path):
124
  os.remove(audio_path)
125
+
126
  return final_output_name
127
 
128
+ # 3. واجهة Gradio النهائية
129
  iface = gr.Interface(
130
  fn=colorize_video_multistyle,
131
  inputs=[
132
  gr.Video(label="ملف الفيديو (إلزامي)"),
133
+ gr.Image(label="الصورة المرجعية (لنقل الألوان)", type="filepath"),
134
+ gr.Textbox(label="المطالبة النصية (لتوجيه التلوين)", value=""),
135
  gr.Dropdown(["Auto Color", "Vivid", "Vintage"], label="اختيار النمط المسبق", value="Auto Color"),
136
+ gr.Slider(minimum=10, maximum=50, step=5, value=25, label="خطوات التوليد")
137
  ],
138
  outputs=gr.Video(label="الفيديو الملون (MP4)"),
139
  title="🎨 Multi-Style Video Colorizer",
140
+ description="تلوين احترافي للفيديو باستخدام ControlNet."
141
  )
142
 
143
  if __name__ == "__main__":