victorisgeek commited on
Commit
3fbc769
·
verified ·
1 Parent(s): 9415dd1
Files changed (1) hide show
  1. app.py +43 -46
app.py CHANGED
@@ -26,7 +26,7 @@ from utils import trim_video, StreamerThread, ProcessBar, open_directory, split_
26
 
27
  ## ------------------------------ USER ARGS ------------------------------
28
 
29
- parser = argparse.ArgumentParser(description="Swap-Mukham Face Swapper")
30
  parser.add_argument("--out_dir", help="Default Output directory", default=os.getcwd())
31
  parser.add_argument("--batch_size", help="Gpu batch size", default=32)
32
  parser.add_argument("--cuda", action="store_true", help="Enable cuda", default=False)
@@ -183,27 +183,27 @@ def process(
183
 
184
  start_time = time.time()
185
  total_exec_time = lambda start_time: divmod(time.time() - start_time, 60)
186
- get_finsh_text = lambda start_time: f"✔️ Completed in {int(total_exec_time(start_time)[0])} min {int(total_exec_time(start_time)[1])} sec."
187
 
188
  ## ------------------------------ PREPARE INPUTS & LOAD MODELS ------------------------------
189
 
190
 
191
 
192
- yield "### \n Loading face analyser model...", *ui_before()
193
  load_face_analyser_model()
194
 
195
- yield "### \n Loading face swapper model...", *ui_before()
196
  load_face_swapper_model()
197
 
198
  if face_enhancer_name != "NONE":
199
  if face_enhancer_name not in cv2_interpolations:
200
- yield f"### \n Loading {face_enhancer_name} model...", *ui_before()
201
  FACE_ENHANCER = load_face_enhancer_model(name=face_enhancer_name, device=device)
202
  else:
203
  FACE_ENHANCER = None
204
 
205
  if enable_face_parser:
206
- yield "### \n Loading face parsing model...", *ui_before()
207
  load_face_parser_model()
208
 
209
  includes = mask_regions_to_list(mask_includes)
@@ -221,7 +221,7 @@ def process(
221
  ## ------------------------------ CONTENT CHECK ------------------------------
222
 
223
 
224
- yield "### \n Analysing face data...", *ui_before()
225
  if condition != "Specific Face":
226
  source_data = source_path, age
227
  else:
@@ -237,7 +237,7 @@ def process(
237
 
238
  ## ------------------------------ SWAP FUNC ------------------------------
239
 
240
- yield "### \n Generating faces...", *ui_before()
241
  preds = []
242
  matrs = []
243
  count = 0
@@ -251,13 +251,13 @@ def process(
251
  if USE_CUDA:
252
  image_grid = create_image_grid(batch_pred, size=128)
253
  PREVIEW = image_grid[:, :, ::-1]
254
- yield f"### \n Generating face Batch {count}", *ui_before()
255
 
256
  ## ------------------------------ FACE ENHANCEMENT ------------------------------
257
 
258
  generated_len = len(preds)
259
  if face_enhancer_name != "NONE":
260
- yield f"### \n Upscaling faces with {face_enhancer_name}...", *ui_before()
261
  for idx, pred in tqdm(enumerate(preds), total=generated_len, desc=f"Upscaling with {face_enhancer_name}"):
262
  enhancer_model, enhancer_model_runner = FACE_ENHANCER
263
  pred = enhancer_model_runner(pred, enhancer_model)
@@ -267,7 +267,7 @@ def process(
267
  ## ------------------------------ FACE PARSING ------------------------------
268
 
269
  if enable_face_parser:
270
- yield "### \n Face-parsing mask...", *ui_before()
271
  masks = []
272
  count = 0
273
  for batch_mask in get_parsed_mask(FACE_PARSER, preds, classes=includes, device=device, batch_size=BATCH_SIZE, softness=int(mask_soft_iterations)):
@@ -278,7 +278,7 @@ def process(
278
  if len(batch_mask) > 1:
279
  image_grid = create_image_grid(batch_mask, size=128)
280
  PREVIEW = image_grid[:, :, ::-1]
281
- yield f"### \n Face parsing Batch {count}", *ui_before()
282
  masks = np.concatenate(masks, axis=0) if len(masks) >= 1 else masks
283
  else:
284
  masks = [None] * generated_len
@@ -294,7 +294,7 @@ def process(
294
 
295
  ## ------------------------------ PASTE-BACK ------------------------------
296
 
297
- yield "### \n Pasting back...", *ui_before()
298
  def post_process(frame_idx, frame_img, split_preds, split_matrs, split_masks, enable_laplacian_blend, crop_mask, blur_amount, erode_amount):
299
  whole_img_path = frame_img
300
  whole_img = cv2.imread(whole_img_path)
@@ -350,7 +350,7 @@ def process(
350
  temp_path = os.path.join(output_path, output_name, "sequence")
351
  os.makedirs(temp_path, exist_ok=True)
352
 
353
- yield "### \n Extracting video frames...", *ui_before()
354
  image_sequence = []
355
  cap = cv2.VideoCapture(video_path)
356
  curr_idx = 0
@@ -367,12 +367,12 @@ def process(
367
  for info_update in swap_process(image_sequence):
368
  yield info_update
369
 
370
- yield "### \n Merging sequence...", *ui_before()
371
  output_video_path = os.path.join(output_path, output_name + ".mp4")
372
  merge_img_sequence_from_ref(video_path, image_sequence, output_video_path)
373
 
374
  if os.path.exists(temp_path) and not keep_output_sequence:
375
- yield "### \n Removing temporary files...", *ui_before()
376
  shutil.rmtree(temp_path)
377
 
378
  WORKSPACE = output_path
@@ -490,7 +490,7 @@ def video_changed(video_path):
490
 
491
 
492
  def analyse_settings_changed(detect_condition, detection_size, detection_threshold):
493
- yield "### \n Applying new values..."
494
  global FACE_ANALYSER
495
  global DETECT_CONDITION
496
  DETECT_CONDITION = detect_condition
@@ -500,7 +500,7 @@ def analyse_settings_changed(detect_condition, detection_size, detection_thresho
500
  det_size=(int(detection_size), int(detection_size)),
501
  det_thresh=float(detection_threshold),
502
  )
503
- yield f"### \n ✔️ Applied detect condition:{detect_condition}, detection size: {detection_size}, detection threshold: {detection_threshold}"
504
 
505
 
506
  def stop_running():
@@ -526,14 +526,14 @@ def slider_changed(show_frame, video_path, frame_index):
526
 
527
 
528
  def trim_and_reload(video_path, output_path, output_name, start_frame, stop_frame):
529
- yield video_path, f"### \n Trimming video frame {start_frame} to {stop_frame}..."
530
  try:
531
  output_path = os.path.join(output_path, output_name)
532
  trimmed_video = trim_video(video_path, output_path, start_frame, stop_frame)
533
- yield trimmed_video, "### \n ✔️ Video trimmed and reloaded."
534
  except Exception as e:
535
  print(e)
536
- yield video_path, "### \n Video trimming failed. See console for more info."
537
 
538
 
539
  ## ------------------------------ GRADIO GUI ------------------------------
@@ -543,15 +543,15 @@ footer{display:none !important}
543
  """
544
 
545
  with gr.Blocks(css=css) as interface:
546
- gr.Markdown("# 🗿 Swap Mukham")
547
- gr.Markdown("### Face swap app based on insightface inswapper.")
548
  with gr.Row():
549
  with gr.Row():
550
  with gr.Column(scale=0.4):
551
- with gr.Tab("📄 Swap Condition"):
552
  swap_option = gr.Dropdown(
553
  swap_options_list,
554
- info="Choose which face or faces in the target image to swap.",
555
  multiselect=False,
556
  show_label=False,
557
  value=swap_options_list[0],
@@ -561,13 +561,13 @@ with gr.Blocks(css=css) as interface:
561
  value=25, label="Value", interactive=True, visible=False
562
  )
563
 
564
- with gr.Tab("🎚️ Detection Settings"):
565
  detect_condition_dropdown = gr.Dropdown(
566
  detect_conditions,
567
  label="Condition",
568
  value=DETECT_CONDITION,
569
  interactive=True,
570
- info="This condition is only used when multiple faces are detected on source or specific image.",
571
  )
572
  detection_size = gr.Number(
573
  label="Detection Size", value=DETECT_SIZE, interactive=True
@@ -579,7 +579,7 @@ with gr.Blocks(css=css) as interface:
579
  )
580
  apply_detection_settings = gr.Button("Apply settings")
581
 
582
- with gr.Tab("📤 Output Settings"):
583
  output_directory = gr.Text(
584
  label="Output Directory",
585
  value=DEF_OUTPUT_PATH,
@@ -592,7 +592,7 @@ with gr.Blocks(css=css) as interface:
592
  label="Keep output sequence", value=False, interactive=True
593
  )
594
 
595
- with gr.Tab("🪄 Other Settings"):
596
  face_scale = gr.Slider(
597
  label="Face Scale",
598
  minimum=0,
@@ -668,7 +668,7 @@ with gr.Blocks(css=css) as interface:
668
 
669
 
670
  source_image_input = gr.Image(
671
- label="Source face", type="filepath", interactive=True
672
  )
673
 
674
  with gr.Box(visible=False) as specific_face:
@@ -699,15 +699,15 @@ with gr.Blocks(css=css) as interface:
699
 
700
  with gr.Box(visible=True) as input_image_group:
701
  image_input = gr.Image(
702
- label="Target Image", interactive=True, type="filepath"
703
  )
704
 
705
  with gr.Box(visible=False) as input_video_group:
706
  vid_widget = gr.Video if USE_COLAB else gr.Text
707
  video_input = gr.Video(
708
- label="Target Video", interactive=True
709
  )
710
- with gr.Accordion("✂️ Trim video", open=False):
711
  with gr.Column():
712
  with gr.Row():
713
  set_slider_range_btn = gr.Button(
@@ -754,38 +754,35 @@ with gr.Blocks(css=css) as interface:
754
  info = gr.Markdown(value="...")
755
 
756
  with gr.Row():
757
- swap_button = gr.Button(" Swap", variant="primary")
758
- cancel_button = gr.Button(" Cancel")
759
 
760
- preview_image = gr.Image(label="Output", interactive=False)
761
  preview_video = gr.Video(
762
  label="Output", interactive=False, visible=False
763
  )
764
 
765
  with gr.Row():
766
  output_directory_button = gr.Button(
767
- "📂", interactive=False, visible=False
768
  )
769
  output_video_button = gr.Button(
770
- "🎬", interactive=False, visible=False
771
  )
772
 
773
  with gr.Box():
774
  with gr.Row():
775
  gr.Markdown(
776
- "### [🤝 Sponsor](https://github.com/sponsors/harisreedhar)"
777
  )
778
  gr.Markdown(
779
- "### [👨‍💻 Source code](https://github.com/harisreedhar/Swap-Mukham)"
780
  )
781
  gr.Markdown(
782
- "### [⚠️ Disclaimer](https://github.com/harisreedhar/Swap-Mukham#disclaimer)"
783
  )
784
  gr.Markdown(
785
- "### [🌐 Run in Colab](https://colab.research.google.com/github/harisreedhar/Swap-Mukham/blob/main/swap_mukham_colab.ipynb)"
786
- )
787
- gr.Markdown(
788
- "### [🤗 Acknowledgements](https://github.com/harisreedhar/Swap-Mukham#acknowledgements)"
789
  )
790
 
791
  ## ------------------------------ GRADIO EVENTS ------------------------------
@@ -903,4 +900,4 @@ if __name__ == "__main__":
903
  if USE_COLAB:
904
  print("Running in colab mode")
905
 
906
- interface.queue(concurrency_count=2, max_size=20).launch(share=USE_COLAB)
 
26
 
27
  ## ------------------------------ USER ARGS ------------------------------
28
 
29
+ parser = argparse.ArgumentParser(description="FSawap-BypassNSFW")
30
  parser.add_argument("--out_dir", help="Default Output directory", default=os.getcwd())
31
  parser.add_argument("--batch_size", help="Gpu batch size", default=32)
32
  parser.add_argument("--cuda", action="store_true", help="Enable cuda", default=False)
 
183
 
184
  start_time = time.time()
185
  total_exec_time = lambda start_time: divmod(time.time() - start_time, 60)
186
+ get_finsh_text = lambda start_time: f"📌 Completed in {int(total_exec_time(start_time)[0])} min {int(total_exec_time(start_time)[1])} sec."
187
 
188
  ## ------------------------------ PREPARE INPUTS & LOAD MODELS ------------------------------
189
 
190
 
191
 
192
+ yield "### \n ⏰ Loading face analyser model...", *ui_before()
193
  load_face_analyser_model()
194
 
195
+ yield "### \n ⏰ model မျက်နှာဖလှယ်နေတယ်...", *ui_before()
196
  load_face_swapper_model()
197
 
198
  if face_enhancer_name != "NONE":
199
  if face_enhancer_name not in cv2_interpolations:
200
+ yield f"### \n ⌛ Loading {face_enhancer_name} model...", *ui_before()
201
  FACE_ENHANCER = load_face_enhancer_model(name=face_enhancer_name, device=device)
202
  else:
203
  FACE_ENHANCER = None
204
 
205
  if enable_face_parser:
206
+ yield "### \n ⏰ Loading model မျက်နှာစီစဉ်နေပါပြီ...", *ui_before()
207
  load_face_parser_model()
208
 
209
  includes = mask_regions_to_list(mask_includes)
 
221
  ## ------------------------------ CONTENT CHECK ------------------------------
222
 
223
 
224
+ yield "### \n 🔮 Face data တွေစီစဉ်နေပြီ...", *ui_before()
225
  if condition != "Specific Face":
226
  source_data = source_path, age
227
  else:
 
237
 
238
  ## ------------------------------ SWAP FUNC ------------------------------
239
 
240
+ yield "### \n 🩵 Face ကိုဖန်တီးနေပါပြီ...", *ui_before()
241
  preds = []
242
  matrs = []
243
  count = 0
 
251
  if USE_CUDA:
252
  image_grid = create_image_grid(batch_pred, size=128)
253
  PREVIEW = image_grid[:, :, ::-1]
254
+ yield f"### \n 🧲 face Batch ပြုလုပ်နေပါပြီ...{count}", *ui_before()
255
 
256
  ## ------------------------------ FACE ENHANCEMENT ------------------------------
257
 
258
  generated_len = len(preds)
259
  if face_enhancer_name != "NONE":
260
+ yield f"### \n 🎀 Upscaling faces with {face_enhancer_name}...", *ui_before()
261
  for idx, pred in tqdm(enumerate(preds), total=generated_len, desc=f"Upscaling with {face_enhancer_name}"):
262
  enhancer_model, enhancer_model_runner = FACE_ENHANCER
263
  pred = enhancer_model_runner(pred, enhancer_model)
 
267
  ## ------------------------------ FACE PARSING ------------------------------
268
 
269
  if enable_face_parser:
270
+ yield "### \n 🎁 Face-parsing mask...", *ui_before()
271
  masks = []
272
  count = 0
273
  for batch_mask in get_parsed_mask(FACE_PARSER, preds, classes=includes, device=device, batch_size=BATCH_SIZE, softness=int(mask_soft_iterations)):
 
278
  if len(batch_mask) > 1:
279
  image_grid = create_image_grid(batch_mask, size=128)
280
  PREVIEW = image_grid[:, :, ::-1]
281
+ yield f"### \n 🎯 Face parsing Batch {count}", *ui_before()
282
  masks = np.concatenate(masks, axis=0) if len(masks) >= 1 else masks
283
  else:
284
  masks = [None] * generated_len
 
294
 
295
  ## ------------------------------ PASTE-BACK ------------------------------
296
 
297
+ yield "### \n 🛑 Pasting ပြုလုပ်နေပြီ...", *ui_before()
298
  def post_process(frame_idx, frame_img, split_preds, split_matrs, split_masks, enable_laplacian_blend, crop_mask, blur_amount, erode_amount):
299
  whole_img_path = frame_img
300
  whole_img = cv2.imread(whole_img_path)
 
350
  temp_path = os.path.join(output_path, output_name, "sequence")
351
  os.makedirs(temp_path, exist_ok=True)
352
 
353
+ yield "### \n 🚀 Extracting video frames...", *ui_before()
354
  image_sequence = []
355
  cap = cv2.VideoCapture(video_path)
356
  curr_idx = 0
 
367
  for info_update in swap_process(image_sequence):
368
  yield info_update
369
 
370
+ yield "### \n 📽️ Merging sequence...", *ui_before()
371
  output_video_path = os.path.join(output_path, output_name + ".mp4")
372
  merge_img_sequence_from_ref(video_path, image_sequence, output_video_path)
373
 
374
  if os.path.exists(temp_path) and not keep_output_sequence:
375
+ yield "### \n 🎭 Removing temporary files...", *ui_before()
376
  shutil.rmtree(temp_path)
377
 
378
  WORKSPACE = output_path
 
490
 
491
 
492
  def analyse_settings_changed(detect_condition, detection_size, detection_threshold):
493
+ yield "### \n 🔋 Applying new values..."
494
  global FACE_ANALYSER
495
  global DETECT_CONDITION
496
  DETECT_CONDITION = detect_condition
 
500
  det_size=(int(detection_size), int(detection_size)),
501
  det_thresh=float(detection_threshold),
502
  )
503
+ yield f"### \n 📌 Applied detect condition:{detect_condition}, detection size: {detection_size}, detection threshold: {detection_threshold}"
504
 
505
 
506
  def stop_running():
 
526
 
527
 
528
  def trim_and_reload(video_path, output_path, output_name, start_frame, stop_frame):
529
+ yield video_path, f"### \n 🛠️ Trimming video frame {start_frame} to {stop_frame}..."
530
  try:
531
  output_path = os.path.join(output_path, output_name)
532
  trimmed_video = trim_video(video_path, output_path, start_frame, stop_frame)
533
+ yield trimmed_video, "### \n ✂️✂️ Video trimmed and reloaded."
534
  except Exception as e:
535
  print(e)
536
+ yield video_path, "### \n 🔴 Video trimming failed. See console for more info."
537
 
538
 
539
  ## ------------------------------ GRADIO GUI ------------------------------
 
543
  """
544
 
545
  with gr.Blocks(css=css) as interface:
546
+ gr.Markdown("# 💞 GeepDeep 💞")
547
+ gr.Markdown("### FaceSwap app အား 🗂️insightface inswapper🗂️ ဖြင့်ဖန်တီးပါသည်.")
548
  with gr.Row():
549
  with gr.Row():
550
  with gr.Column(scale=0.4):
551
+ with gr.Tab("💟 Swap Condition"):
552
  swap_option = gr.Dropdown(
553
  swap_options_list,
554
+ info="🎛️ပြောင်းလဲလိုသည့် မျက်နှာ အနေအထားအား ရွေးချယ်ပါ🎛️.",
555
  multiselect=False,
556
  show_label=False,
557
  value=swap_options_list[0],
 
561
  value=25, label="Value", interactive=True, visible=False
562
  )
563
 
564
+ with gr.Tab("👌 Detection Settings"):
565
  detect_condition_dropdown = gr.Dropdown(
566
  detect_conditions,
567
  label="Condition",
568
  value=DETECT_CONDITION,
569
  interactive=True,
570
+ info="👫 မျက်နှာနှစ်ခုရွေးရန်အတွက်ဖြစ်သည်၊👫.",
571
  )
572
  detection_size = gr.Number(
573
  label="Detection Size", value=DETECT_SIZE, interactive=True
 
579
  )
580
  apply_detection_settings = gr.Button("Apply settings")
581
 
582
+ with gr.Tab("🌏 Output Settings"):
583
  output_directory = gr.Text(
584
  label="Output Directory",
585
  value=DEF_OUTPUT_PATH,
 
592
  label="Keep output sequence", value=False, interactive=True
593
  )
594
 
595
+ with gr.Tab("🍑 Other Settings"):
596
  face_scale = gr.Slider(
597
  label="Face Scale",
598
  minimum=0,
 
668
 
669
 
670
  source_image_input = gr.Image(
671
+ label="🍭အသုံးပြုမည့်မျက်နှာ🍭", type="filepath", interactive=True
672
  )
673
 
674
  with gr.Box(visible=False) as specific_face:
 
699
 
700
  with gr.Box(visible=True) as input_image_group:
701
  image_input = gr.Image(
702
+ label="📸 ပြောင်းလဲလိုသည့်မျက်နှာ 📸", interactive=True, type="filepath"
703
  )
704
 
705
  with gr.Box(visible=False) as input_video_group:
706
  vid_widget = gr.Video if USE_COLAB else gr.Text
707
  video_input = gr.Video(
708
+ label="🖥️ပြောင်းမည့်video🖥️", interactive=True
709
  )
710
+ with gr.Accordion("✂️ video တည်းဖြတ်ရန်", open=False):
711
  with gr.Column():
712
  with gr.Row():
713
  set_slider_range_btn = gr.Button(
 
754
  info = gr.Markdown(value="...")
755
 
756
  with gr.Row():
757
+ swap_button = gr.Button("💗 Swap 💕", variant="primary")
758
+ cancel_button = gr.Button("💔 Cancel 💔")
759
 
760
+ preview_image = gr.Image(label="💕Output💕", interactive=False)
761
  preview_video = gr.Video(
762
  label="Output", interactive=False, visible=False
763
  )
764
 
765
  with gr.Row():
766
  output_directory_button = gr.Button(
767
+ "🗂️", interactive=False, visible=False
768
  )
769
  output_video_button = gr.Button(
770
+ "📽️", interactive=False, visible=False
771
  )
772
 
773
  with gr.Box():
774
  with gr.Row():
775
  gr.Markdown(
776
+ "[🆚မူရင်းကုဒ်](https://huggingface.co/spaces/victorisgeek/SwapYoFace)"
777
  )
778
  gr.Markdown(
779
+ "[🚨ရှင်းလင်းချက် ကြည့်ကျက်လုပ်လိုက်]"
780
  )
781
  gr.Markdown(
782
+ "[🧿 Run in Colab](https://colab.research.google.com/github/victorgeel/FaceSwapNoNfsw)"
783
  )
784
  gr.Markdown(
785
+ "[💥🖕မအေလိုးမင်းအောင်လှိုင်🖕💥]"
 
 
 
786
  )
787
 
788
  ## ------------------------------ GRADIO EVENTS ------------------------------
 
900
  if USE_COLAB:
901
  print("Running in colab mode")
902
 
903
+ interface.queue(concurrency_count=2, max_size=20).launch(share=USE_COLAB)