Spaces:
Running
Running
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 +1 -6
- app/templates/live.html +8 -5
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 |
-
#
|
| 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 |
-
//
|
| 410 |
-
const
|
| 411 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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) {
|