usmanyousaf commited on
Commit
0ff4c41
·
verified ·
1 Parent(s): 546e5c1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +46 -50
app.py CHANGED
@@ -1,37 +1,37 @@
1
- import streamlit as st
2
  import cv2
3
  import numpy as np
 
4
  import base64
5
  import requests
6
  import json
7
  import time
8
- import random
9
- import os
10
 
11
- # Function to handle the try-on process
12
  def tryon(person_img, garment_img, seed, randomize_seed):
 
13
  if person_img is None or garment_img is None:
14
  st.warning("Empty image")
15
  return None, None, "Empty image"
16
  if randomize_seed:
17
  seed = random.randint(0, MAX_SEED)
18
-
19
  encoded_person_img = cv2.imencode('.jpg', cv2.cvtColor(person_img, cv2.COLOR_RGB2BGR))[1].tobytes()
20
  encoded_person_img = base64.b64encode(encoded_person_img).decode('utf-8')
21
  encoded_garment_img = cv2.imencode('.jpg', cv2.cvtColor(garment_img, cv2.COLOR_RGB2BGR))[1].tobytes()
22
  encoded_garment_img = base64.b64encode(encoded_garment_img).decode('utf-8')
23
 
24
- url = "http://" + os.environ['tryon_url'] + "Submit"
25
- token = os.environ['token']
26
- cookie = os.environ['Cookie']
27
- referer = os.environ['referer']
28
- headers = {'Content-Type': 'application/json', 'token': token, 'Cookie': cookie, 'referer': referer}
29
- data = {
30
- "clothImage": encoded_garment_img,
31
- "humanImage": encoded_person_img,
32
- "seed": seed
33
- }
34
  try:
 
 
 
 
 
 
 
 
 
 
35
  response = requests.post(url, headers=headers, data=json.dumps(data), timeout=50)
36
  if response.status_code == 200:
37
  result = response.json()['result']
@@ -41,14 +41,17 @@ def tryon(person_img, garment_img, seed, randomize_seed):
41
  except Exception as err:
42
  st.error(f"Post Exception Error: {err}")
43
  return None, None, "Too many users, please try again later"
 
44
 
 
45
  time.sleep(9)
46
  Max_Retry = 12
47
  result_img = None
48
  info = ""
 
49
  for i in range(Max_Retry):
50
  try:
51
- url = "http://" + os.environ['tryon_url'] + "Query?taskId=" + uuid
52
  response = requests.get(url, headers=headers, timeout=20)
53
  if response.status_code == 200:
54
  result = response.json()['result']
@@ -61,19 +64,23 @@ def tryon(person_img, garment_img, seed, randomize_seed):
61
  info = "Success"
62
  break
63
  elif status == "error":
 
64
  info = "Error"
65
  break
66
  else:
 
67
  info = "URL error, please contact the admin"
68
  break
69
  except requests.exceptions.ReadTimeout:
 
70
  info = "Http Timeout, please try again later"
71
  except Exception as err:
72
- info = f"Get Exception Error: {err}"
73
  time.sleep(1)
74
-
75
  if info == "":
76
- info = f"No image after {Max_Retry} retries"
 
77
  if info != "Success":
78
  st.warning("Too many users, please try again later")
79
 
@@ -81,40 +88,29 @@ def tryon(person_img, garment_img, seed, randomize_seed):
81
 
82
  MAX_SEED = 999999
83
 
84
- # Set up the Streamlit app
85
- st.set_page_config(page_title="Virtual Try-On", page_icon=":guardsman:", layout="wide")
86
-
87
  st.title("Virtual Try-On")
88
- st.markdown("""
89
- **Step 1:** Upload a person image ⬇️
90
- **Step 2:** Upload a garment image ⬇️
91
- **Step 3:** Press “Run” to get try-on results
92
- """)
93
 
94
- col1, col2 = st.columns(2)
 
 
 
95
 
96
- with col1:
97
- person_img = st.file_uploader("Person Image", type=["jpg", "jpeg", "png"])
98
-
99
- with col2:
100
- garment_img = st.file_uploader("Garment Image", type=["jpg", "jpeg", "png"])
101
 
102
- if person_img and garment_img:
103
- person_img = np.array(bytearray(person_img.read()), dtype=np.uint8)
104
- garment_img = np.array(bytearray(garment_img.read()), dtype=np.uint8)
105
- person_img = cv2.imdecode(person_img, cv2.IMREAD_COLOR)
106
- garment_img = cv2.imdecode(garment_img, cv2.IMREAD_COLOR)
107
-
108
- st.sidebar.header("Options")
109
- seed = st.sidebar.slider("Seed", 0, MAX_SEED, 0)
110
- randomize_seed = st.sidebar.checkbox("Random seed", value=True)
111
 
112
- if st.sidebar.button("Run"):
 
 
 
113
  result_img, seed_used, result_info = tryon(person_img, garment_img, seed, randomize_seed)
114
- if result_info == "Success":
115
- st.image(result_img, caption="Result", channels="BGR")
116
- st.sidebar.text(f"Seed used: {seed_used}")
117
- else:
118
- st.sidebar.error(result_info)
119
- else:
120
- st.sidebar.warning("Please upload both images to proceed.")
 
1
+ import os
2
  import cv2
3
  import numpy as np
4
+ import random
5
  import base64
6
  import requests
7
  import json
8
  import time
9
+ import streamlit as st
 
10
 
11
+ # Function definitions
12
  def tryon(person_img, garment_img, seed, randomize_seed):
13
+ post_start_time = time.time()
14
  if person_img is None or garment_img is None:
15
  st.warning("Empty image")
16
  return None, None, "Empty image"
17
  if randomize_seed:
18
  seed = random.randint(0, MAX_SEED)
 
19
  encoded_person_img = cv2.imencode('.jpg', cv2.cvtColor(person_img, cv2.COLOR_RGB2BGR))[1].tobytes()
20
  encoded_person_img = base64.b64encode(encoded_person_img).decode('utf-8')
21
  encoded_garment_img = cv2.imencode('.jpg', cv2.cvtColor(garment_img, cv2.COLOR_RGB2BGR))[1].tobytes()
22
  encoded_garment_img = base64.b64encode(encoded_garment_img).decode('utf-8')
23
 
 
 
 
 
 
 
 
 
 
 
24
  try:
25
+ url = "http://" + os.getenv('tryon_url', 'localhost:5000') + "/Submit"
26
+ token = os.getenv('token', '')
27
+ cookie = os.getenv('Cookie', '')
28
+ referer = os.getenv('referer', '')
29
+ headers = {'Content-Type': 'application/json', 'token': token, 'Cookie': cookie, 'referer': referer}
30
+ data = {
31
+ "clothImage": encoded_garment_img,
32
+ "humanImage": encoded_person_img,
33
+ "seed": seed
34
+ }
35
  response = requests.post(url, headers=headers, data=json.dumps(data), timeout=50)
36
  if response.status_code == 200:
37
  result = response.json()['result']
 
41
  except Exception as err:
42
  st.error(f"Post Exception Error: {err}")
43
  return None, None, "Too many users, please try again later"
44
+ post_end_time = time.time()
45
 
46
+ get_start_time = time.time()
47
  time.sleep(9)
48
  Max_Retry = 12
49
  result_img = None
50
  info = ""
51
+ err_log = ""
52
  for i in range(Max_Retry):
53
  try:
54
+ url = "http://" + os.getenv('tryon_url', 'localhost:5000') + "/Query?taskId=" + uuid
55
  response = requests.get(url, headers=headers, timeout=20)
56
  if response.status_code == 200:
57
  result = response.json()['result']
 
64
  info = "Success"
65
  break
66
  elif status == "error":
67
+ err_log = f"Status is Error"
68
  info = "Error"
69
  break
70
  else:
71
+ err_log = "URL error, please contact the admin"
72
  info = "URL error, please contact the admin"
73
  break
74
  except requests.exceptions.ReadTimeout:
75
+ err_log = "Http Timeout"
76
  info = "Http Timeout, please try again later"
77
  except Exception as err:
78
+ err_log = f"Get Exception Error: {err}"
79
  time.sleep(1)
80
+ get_end_time = time.time()
81
  if info == "":
82
+ err_log = f"No image after {Max_Retry} retries"
83
+ info = "Too many users, please try again later"
84
  if info != "Success":
85
  st.warning("Too many users, please try again later")
86
 
 
88
 
89
  MAX_SEED = 999999
90
 
 
 
 
91
  st.title("Virtual Try-On")
 
 
 
 
 
92
 
93
+ st.write("""
94
+ Step 1. Upload a person image ⬇️
95
+ """)
96
+ person_img = st.file_uploader("Choose a person image", type=["jpg", "jpeg", "png"])
97
 
98
+ st.write("""
99
+ Step 2. Upload a garment image ⬇️
100
+ """)
101
+ garment_img = st.file_uploader("Choose a garment image", type=["jpg", "jpeg", "png"])
 
102
 
103
+ seed = st.slider("Seed", min_value=0, max_value=MAX_SEED, value=0)
104
+ randomize_seed = st.checkbox("Random seed", value=True)
 
 
 
 
 
 
 
105
 
106
+ if st.button("Run"):
107
+ if person_img is not None and garment_img is not None:
108
+ person_img = np.array(cv2.imdecode(np.frombuffer(person_img.read(), np.uint8), cv2.IMREAD_COLOR))
109
+ garment_img = np.array(cv2.imdecode(np.frombuffer(garment_img.read(), np.uint8), cv2.IMREAD_COLOR))
110
  result_img, seed_used, result_info = tryon(person_img, garment_img, seed, randomize_seed)
111
+ if result_img is not None:
112
+ st.image(result_img, caption='Result')
113
+ st.write(f"Seed used: {seed_used}")
114
+ st.write(f"Response: {result_info}")
115
+ else:
116
+ st.warning("Please upload both person and garment images.")