Spaces:
Runtime error
Runtime error
Commit
·
4f5a1cf
1
Parent(s):
f5ae429
Update app.py
Browse filesla version précédente provoque un "runtime error" pendant le build.
Remplacement complet de la fonction "process_images"
app.py
CHANGED
@@ -220,79 +220,32 @@ def select_preset(preset_id):
|
|
220 |
return jsonify({'error': str(e)}), 500
|
221 |
|
222 |
@app.route('/process', methods=['POST'])
|
223 |
-
def
|
224 |
-
if '
|
225 |
-
return jsonify({'error': '
|
226 |
|
227 |
-
#Récupère l'image envoyée, la lit avec PIL (Image.open), la convertit en RGB
|
228 |
try:
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
features = get_ft(model, image)
|
247 |
-
distances, indices = get_topk(index, features, topk=params['num_neighbors'])
|
248 |
-
|
249 |
-
# Collect valid results first
|
250 |
-
valid_results = [] #Pour chaque image trouvée : Vérifie que l'URL est valide (avec requests.head)
|
251 |
-
### valid_similarities = [] #Si l'URL est OK, ajoute l'image à valid_results et garde sa distance
|
252 |
-
### for i in range(params['num_neighbors']):
|
253 |
-
### image_url = urls[indices[0][i]].strip()
|
254 |
-
### try:
|
255 |
-
### response = requests.head(image_url)
|
256 |
-
### if response.status_code == 200:
|
257 |
-
### valid_results.append({
|
258 |
-
### 'index': i,
|
259 |
-
### 'url': image_url
|
260 |
-
### })
|
261 |
-
### valid_similarities.append(distances[0][i])
|
262 |
-
### except requests.RequestException:
|
263 |
-
### continue
|
264 |
-
|
265 |
-
# Renormalize similarities for valid results
|
266 |
-
### if valid_similarities:
|
267 |
-
### similarities = distance_to_similarity(np.array([valid_similarities]), temp=1e-5)
|
268 |
-
|
269 |
-
# Calculate rewards with renormalized similarities
|
270 |
-
### rewards = calculate_rewards(
|
271 |
-
### params['subscription'],
|
272 |
-
### params['num_generations'],
|
273 |
-
### params['author_share'],
|
274 |
-
### params['ro_share'],
|
275 |
-
### params['num_users_k'],
|
276 |
-
### similarities,
|
277 |
-
### params['num_authors']
|
278 |
-
### )
|
279 |
-
|
280 |
-
# Build final results
|
281 |
-
# Pour chaque image valide, associe l'URL, la récompense calculée, et des infos supplémentaires récupérées avec get_other_info()
|
282 |
-
results = []
|
283 |
-
for i, result in enumerate(valid_results):
|
284 |
-
other_info = get_other_info(result['url'])
|
285 |
-
results.append({
|
286 |
-
'image_url': result['url'],
|
287 |
-
'rewards': rewards[i],
|
288 |
-
'other': other_info
|
289 |
-
})
|
290 |
-
|
291 |
-
return jsonify({'results': results})
|
292 |
-
|
293 |
except Exception as e:
|
294 |
return jsonify({'error': str(e)}), 500
|
295 |
|
|
|
296 |
if __name__ == '__main__':
|
297 |
init_model()
|
298 |
app.run(host='0.0.0.0', port=7860)
|
|
|
220 |
return jsonify({'error': str(e)}), 500
|
221 |
|
222 |
@app.route('/process', methods=['POST'])
|
223 |
+
def process_images():
|
224 |
+
if 'image1' not in request.files or 'image2' not in request.files:
|
225 |
+
return jsonify({'error': 'Two images must be provided (image1 and image2)'}), 400
|
226 |
|
|
|
227 |
try:
|
228 |
+
# Charger les deux images
|
229 |
+
image_file1 = request.files['image1']
|
230 |
+
image1 = Image.open(io.BytesIO(image_file1.read())).convert('RGB')
|
231 |
+
|
232 |
+
image_file2 = request.files['image2']
|
233 |
+
image2 = Image.open(io.BytesIO(image_file2.read())).convert('RGB')
|
234 |
+
|
235 |
+
# Extraire les features des deux images
|
236 |
+
features1 = get_ft(model, image1)
|
237 |
+
features2 = get_ft(model, image2)
|
238 |
+
|
239 |
+
# Calculer la distance euclidienne entre les deux feature vectors
|
240 |
+
distance = float(np.linalg.norm(features1 - features2)) # Convertir en float Python natif pour JSON
|
241 |
+
|
242 |
+
# Retourner la distance
|
243 |
+
return jsonify({'distance': distance})
|
244 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
245 |
except Exception as e:
|
246 |
return jsonify({'error': str(e)}), 500
|
247 |
|
248 |
+
|
249 |
if __name__ == '__main__':
|
250 |
init_model()
|
251 |
app.run(host='0.0.0.0', port=7860)
|