Not-Adam commited on
Commit
f61d0df
1 Parent(s): 626f015

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +73 -36
app.py CHANGED
@@ -108,56 +108,93 @@ def shot(input, category, level):
108
 
109
  # return subColour, mainColour, responses[0][0]['score']
110
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
111
  @spaces.GPU
112
  def get_colour(image_urls, category):
113
- # Prepare color labels
114
- colourLabels = [f"{color} clothing: {category}" for color in COLOURS_DICT.keys()]
115
- print("Colour Labels:", colourLabels) # Debug: Print colour labels
116
- print("Image URLs:", image_urls) # Debug: Print image URLs
117
-
118
- # Split labels into two batches
119
- mid_index = len(colourLabels) // 2
120
- first_batch = colourLabels[:mid_index]
121
- second_batch = colourLabels[mid_index:]
122
-
123
- # Process the first batch
124
- responses_first_batch = pipe(image_urls, candidate_labels=first_batch)
125
- # Get the top 3 from the first batch
126
- top3_first_batch = sorted(responses_first_batch[0], key=lambda x: x['score'], reverse=True)[:3]
127
-
128
- # Process the second batch
129
- responses_second_batch = pipe(image_urls, candidate_labels=second_batch)
130
- # Get the top 3 from the second batch
131
- top3_second_batch = sorted(responses_second_batch[0], key=lambda x: x['score'], reverse=True)[:3]
132
-
133
- # Combine the top 3 from each batch
134
- combined_top6 = top3_first_batch + top3_second_batch
135
- # Get the final top 3 from the combined list
136
- final_top3 = sorted(combined_top6, key=lambda x: x['score'], reverse=True)[:3]
137
-
138
- mainColour = final_top3[0]['label'].split(" clothing:")[0]
139
-
140
- if mainColour not in COLOURS_DICT:
141
  return None, None, None
142
 
143
- # Get sub-colors for the main color
144
- labels = [f"{label} clothing: {category}" for label in COLOURS_DICT[mainColour]]
145
- print("Labels for pipe:", labels) # Debug: Confirm labels are correct
146
 
147
- responses = pipe(image_urls, candidate_labels=labels)
148
- subColour = responses[0][0]['label'].split(" clothing:")[0]
 
149
 
150
- return subColour, mainColour, responses[0][0]['score']
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
151
 
152
 
153
 
154
- # Function for get_predicted_attributes
155
  def get_most_common_label(responses):
156
  feature_scores = defaultdict(float)
157
  for response in responses:
158
  label, score = response[0]['label'].split(", clothing:")[0], response[0]['score']
159
  feature_scores[label] += score
160
- return max(feature_scores, key=feature_scores.get), feature_scores[max(feature_scores, key=feature_scores.get)]
 
 
161
 
162
  @spaces.GPU
163
  def get_predicted_attributes(image_urls, category):
 
108
 
109
  # return subColour, mainColour, responses[0][0]['score']
110
 
111
+ # @spaces.GPU
112
+ # def get_colour(image_urls, category):
113
+ # # Prepare color labels
114
+ # colourLabels = [f"{color} clothing: {category}" for color in COLOURS_DICT.keys()]
115
+ # print("Colour Labels:", colourLabels) # Debug: Print colour labels
116
+ # print("Image URLs:", image_urls) # Debug: Print image URLs
117
+
118
+ # # Split labels into two batches
119
+ # mid_index = len(colourLabels) // 2
120
+ # first_batch = colourLabels[:mid_index]
121
+ # second_batch = colourLabels[mid_index:]
122
+
123
+ # # Process the first batch
124
+ # responses_first_batch = pipe(image_urls, candidate_labels=first_batch)
125
+ # # Get the top 3 from the first batch
126
+ # top3_first_batch = sorted(responses_first_batch[0], key=lambda x: x['score'], reverse=True)[:3]
127
+
128
+ # # Process the second batch
129
+ # responses_second_batch = pipe(image_urls, candidate_labels=second_batch)
130
+ # # Get the top 3 from the second batch
131
+ # top3_second_batch = sorted(responses_second_batch[0], key=lambda x: x['score'], reverse=True)[:3]
132
+
133
+ # # Combine the top 3 from each batch
134
+ # combined_top6 = top3_first_batch + top3_second_batch
135
+ # # Get the final top 3 from the combined list
136
+ # final_top3 = sorted(combined_top6, key=lambda x: x['score'], reverse=True)[:3]
137
+
138
+ # mainColour = final_top3[0]['label'].split(" clothing:")[0]
139
+
140
+ # if mainColour not in COLOURS_DICT:
141
+ # return None, None, None
142
+
143
+ # # Get sub-colors for the main color
144
+ # labels = [f"{label} clothing: {category}" for label in COLOURS_DICT[mainColour]]
145
+ # print("Labels for pipe:", labels) # Debug: Confirm labels are correct
146
+
147
+ # responses = pipe(image_urls, candidate_labels=labels)
148
+ # subColour = responses[0][0]['label'].split(" clothing:")[0]
149
+
150
+ # return subColour, mainColour, responses[0][0]['score']
151
+
152
+
153
  @spaces.GPU
154
  def get_colour(image_urls, category):
155
+ colour_labels = [f"{colour}, clothing: {category}" for colour in COLOURS_DICT.keys()]
156
+ responses = pipe(image_urls, candidate_labels=colour_labels, device=device)
157
+
158
+ main_colour, main_score = get_most_common_label(responses)
159
+ if main_colour not in COLOURS_DICT:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
160
  return None, None, None
161
 
162
+ score = [main_score]
 
 
163
 
164
+ labels = COLOURS_DICT[main_colour]
165
+ if main_colour == "multicolor":
166
+ labels = [label for key, values in COLOURS_DICT.items() if key != main_colour for label in values]
167
 
168
+ labels = [f"{label}, clothing: {category}" for label in labels]
169
+ responses = pipe(image_urls, candidate_labels=labels, device=device)
170
+
171
+ most_common, sub_score = get_most_common_label(responses)
172
+ sub_colours = [most_common]
173
+ score.append(sub_score)
174
+
175
+ if main_colour == "multicolor":
176
+ sub_key = next(key for key, values in COLOURS_DICT.items() if most_common in values)
177
+ labels = [label for key, values in COLOURS_DICT.items() if key not in {main_colour, sub_key} for label in values]
178
+ labels = [f"{label}, clothing: {category}" for label in labels]
179
+ responses = pipe(image_urls, candidate_labels=labels, device=device)
180
+
181
+ most_common, tertiary_score = get_most_common_label(responses)
182
+ sub_colours.append(most_common)
183
+ score.append(tertiary_score)
184
+
185
+ return sub_colours, main_colour, score
186
 
187
 
188
 
189
+ # Function for get_predicted_attributes and get_colour
190
  def get_most_common_label(responses):
191
  feature_scores = defaultdict(float)
192
  for response in responses:
193
  label, score = response[0]['label'].split(", clothing:")[0], response[0]['score']
194
  feature_scores[label] += score
195
+
196
+ max_label = max(feature_scores, key=feature_scores.get)
197
+ return max_label, feature_scores[max_label] / len(responses)
198
 
199
  @spaces.GPU
200
  def get_predicted_attributes(image_urls, category):