Pierre Chapuis commited on
Commit
b0f5547
·
unverified ·
1 Parent(s): bbdb110

resize image before upload

Browse files

this significantly speeds up the space when using e.g. mobile photos

Files changed (1) hide show
  1. src/app.py +21 -6
src/app.py CHANGED
@@ -19,6 +19,14 @@ with env.prefixed("ERASER_"):
19
  auth = None if API_KEY is None else httpx.BasicAuth("hf", API_KEY)
20
 
21
 
 
 
 
 
 
 
 
 
22
  def process_bbox(
23
  prompts: dict[str, Any],
24
  request: gr.Request | None,
@@ -27,16 +35,21 @@ def process_bbox(
27
  assert isinstance(boxes := prompts["boxes"], list)
28
  assert len(boxes) == 1
29
  assert isinstance(box := boxes[0], dict)
30
- data = {"bbox": ",".join([str(box[k]) for k in ["xmin", "ymin", "xmax", "ymax"]])}
31
  headers = {}
32
  if request: # avoid DOS - can be None despite type hint!
33
  client_ip = request.headers.get("x-forwarded-for") or request.client.host
34
  headers = {"X-HF-Client-IP": client_ip}
 
 
 
 
 
 
35
  with io.BytesIO() as f:
36
- img.save(f, format="JPEG")
37
  r = httpx.post(
38
  API_URL,
39
- data=data,
40
  files={"file": f},
41
  verify=CA_BUNDLE or True,
42
  timeout=30.0,
@@ -58,16 +71,18 @@ def process_prompt(
58
  prompt: str,
59
  request: gr.Request | None,
60
  ) -> tuple[Image.Image, Image.Image]:
61
- data = {"prompt": prompt}
62
  headers = {}
63
  if request: # avoid DOS - can be None despite type hint!
64
  client_ip = request.headers.get("x-forwarded-for") or request.client.host
65
  headers = {"X-HF-Client-IP": client_ip}
 
 
 
66
  with io.BytesIO() as f:
67
- img.save(f, format="JPEG")
68
  r = httpx.post(
69
  API_URL,
70
- data=data,
71
  files={"file": f},
72
  verify=CA_BUNDLE or True,
73
  timeout=30.0,
 
19
  auth = None if API_KEY is None else httpx.BasicAuth("hf", API_KEY)
20
 
21
 
22
+ def resize(image: Image.Image, shortest_side: int = 768) -> Image.Image:
23
+ if image.width <= shortest_side and image.height <= shortest_side:
24
+ return image
25
+ if image.width < image.height:
26
+ return image.resize(size=(shortest_side, int(shortest_side * image.height / image.width)))
27
+ return image.resize(size=(int(shortest_side * image.width / image.height), shortest_side))
28
+
29
+
30
  def process_bbox(
31
  prompts: dict[str, Any],
32
  request: gr.Request | None,
 
35
  assert isinstance(boxes := prompts["boxes"], list)
36
  assert len(boxes) == 1
37
  assert isinstance(box := boxes[0], dict)
 
38
  headers = {}
39
  if request: # avoid DOS - can be None despite type hint!
40
  client_ip = request.headers.get("x-forwarded-for") or request.client.host
41
  headers = {"X-HF-Client-IP": client_ip}
42
+
43
+ resized_img = resize(img)
44
+ bbox = [box[k] for k in ["xmin", "ymin", "xmax", "ymax"]]
45
+ if resized_img.width != img.width:
46
+ bbox = [int(v * resized_img.width / img.width) for v in bbox]
47
+
48
  with io.BytesIO() as f:
49
+ resized_img.save(f, format="JPEG")
50
  r = httpx.post(
51
  API_URL,
52
+ data={"bbox": ",".join([str(v) for v in bbox])},
53
  files={"file": f},
54
  verify=CA_BUNDLE or True,
55
  timeout=30.0,
 
71
  prompt: str,
72
  request: gr.Request | None,
73
  ) -> tuple[Image.Image, Image.Image]:
 
74
  headers = {}
75
  if request: # avoid DOS - can be None despite type hint!
76
  client_ip = request.headers.get("x-forwarded-for") or request.client.host
77
  headers = {"X-HF-Client-IP": client_ip}
78
+
79
+ resized_img = resize(img)
80
+
81
  with io.BytesIO() as f:
82
+ resized_img.save(f, format="JPEG")
83
  r = httpx.post(
84
  API_URL,
85
+ data={"prompt": prompt},
86
  files={"file": f},
87
  verify=CA_BUNDLE or True,
88
  timeout=30.0,