hoda.fakhar commited on
Commit
a1daaca
·
1 Parent(s): b882066

fix: remove aggressive sharpening, fix gender confidence mismatch in live view

Browse files
app/routes/analysis_routes.py CHANGED
@@ -78,13 +78,8 @@ def live_frame():
78
  temp_filename = f"live_{uuid.uuid4()}.jpg"
79
  temp_path = os.path.join(current_app.config['UPLOAD_FOLDER'], temp_filename)
80
 
81
- # Load and Enhance for AI precision
82
  img = Image.open(BytesIO(image_data))
83
- from PIL import ImageEnhance
84
- enhancer = ImageEnhance.Sharpness(img)
85
- img = enhancer.enhance(2.2) # High intensity sharpening for glasses
86
- contrast = ImageEnhance.Contrast(img)
87
- img = contrast.enhance(1.4)
88
  img = img.convert("RGB")
89
  img.save(temp_path, "JPEG", quality=95)
90
 
 
78
  temp_filename = f"live_{uuid.uuid4()}.jpg"
79
  temp_path = os.path.join(current_app.config['UPLOAD_FOLDER'], temp_filename)
80
 
81
+ # Save frame as-is aggressive sharpening/contrast hurts gender CNN accuracy
82
  img = Image.open(BytesIO(image_data))
 
 
 
 
 
83
  img = img.convert("RGB")
84
  img.save(temp_path, "JPEG", quality=95)
85
 
app/templates/live.html CHANGED
@@ -405,12 +405,15 @@
405
  const domGender = getMode(predictions, 'dominant_gender');
406
  const domEmotion = getMode(predictions, 'dominant_emotion');
407
  const domRace = getMode(predictions, 'dominant_race');
408
-
409
- // Get Confidence (latest frame)
410
- const genConf = Math.round(face.gender[face.dominant_gender]);
411
- const emoConf = Math.round(face.emotion[face.dominant_emotion]);
 
 
 
 
412
  const ageConf = Math.round(face.face_confidence * 100);
413
- const raceConf = Math.round(face.race[face.dominant_race]);
414
 
415
  // Update Gender with loading animation & delay
416
  if (!genderPredictionInProgress) {
 
405
  const domGender = getMode(predictions, 'dominant_gender');
406
  const domEmotion = getMode(predictions, 'dominant_emotion');
407
  const domRace = getMode(predictions, 'dominant_race');
408
+
409
+ // Average confidence for the voted label across buffered frames (not just latest)
410
+ const avgConf = (arr, label, key) =>
411
+ Math.round(arr.reduce((sum, f) => sum + (f[key][label] || 0), 0) / arr.length);
412
+
413
+ const genConf = avgConf(predictions, domGender, 'gender');
414
+ const emoConf = avgConf(predictions, domEmotion, 'emotion');
415
+ const raceConf = avgConf(predictions, domRace, 'race');
416
  const ageConf = Math.round(face.face_confidence * 100);
 
417
 
418
  // Update Gender with loading animation & delay
419
  if (!genderPredictionInProgress) {