From a641682cc19de970d8a9a35d6255ddb91cbcc735 Mon Sep 17 00:00:00 2001 From: khushanuma-shabbir Date: Tue, 19 May 2026 00:31:11 +0530 Subject: [PATCH] Fix: add confidence threshold and prevent UI freezing on empty states --- app.py | 67 ++++++++++++++++++++++++++------------------ templates/index.html | 8 ++++-- 2 files changed, 46 insertions(+), 29 deletions(-) diff --git a/app.py b/app.py index c3160be..920e494 100644 --- a/app.py +++ b/app.py @@ -34,6 +34,7 @@ last_letter = "" letter_start_time = None auto_add_delay = 5 +CONFIDENCE_THRESHOLD = 0.70 # Minimum 70% confidence required @app.route('/') @@ -90,9 +91,13 @@ def predict(): imgCrop = img[y1:y2, x1:x2] if imgCrop.size == 0: - + last_letter = "" + letter_start_time = None return jsonify({ - "success": False + "success": True, + "letter": "Waiting...", + "confidence": 0.0, + "word": word }) aspectRatio = h / w @@ -137,43 +142,51 @@ def predict(): ) current_letter = labels[index] - confidence = prediction[index] - # Auto add letter logic - if current_letter == last_letter: - - if ( - letter_start_time and - time.time() - letter_start_time >= auto_add_delay - ): - - word += current_letter - - letter_start_time = None - last_letter = "" + if confidence >= CONFIDENCE_THRESHOLD: + # Auto add letter logic + if current_letter == last_letter: + if ( + letter_start_time and + time.time() - letter_start_time >= auto_add_delay + ): + word += current_letter + letter_start_time = None + last_letter = "" + else: + last_letter = current_letter + letter_start_time = time.time() + return jsonify({ + "success": True, + "letter": current_letter, + "confidence": float(confidence), + "word": word + }) else: - - last_letter = current_letter - letter_start_time = time.time() - - return jsonify({ - "success": True, - "letter": current_letter, - "confidence": float(confidence), - "word": word - }) + # Reset tracking if confidence is too low (e.g., hand transition) + last_letter = "" + letter_start_time = None + return jsonify({ + "success": True, + "letter": "Unsure", + "confidence": float(confidence), + "word": word + }) else: - current_letter = "" confidence = 0.0 last_letter = "" letter_start_time = None + # Return success: True so the frontend updates to "Waiting..." return jsonify({ - "success": False + "success": True, + "letter": "Waiting...", + "confidence": 0.0, + "word": word }) except Exception as e: diff --git a/templates/index.html b/templates/index.html index cf81b53..39a731e 100644 --- a/templates/index.html +++ b/templates/index.html @@ -376,8 +376,12 @@ if(data.success){ - currentLetter.textContent = - `${data.letter} (${Math.round(data.confidence * 100)}%)`; + if (data.letter === "Waiting..." || data.letter === "Unsure") { + currentLetter.textContent = data.letter; + } else { + currentLetter.textContent = + `${data.letter} (${Math.round(data.confidence * 100)}%)`; + } document.getElementById( 'displayWord'