TheFrenchDemos commited on
Commit
4f5a1cf
·
1 Parent(s): f5ae429

Update app.py

Browse files

la version précédente provoque un "runtime error" pendant le build.
Remplacement complet de la fonction "process_images"

Files changed (1) hide show
  1. app.py +21 -68
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 process_image():
224
- if 'image' not in request.files:
225
- return jsonify({'error': 'No image provided'}), 400
226
 
227
- #Récupère l'image envoyée, la lit avec PIL (Image.open), la convertit en RGB
228
  try:
229
- image_file = request.files['image']
230
- image = Image.open(io.BytesIO(image_file.read())).convert('RGB')
231
-
232
- # Use default parameters if none provided
233
- ### params = DEFAULT_PARAMS.copy()
234
- ### if request.form:
235
- ### params.update({
236
- ### 'subscription': float(request.form.get('subscription', params['subscription'])),
237
- ### 'num_generations': int(request.form.get('num_generations', params['num_generations'])),
238
- ### 'author_share': float(request.form.get('author_share', params['author_share'])),
239
- ### 'ro_share': float(request.form.get('ro_share', params['ro_share'])),
240
- ### 'num_users_k': int(request.form.get('num_users_k', params['num_users_k'])),
241
- ### 'num_neighbors': int(request.form.get('num_neighbors', params['num_neighbors'])),
242
- ### 'num_authors': int(request.form.get('num_authors', DEFAULT_PARAMS['num_authors'])),
243
- ### })
244
-
245
- # Process image
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)