Jonny001 commited on
Commit
5247a5e
·
verified ·
1 Parent(s): e0ce594

Update roop/ui.py

Browse files
Files changed (1) hide show
  1. roop/ui.py +22 -48
roop/ui.py CHANGED
@@ -31,7 +31,6 @@ source_label = None
31
  target_label = None
32
  status_label = None
33
 
34
-
35
  def init(start: Callable[[], None], destroy: Callable[[], None]) -> ctk.CTk:
36
  global ROOT, PREVIEW
37
 
@@ -40,7 +39,6 @@ def init(start: Callable[[], None], destroy: Callable[[], None]) -> ctk.CTk:
40
 
41
  return ROOT
42
 
43
-
44
  def create_root(start: Callable[[], None], destroy: Callable[[], None]) -> ctk.CTk:
45
  global source_label, target_label, status_label
46
 
@@ -101,7 +99,6 @@ def create_root(start: Callable[[], None], destroy: Callable[[], None]) -> ctk.C
101
 
102
  return root
103
 
104
-
105
  def create_preview(parent: ctk.CTkToplevel) -> ctk.CTkToplevel:
106
  global preview_label, preview_slider
107
 
@@ -119,17 +116,15 @@ def create_preview(parent: ctk.CTkToplevel) -> ctk.CTkToplevel:
119
 
120
  return preview
121
 
122
-
123
  def update_status(text: str) -> None:
124
  status_label.configure(text=text)
125
  ROOT.update()
126
 
127
-
128
  def select_source_path() -> None:
129
  global RECENT_DIRECTORY_SOURCE
130
 
131
  PREVIEW.withdraw()
132
- source_path = ctk.filedialog.askopenfilename(title='select an source image', initialdir=RECENT_DIRECTORY_SOURCE)
133
  if is_image(source_path):
134
  roop.globals.source_path = source_path
135
  RECENT_DIRECTORY_SOURCE = os.path.dirname(roop.globals.source_path)
@@ -139,12 +134,11 @@ def select_source_path() -> None:
139
  roop.globals.source_path = None
140
  source_label.configure(image=None)
141
 
142
-
143
  def select_target_path() -> None:
144
  global RECENT_DIRECTORY_TARGET
145
 
146
  PREVIEW.withdraw()
147
- target_path = ctk.filedialog.askopenfilename(title='select an target image or video', initialdir=RECENT_DIRECTORY_TARGET)
148
  if is_image(target_path):
149
  roop.globals.target_path = target_path
150
  RECENT_DIRECTORY_TARGET = os.path.dirname(roop.globals.target_path)
@@ -159,7 +153,6 @@ def select_target_path() -> None:
159
  roop.globals.target_path = None
160
  target_label.configure(image=None)
161
 
162
-
163
  def select_output_path(start: Callable[[], None]) -> None:
164
  global RECENT_DIRECTORY_OUTPUT
165
 
@@ -174,58 +167,39 @@ def select_output_path(start: Callable[[], None]) -> None:
174
  RECENT_DIRECTORY_OUTPUT = os.path.dirname(roop.globals.output_path)
175
  start()
176
 
177
-
178
  def render_image_preview(image_path: str, size: Tuple[int, int]) -> ctk.CTkImage:
179
  image = Image.open(image_path)
180
  if size:
181
  image = ImageOps.fit(image, size, Image.LANCZOS)
182
  return ctk.CTkImage(image, size=image.size)
183
 
184
-
185
  def render_video_preview(video_path: str, size: Tuple[int, int], frame_number: int = 0) -> ctk.CTkImage:
186
  capture = cv2.VideoCapture(video_path)
187
  if frame_number:
188
  capture.set(cv2.CAP_PROP_POS_FRAMES, frame_number)
189
  has_frame, frame = capture.read()
190
- if has_frame:
191
- image = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
192
- if size:
193
- image = ImageOps.fit(image, size, Image.LANCZOS)
194
- return ctk.CTkImage(image, size=image.size)
195
- capture.release()
196
- cv2.destroyAllWindows()
197
 
 
 
 
 
 
 
 
198
 
199
  def toggle_preview() -> None:
200
- if PREVIEW.state() == 'normal':
201
  PREVIEW.withdraw()
202
- elif roop.globals.source_path and roop.globals.target_path:
203
- init_preview()
204
- update_preview()
 
205
  PREVIEW.deiconify()
206
-
207
-
208
- def init_preview() -> None:
209
- if is_image(roop.globals.target_path):
210
- preview_slider.pack_forget()
211
- if is_video(roop.globals.target_path):
212
- video_frame_total = get_video_frame_total(roop.globals.target_path)
213
- preview_slider.configure(to=video_frame_total)
214
- preview_slider.pack(fill='x')
215
- preview_slider.set(0)
216
-
217
-
218
- def update_preview(frame_number: int = 0) -> None:
219
- if roop.globals.source_path and roop.globals.target_path:
220
- temp_frame = get_video_frame(roop.globals.target_path, frame_number)
221
- if predict_frame(temp_frame):
222
- quit()
223
- for frame_processor in get_frame_processors_modules(roop.globals.frame_processors):
224
- temp_frame = frame_processor.process_frame(
225
- get_one_face(cv2.imread(roop.globals.source_path)),
226
- temp_frame
227
- )
228
- image = Image.fromarray(cv2.cvtColor(temp_frame, cv2.COLOR_BGR2RGB))
229
- image = ImageOps.contain(image, (PREVIEW_MAX_WIDTH, PREVIEW_MAX_HEIGHT), Image.LANCZOS)
230
- image = ctk.CTkImage(image, size=image.size)
231
- preview_label.configure(image=image)
 
31
  target_label = None
32
  status_label = None
33
 
 
34
  def init(start: Callable[[], None], destroy: Callable[[], None]) -> ctk.CTk:
35
  global ROOT, PREVIEW
36
 
 
39
 
40
  return ROOT
41
 
 
42
  def create_root(start: Callable[[], None], destroy: Callable[[], None]) -> ctk.CTk:
43
  global source_label, target_label, status_label
44
 
 
99
 
100
  return root
101
 
 
102
  def create_preview(parent: ctk.CTkToplevel) -> ctk.CTkToplevel:
103
  global preview_label, preview_slider
104
 
 
116
 
117
  return preview
118
 
 
119
  def update_status(text: str) -> None:
120
  status_label.configure(text=text)
121
  ROOT.update()
122
 
 
123
  def select_source_path() -> None:
124
  global RECENT_DIRECTORY_SOURCE
125
 
126
  PREVIEW.withdraw()
127
+ source_path = ctk.filedialog.askopenfilename(title='select a source image', initialdir=RECENT_DIRECTORY_SOURCE)
128
  if is_image(source_path):
129
  roop.globals.source_path = source_path
130
  RECENT_DIRECTORY_SOURCE = os.path.dirname(roop.globals.source_path)
 
134
  roop.globals.source_path = None
135
  source_label.configure(image=None)
136
 
 
137
  def select_target_path() -> None:
138
  global RECENT_DIRECTORY_TARGET
139
 
140
  PREVIEW.withdraw()
141
+ target_path = ctk.filedialog.askopenfilename(title='select a target image or video', initialdir=RECENT_DIRECTORY_TARGET)
142
  if is_image(target_path):
143
  roop.globals.target_path = target_path
144
  RECENT_DIRECTORY_TARGET = os.path.dirname(roop.globals.target_path)
 
153
  roop.globals.target_path = None
154
  target_label.configure(image=None)
155
 
 
156
  def select_output_path(start: Callable[[], None]) -> None:
157
  global RECENT_DIRECTORY_OUTPUT
158
 
 
167
  RECENT_DIRECTORY_OUTPUT = os.path.dirname(roop.globals.output_path)
168
  start()
169
 
 
170
  def render_image_preview(image_path: str, size: Tuple[int, int]) -> ctk.CTkImage:
171
  image = Image.open(image_path)
172
  if size:
173
  image = ImageOps.fit(image, size, Image.LANCZOS)
174
  return ctk.CTkImage(image, size=image.size)
175
 
 
176
  def render_video_preview(video_path: str, size: Tuple[int, int], frame_number: int = 0) -> ctk.CTkImage:
177
  capture = cv2.VideoCapture(video_path)
178
  if frame_number:
179
  capture.set(cv2.CAP_PROP_POS_FRAMES, frame_number)
180
  has_frame, frame = capture.read()
181
+ if not has_frame:
182
+ return None
183
+ frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
184
+ image = Image.fromarray(frame)
185
+ if size:
186
+ image = ImageOps.fit(image, size, Image.LANCZOS)
187
+ return ctk.CTkImage(image, size=image.size)
188
 
189
+ def update_preview(frame_value: float) -> None:
190
+ frame_number = int(frame_value)
191
+ preview_image = None
192
+ if is_video(roop.globals.target_path):
193
+ preview_image = render_video_preview(roop.globals.target_path, (PREVIEW_MAX_WIDTH, PREVIEW_MAX_HEIGHT), frame_number)
194
+ if preview_image:
195
+ preview_label.configure(image=preview_image)
196
 
197
  def toggle_preview() -> None:
198
+ if PREVIEW.winfo_ismapped():
199
  PREVIEW.withdraw()
200
+ else:
201
+ if is_video(roop.globals.target_path):
202
+ total_frames = get_video_frame_total(roop.globals.target_path)
203
+ preview_slider.configure(from_=0, to=total_frames, command=lambda frame_value: update_preview(frame_value))
204
  PREVIEW.deiconify()
205
+ PREVIEW.update()