sang1231 commited on
Commit
8e12093
·
verified ·
1 Parent(s): 42ed421

Update app.py

Browse files

"Final fix: Implemented direct download for inswapper_128.onnx using new URL."

Files changed (1) hide show
  1. app.py +19 -31
app.py CHANGED
@@ -1,37 +1,48 @@
1
- # TÊN TỆP: app.py (Đã Sửa lỗi Lặp lại: Tải Mô hình Trực tiếp)
2
 
3
  import gradio as gr
4
  import cv2
5
  import numpy as np
6
  import insightface
7
  from insightface.app import FaceAnalysis
8
- import os # Thêm thư viện os để quản lý đường dẫn
 
 
9
 
10
- # Đường dẫn URL tới hình inswapper_128.onnx
11
- MODEL_URL = 'https://github.com/deepinsight/insightface/releases/download/v0.7/inswapper_128.onnx'
12
- # Tên tệp mô hình sẽ được lưu cục bộ
 
 
13
  MODEL_NAME = 'inswapper_128.onnx'
 
14
 
15
  # Hàm Tải Mô hình Bằng Tay (để đảm bảo tệp tồn tại)
16
  def download_model(url, filename):
17
  if not os.path.exists(filename):
18
  print(f"Downloading {filename} from {url}...")
19
- import urllib.request
20
- urllib.request.urlretrieve(url, filename)
 
 
 
 
21
  return filename
22
 
23
  # TẢI MÔ HÌNH VÀO THƯ MỤC LÀM VIỆC
24
  local_model_path = download_model(MODEL_URL, MODEL_NAME)
25
 
 
26
  # KHỞI TẠO MÔ HÌNH (Chỉ chạy một lần khi ứng dụng khởi động)
27
  app = FaceAnalysis(
28
  name='buffalo_l',
29
- providers=['CPUExecutionProvider']
30
  )
31
  app.prepare(ctx_id=0, det_size=(640, 640))
32
 
33
  # Tải mô hình Face Swapper (InSwapper)
34
  # SỬA LỖI: Sử dụng đường dẫn cục bộ (local_model_path) thay vì get_model
 
35
  swapper = insightface.model_zoo.get_model(local_model_path, providers=['CPUExecutionProvider'])
36
 
37
  # HÀM HOÁN ĐỔI KHUÔN MẶT THỰC TẾ
@@ -62,26 +73,3 @@ def face_swap_function(source_path, target_path):
62
 
63
  # 2. Phát hiện khuôn mặt đích
64
  faces_target = app.get(img_target)
65
- if not faces_target:
66
- return cv2.cvtColor(img_target, cv2.COLOR_BGR2RGB)
67
-
68
- target_face = faces_target[0]
69
-
70
- # 3. Thực hiện hoán đổi khuôn mặt
71
- result_img = swapper.get(img_target, target_face, source_face, paste_back=True)
72
-
73
- # Trả về ảnh đã được xử lý (Chuyển từ BGR sang RGB cho Gradio)
74
- return cv2.cvtColor(result_img, cv2.COLOR_BGR2RGB)
75
-
76
- # TẠO GIAO DIỆN GRADIO
77
- demo = gr.Interface(
78
- fn=face_swap_function,
79
- inputs=[
80
- gr.Image(type="filepath", label="Ảnh Nguồn (Khuôn mặt bạn muốn dùng)"),
81
- gr.Image(type="filepath", label="Ảnh Đích (Khuôn mặt bạn muốn thay thế)")
82
- ],
83
- outputs=gr.Image(type="numpy", label="Kết quả Hoán đổi Khuôn mặt (Face Swap)"),
84
- title="Ứng dụng Hoán đổi Khuôn mặt INSIGHTFACE Hoàn chỉnh"
85
- )
86
-
87
- demo.launch()
 
1
+ # TÊN TỆP: app.py (Đã Sửa lỗi Cuối cùng: Cập nhật URL Mô hình)
2
 
3
  import gradio as gr
4
  import cv2
5
  import numpy as np
6
  import insightface
7
  from insightface.app import FaceAnalysis
8
+ import os
9
+ import urllib.request
10
+ import ssl
11
 
12
+ # Bỏ qua xác minh SSL cho mục đích tải xuống, thường cần thiết trong môi trường container
13
+ ssl._create_default_https_context = ssl._create_unverified_context
14
+
15
+ # Đường dẫn URL MỚI đã sửa lỗi 404 tới mô hình inswapper_128.onnx
16
+ MODEL_URL = 'https://huggingface.co/xingren23/comfyflow-models/resolve/976de8449674de379b02c144d0b3cfa2b61482f2/insightface/inswapper_128.onnx'
17
  MODEL_NAME = 'inswapper_128.onnx'
18
+ MODEL_PATH = os.path.join(os.getcwd(), MODEL_NAME)
19
 
20
  # Hàm Tải Mô hình Bằng Tay (để đảm bảo tệp tồn tại)
21
  def download_model(url, filename):
22
  if not os.path.exists(filename):
23
  print(f"Downloading {filename} from {url}...")
24
+ try:
25
+ urllib.request.urlretrieve(url, filename)
26
+ print(f"Successfully downloaded {filename}.")
27
+ except Exception as e:
28
+ print(f"FATAL ERROR: Failed to download model {filename}: {e}")
29
+ raise e
30
  return filename
31
 
32
  # TẢI MÔ HÌNH VÀO THƯ MỤC LÀM VIỆC
33
  local_model_path = download_model(MODEL_URL, MODEL_NAME)
34
 
35
+
36
  # KHỞI TẠO MÔ HÌNH (Chỉ chạy một lần khi ứng dụng khởi động)
37
  app = FaceAnalysis(
38
  name='buffalo_l',
39
+ providers=['CPUExecutionProvider'] # Sử dụng CPU
40
  )
41
  app.prepare(ctx_id=0, det_size=(640, 640))
42
 
43
  # Tải mô hình Face Swapper (InSwapper)
44
  # SỬA LỖI: Sử dụng đường dẫn cục bộ (local_model_path) thay vì get_model
45
+ # và loại bỏ download=True.
46
  swapper = insightface.model_zoo.get_model(local_model_path, providers=['CPUExecutionProvider'])
47
 
48
  # HÀM HOÁN ĐỔI KHUÔN MẶT THỰC TẾ
 
73
 
74
  # 2. Phát hiện khuôn mặt đích
75
  faces_target = app.get(img_target)