zhang-ziang commited on
Commit
864becb
1 Parent(s): d44e357

image post resize and light refine

Browse files
Files changed (3) hide show
  1. app.py +0 -10
  2. render/core.py +9 -5
  3. utils.py +28 -14
app.py CHANGED
@@ -5,8 +5,6 @@ from vision_tower import DINOv2_MLP
5
  from transformers import AutoImageProcessor
6
  import torch
7
  import os
8
- import matplotlib.pyplot as plt
9
- import io
10
  from PIL import Image
11
 
12
  import torch.nn.functional as F
@@ -78,14 +76,6 @@ def get_3angle_infer_aug(origin_img, rm_bkg_img):
78
  angles[3] = confidence
79
  return angles
80
 
81
-
82
- def figure_to_img(fig):
83
- with io.BytesIO() as buf:
84
- fig.savefig(buf, format='JPG', bbox_inches='tight')
85
- buf.seek(0)
86
- image = Image.open(buf).copy()
87
- return image
88
-
89
  def infer_func(img, do_rm_bkg, do_infer_aug):
90
  origin_img = Image.fromarray(img)
91
  if do_infer_aug:
 
5
  from transformers import AutoImageProcessor
6
  import torch
7
  import os
 
 
8
  from PIL import Image
9
 
10
  import torch.nn.functional as F
 
76
  angles[3] = confidence
77
  return angles
78
 
 
 
 
 
 
 
 
 
79
  def infer_func(img, do_rm_bkg, do_infer_aug):
80
  origin_img = Image.fromarray(img)
81
  if do_infer_aug:
render/core.py CHANGED
@@ -195,14 +195,18 @@ def dot_product(a: Vec3d, b: Vec3d):
195
  def cross_product(a: Vec3d, b: Vec3d):
196
  return Vec3d(*speedup.cross_product(*a.arr, *b.arr))
197
 
198
- BASE_LIGHT = 0.3
199
  def get_light_intensity(face) -> float:
200
- light0 = Vec3d(-2, 4, -10)
201
-
202
- light1 = Vec3d(10, 4, -2)
 
203
  v1, v2, v3 = face
204
  up = normalize(cross_product(v2 - v1, v3 - v1))
205
- return dot_product(up, normalize(light0))*0.6 + dot_product(up, normalize(light1))*0.6 + BASE_LIGHT
 
 
 
206
 
207
 
208
  def look_at(eye: Vec3d, target: Vec3d, up: Vec3d = Vec3d(0, -1, 0)) -> Mat4d:
 
195
  def cross_product(a: Vec3d, b: Vec3d):
196
  return Vec3d(*speedup.cross_product(*a.arr, *b.arr))
197
 
198
+ BASE_LIGHT = 0.9
199
  def get_light_intensity(face) -> float:
200
+ # lights = [Vec3d(-2, 4, -10), Vec3d(10, 4, -2), Vec3d(8, 8, -8), Vec3d(0, 0, -8)]
201
+ lights = [Vec3d(-2, 4, -10)]
202
+ # lights = []
203
+
204
  v1, v2, v3 = face
205
  up = normalize(cross_product(v2 - v1, v3 - v1))
206
+ intensity = BASE_LIGHT
207
+ for light in lights:
208
+ intensity += dot_product(up, normalize(light))*0.2
209
+ return intensity
210
 
211
 
212
  def look_at(eye: Vec3d, target: Vec3d, up: Vec3d = Vec3d(0, -1, 0)) -> Mat4d:
utils.py CHANGED
@@ -2,10 +2,11 @@ import rembg
2
  import random
3
  import torch
4
  import numpy as np
5
- from PIL import Image
6
  import PIL
7
  from typing import Any
8
  import matplotlib.pyplot as plt
 
9
 
10
  def resize_foreground(
11
  image: Image,
@@ -232,8 +233,16 @@ def matplotlib_2D_arrow(angles, rm_bkg_img):
232
  ax.set_xlim(-5, 5)
233
  ax.set_ylim(-5, 5)
234
 
 
 
 
 
 
 
 
235
  from render import render, Model
236
  import math
 
237
  def render_3D_axis(phi, theta, gamma):
238
  radius = 240
239
  # camera_location = [radius * math.cos(phi), radius * math.sin(phi), radius * math.tan(theta)]
@@ -241,7 +250,7 @@ def render_3D_axis(phi, theta, gamma):
241
  camera_location = [-1*radius * math.cos(phi), -1*radius * math.tan(theta), radius * math.sin(phi)]
242
  img = render(
243
  # Model("res/jinx.obj", texture_filename="res/jinx.tga"),
244
- Model("./axis.obj", texture_filename="./axis.png"),
245
  height=512,
246
  width=512,
247
  filename="tmp_render.png",
@@ -269,22 +278,27 @@ def overlay_images_with_scaling(center_image: Image.Image, background_image, tar
269
 
270
  # 缩放背景图像,确保其适合前景图像的尺寸
271
  bg_width, bg_height = background_image.size
272
- target_width, target_height = target_size
273
 
274
  # 按宽度或高度等比例缩放背景
275
- scale = max(target_width / bg_width, target_height / bg_height)
276
- new_size = (int(bg_width * scale), int(bg_height * scale))
277
- resized_background = background_image.resize(new_size)
278
-
279
- # 裁剪背景图像至目标大小
280
- left = (new_size[0] - target_width) // 2
281
- top = (new_size[1] - target_height) // 2
282
- right = left + target_width
283
- bottom = top + target_height
284
- cropped_background = resized_background.crop((left, top, right, bottom))
 
 
 
 
 
 
285
 
286
  # 将前景图像叠加到背景图像上
287
- result = cropped_background.copy()
288
  result.paste(center_image, (0, 0), mask=center_image)
289
 
290
  return result
 
2
  import random
3
  import torch
4
  import numpy as np
5
+ from PIL import Image, ImageOps
6
  import PIL
7
  from typing import Any
8
  import matplotlib.pyplot as plt
9
+ import io
10
 
11
  def resize_foreground(
12
  image: Image,
 
233
  ax.set_xlim(-5, 5)
234
  ax.set_ylim(-5, 5)
235
 
236
+ def figure_to_img(fig):
237
+ with io.BytesIO() as buf:
238
+ fig.savefig(buf, format='JPG', bbox_inches='tight')
239
+ buf.seek(0)
240
+ image = Image.open(buf).copy()
241
+ return image
242
+
243
  from render import render, Model
244
  import math
245
+ axis_model = Model("./axis.obj", texture_filename="./axis.png")
246
  def render_3D_axis(phi, theta, gamma):
247
  radius = 240
248
  # camera_location = [radius * math.cos(phi), radius * math.sin(phi), radius * math.tan(theta)]
 
250
  camera_location = [-1*radius * math.cos(phi), -1*radius * math.tan(theta), radius * math.sin(phi)]
251
  img = render(
252
  # Model("res/jinx.obj", texture_filename="res/jinx.tga"),
253
+ axis_model,
254
  height=512,
255
  width=512,
256
  filename="tmp_render.png",
 
278
 
279
  # 缩放背景图像,确保其适合前景图像的尺寸
280
  bg_width, bg_height = background_image.size
 
281
 
282
  # 按宽度或高度等比例缩放背景
283
+ scale = target_size[0] / max(bg_width, bg_height)
284
+ new_width = int(bg_width * scale)
285
+ new_height = int(bg_height * scale)
286
+ resized_background = background_image.resize((new_width, new_height))
287
+ # 计算需要的填充量
288
+ pad_width = target_size[0] - new_width
289
+ pad_height = target_size[0] - new_height
290
+
291
+ # 计算上下左右的 padding
292
+ left = pad_width // 2
293
+ right = pad_width - left
294
+ top = pad_height // 2
295
+ bottom = pad_height - top
296
+
297
+ # 添加 padding
298
+ resized_background = ImageOps.expand(resized_background, border=(left, top, right, bottom), fill=(255,255,255,255))
299
 
300
  # 将前景图像叠加到背景图像上
301
+ result = resized_background.copy()
302
  result.paste(center_image, (0, 0), mask=center_image)
303
 
304
  return result