Upload 3 files
Browse files- api.py +3 -3
- character_detection.py +3 -3
- face_classifier.py +6 -2
api.py
CHANGED
|
@@ -204,9 +204,9 @@ def hierarchical_cluster_with_min_size(X, max_groups: int, min_cluster_size: int
|
|
| 204 |
try:
|
| 205 |
score = silhouette_score(X, trial_labels, metric='cosine')
|
| 206 |
# Penalizar configuraciones con muchos clusters para evitar overfitting
|
| 207 |
-
# Penalizaci贸n
|
| 208 |
-
#
|
| 209 |
-
adjusted_score = score - (n_clusters * 0.
|
| 210 |
|
| 211 |
if adjusted_score > best_score:
|
| 212 |
best_score = adjusted_score
|
|
|
|
| 204 |
try:
|
| 205 |
score = silhouette_score(X, trial_labels, metric='cosine')
|
| 206 |
# Penalizar configuraciones con muchos clusters para evitar overfitting
|
| 207 |
+
# Penalizaci贸n MUY fuerte para reducir duplicados de la misma persona
|
| 208 |
+
# Valores: 0.05 = fuerte, 0.07 = muy fuerte, 0.10 = extremo
|
| 209 |
+
adjusted_score = score - (n_clusters * 0.07)
|
| 210 |
|
| 211 |
if adjusted_score > best_score:
|
| 212 |
best_score = adjusted_score
|
character_detection.py
CHANGED
|
@@ -218,9 +218,9 @@ class CharacterDetector:
|
|
| 218 |
if valid_clusters >= 2:
|
| 219 |
try:
|
| 220 |
score = silhouette_score(X, trial_labels, metric='cosine')
|
| 221 |
-
# Penalizaci贸n
|
| 222 |
-
#
|
| 223 |
-
adjusted_score = score - (n_clusters * 0.
|
| 224 |
|
| 225 |
if adjusted_score > best_score:
|
| 226 |
best_score = adjusted_score
|
|
|
|
| 218 |
if valid_clusters >= 2:
|
| 219 |
try:
|
| 220 |
score = silhouette_score(X, trial_labels, metric='cosine')
|
| 221 |
+
# Penalizaci贸n MUY fuerte para reducir duplicados de la misma persona
|
| 222 |
+
# Valores: 0.05 = fuerte, 0.07 = muy fuerte, 0.10 = extremo
|
| 223 |
+
adjusted_score = score - (n_clusters * 0.07)
|
| 224 |
|
| 225 |
if adjusted_score > best_score:
|
| 226 |
best_score = adjusted_score
|
face_classifier.py
CHANGED
|
@@ -10,8 +10,12 @@ logging.basicConfig(level=logging.INFO)
|
|
| 10 |
logger = logging.getLogger(__name__)
|
| 11 |
|
| 12 |
# Configuraci贸n de thresholds
|
| 13 |
-
FACE_CONFIDENCE_THRESHOLD
|
| 14 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
|
| 16 |
|
| 17 |
def validate_and_classify_face(image_path: str) -> Optional[Dict[str, Any]]:
|
|
|
|
| 10 |
logger = logging.getLogger(__name__)
|
| 11 |
|
| 12 |
# Configuraci贸n de thresholds
|
| 13 |
+
# FACE_CONFIDENCE_THRESHOLD: Confianza m铆nima para aceptar una cara
|
| 14 |
+
# Valores: 0.3 = permisivo (acepta muchos falsos positivos)
|
| 15 |
+
# 0.6 = balanceado
|
| 16 |
+
# 0.8 = estricto (elimina falsos positivos pero puede perder caras reales)
|
| 17 |
+
FACE_CONFIDENCE_THRESHOLD = 0.70 # M脕S ESTRICTO: eliminar camisetas, letreros, etc.
|
| 18 |
+
GENDER_NEUTRAL_THRESHOLD = 0.2 # Diferencia m铆nima para g茅nero neutro
|
| 19 |
|
| 20 |
|
| 21 |
def validate_and_classify_face(image_path: str) -> Optional[Dict[str, Any]]:
|