Robys01 commited on
Commit
ab4ea38
·
1 Parent(s): e425192

Added better preprocessing logic

Browse files
app.py CHANGED
@@ -12,16 +12,18 @@ def transition(image_files, duration, fps, method, align_resize, order_images, g
12
  is_dlib = method == "Dlib"
13
 
14
  debug_messages = []
 
15
 
16
  try:
 
 
 
 
17
  # Align and resize images
18
  if align_resize:
19
  aligned_dir = "aligned_images"
20
  image_files = align_images(image_files, aligned_dir)
21
 
22
- # Sort images by age
23
- if order_images:
24
- image_files = sort_images(image_files)
25
 
26
  morph(image_files, duration, fps, output_name, guideline, is_dlib)
27
  debug_messages.append("Video generation successful")
@@ -48,7 +50,14 @@ if __name__ == "__main__":
48
  ],
49
  outputs=[gr.Video(), gr.Textbox(label="Output Message")],
50
  examples=[
51
- [["examples/1.png", "examples/2.png", "examples/3.png"], 3, 30, "Dlib", False, False, False]
 
 
 
 
 
 
 
52
  ],
53
  title="Face Morphing",
54
  description="Upload multiple images containing faces to create a transition video between them."
 
12
  is_dlib = method == "Dlib"
13
 
14
  debug_messages = []
15
+ print(f"Properties: Duration: {duration}, FPS: {fps}, Method: {method}, Align and Resize: {align_resize}, Order Images: {order_images}, Guideline: {guideline}")
16
 
17
  try:
18
+ # Sort images by age
19
+ if order_images:
20
+ image_files = sort_images(image_files)
21
+
22
  # Align and resize images
23
  if align_resize:
24
  aligned_dir = "aligned_images"
25
  image_files = align_images(image_files, aligned_dir)
26
 
 
 
 
27
 
28
  morph(image_files, duration, fps, output_name, guideline, is_dlib)
29
  debug_messages.append("Video generation successful")
 
50
  ],
51
  outputs=[gr.Video(), gr.Textbox(label="Output Message")],
52
  examples=[
53
+ [["examples/1.png", "examples/2.png", "examples/3.png"], 3, 30, "Dlib", False, False, False],
54
+ [["examples/1.png", "examples/2.png", "examples/3.png"], 5, 30, "MediaPipe", False, False, True],
55
+ [["examples/1.jpg", "examples/2.jpg", "examples/3.jpg",
56
+ "examples/4.jpg", "examples/5.jpg", "examples/6.jpg", "examples/7.jpg",
57
+ "examples/8.jpg", "examples/9.jpg", "examples/10.jpg"], 3, 20, "Dlib", True, True, False],
58
+ # [["examples/big_1.png", "examples/big_2.png", "examples/big_3.png",
59
+ # "examples/big_4.png", "examples/big_5.png", "examples/big_6.png"], 3, 30, "Dlib", False, False, False]
60
+
61
  ],
62
  title="Face Morphing",
63
  description="Upload multiple images containing faces to create a transition video between them."
examples/1.jpg ADDED
examples/10.jpg ADDED
examples/2.jpg ADDED
examples/3.jpg ADDED
examples/4.jpg ADDED
examples/5.jpg ADDED
examples/6.jpg ADDED
examples/7.jpg ADDED
examples/8.jpg ADDED
examples/9.jpg ADDED
src/utils/align_images.py CHANGED
@@ -1,6 +1,5 @@
1
  import os
2
 
3
- import argparse
4
  from src.utils.face_alignment import image_align
5
  from src.landmark_detector import LandmarksDetector
6
 
@@ -21,27 +20,26 @@ def align_images(img_files, aligned_dir, output_size=1024, x_scale=1, y_scale=1,
21
  os.remove(os.path.join(ALIGNED_IMAGES_DIR, file))
22
 
23
  landmarks_detector = LandmarksDetector()
24
- for img_path in img_files:
25
  img_name = os.path.basename(img_path)
26
  print('Aligning %s ...' % img_name)
27
  try:
28
  raw_img_path = img_path
29
- fn = face_img_name = '%s_%02d.png' % (os.path.splitext(img_name)[0], 1)
30
- if os.path.isfile(fn):
31
  continue
32
  print('Getting landmarks...')
33
-
34
  for i, face_landmarks in enumerate(landmarks_detector.get_landmarks(raw_img_path), start=1):
35
  try:
36
  print('Starting face alignment...')
37
- face_img_name = '%s_%02d.png' % (os.path.splitext(img_name)[0], i)
38
  aligned_face_path = os.path.join(ALIGNED_IMAGES_DIR, face_img_name)
39
  image_align(raw_img_path, aligned_face_path, face_landmarks, output_size=output_size, x_scale=x_scale, y_scale=y_scale, em_scale=em_scale, alpha=use_alpha)
40
  print('Wrote result %s\n' % aligned_face_path)
41
  except Exception as e:
42
- raise Exception("Exception in face alignment!", e)
43
- except:
44
- raise Exception("Exception in landmark detection!")
45
 
46
  # return absolute paths of aligned images
47
- return [os.path.join(ALIGNED_IMAGES_DIR, img) for img in os.listdir(ALIGNED_IMAGES_DIR)]
 
1
  import os
2
 
 
3
  from src.utils.face_alignment import image_align
4
  from src.landmark_detector import LandmarksDetector
5
 
 
20
  os.remove(os.path.join(ALIGNED_IMAGES_DIR, file))
21
 
22
  landmarks_detector = LandmarksDetector()
23
+ for idx, img_path in enumerate(img_files, start=1):
24
  img_name = os.path.basename(img_path)
25
  print('Aligning %s ...' % img_name)
26
  try:
27
  raw_img_path = img_path
28
+ fn = face_img_name = f'{idx:04d}_{os.path.splitext(img_name)[0]}_01.png'
29
+ if os.path.isfile(os.path.join(ALIGNED_IMAGES_DIR, fn)):
30
  continue
31
  print('Getting landmarks...')
 
32
  for i, face_landmarks in enumerate(landmarks_detector.get_landmarks(raw_img_path), start=1):
33
  try:
34
  print('Starting face alignment...')
35
+ face_img_name = f'{idx:04d}_{os.path.splitext(img_name)[0]}_{i:02d}.png'
36
  aligned_face_path = os.path.join(ALIGNED_IMAGES_DIR, face_img_name)
37
  image_align(raw_img_path, aligned_face_path, face_landmarks, output_size=output_size, x_scale=x_scale, y_scale=y_scale, em_scale=em_scale, alpha=use_alpha)
38
  print('Wrote result %s\n' % aligned_face_path)
39
  except Exception as e:
40
+ print(f"Exception in face alignment for {img_name}: {e}")
41
+ except Exception as e:
42
+ print(f"Exception in landmark detection for {img_name}: {e}")
43
 
44
  # return absolute paths of aligned images
45
+ return [os.path.join(ALIGNED_IMAGES_DIR, img) for img in os.listdir(ALIGNED_IMAGES_DIR)]