Spaces:
Running
on
Zero
Running
on
Zero
Update optimizer.py
Browse files- optimizer.py +137 -61
optimizer.py
CHANGED
@@ -279,7 +279,7 @@ class UltraSupremeOptimizer:
|
|
279 |
|
280 |
start_time = datetime.now()
|
281 |
|
282 |
-
logger.info("ULTRA SUPREME ANALYSIS - Starting pipeline")
|
283 |
|
284 |
# Ejecutar inferencia CLIP
|
285 |
full_prompt, clip_fast, clip_classic = self.run_clip_inference(image)
|
@@ -291,32 +291,47 @@ class UltraSupremeOptimizer:
|
|
291 |
clip_fast = "image"
|
292 |
clip_classic = "picture"
|
293 |
|
294 |
-
logger.info(f"
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
320 |
|
321 |
end_time = datetime.now()
|
322 |
duration = (end_time - start_time).total_seconds()
|
@@ -326,9 +341,9 @@ class UltraSupremeOptimizer:
|
|
326 |
if torch.cuda.is_available():
|
327 |
torch.cuda.empty_cache()
|
328 |
|
329 |
-
# Generate analysis report
|
330 |
-
analysis_info = self.
|
331 |
-
|
332 |
)
|
333 |
|
334 |
return optimized_prompt, analysis_info, score, breakdown
|
@@ -386,45 +401,106 @@ class UltraSupremeOptimizer:
|
|
386 |
|
387 |
return min(score, 100)
|
388 |
|
389 |
-
def
|
390 |
-
|
391 |
-
|
392 |
-
"""Generate detailed analysis report"""
|
393 |
|
394 |
device_used = "cuda" if torch.cuda.is_available() else "cpu"
|
395 |
gpu_status = "⚡ ZeroGPU" if device_used == "cuda" else "💻 CPU"
|
396 |
-
precision_info = "Half Precision (FP16)" if device_used == "cuda" else "Full Precision (FP32)"
|
397 |
|
398 |
-
#
|
399 |
-
|
400 |
-
|
401 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
402 |
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
407 |
|
408 |
-
|
409 |
-
|
410 |
-
- **Main Subject:** {detected_subject}
|
411 |
-
- **Precision:** Using {precision_info} for optimal performance
|
412 |
-
- **Quality:** Maximum resolution processing (768px)
|
413 |
|
414 |
-
**📊
|
415 |
-
|
416 |
-
|
417 |
-
|
|
|
418 |
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
- ✅ Applied Flux-specific optimizations
|
426 |
-
- ✅ Removed redundant/generic elements
|
427 |
|
428 |
-
**🔬 Powered by Pariente AI Research
|
429 |
|
430 |
return analysis_info
|
|
|
279 |
|
280 |
start_time = datetime.now()
|
281 |
|
282 |
+
logger.info("ULTRA SUPREME ANALYSIS - Starting complete pipeline with multi-model analysis")
|
283 |
|
284 |
# Ejecutar inferencia CLIP
|
285 |
full_prompt, clip_fast, clip_classic = self.run_clip_inference(image)
|
|
|
291 |
clip_fast = "image"
|
292 |
clip_classic = "picture"
|
293 |
|
294 |
+
logger.info(f"CLIP complete prompt: {full_prompt[:100]}...")
|
295 |
+
|
296 |
+
# NUEVO: Ejecutar análisis ultra supremo con múltiples modelos
|
297 |
+
logger.info("Running multi-model ultra supreme analysis...")
|
298 |
+
ultra_analysis = self.analyzer.ultra_supreme_analysis(
|
299 |
+
image, clip_fast, clip_classic, full_prompt
|
300 |
+
)
|
301 |
+
|
302 |
+
# Construir prompt mejorado basado en análisis completo
|
303 |
+
enhanced_prompt_parts = []
|
304 |
+
|
305 |
+
# Base prompt de CLIP
|
306 |
+
enhanced_prompt_parts.append(full_prompt)
|
307 |
+
|
308 |
+
# Agregar información demográfica si está disponible
|
309 |
+
if ultra_analysis["demographic"]["gender"] and ultra_analysis["demographic"]["gender_confidence"] > 0.7:
|
310 |
+
gender = ultra_analysis["demographic"]["gender"]
|
311 |
+
age_cat = ultra_analysis["demographic"]["age_category"]
|
312 |
+
if age_cat:
|
313 |
+
enhanced_prompt_parts.append(f"{age_cat} {gender}")
|
314 |
+
|
315 |
+
# Agregar estado emocional principal
|
316 |
+
if ultra_analysis["emotional_state"]["primary_emotion"] and ultra_analysis["emotional_state"]["emotion_confidence"] > 0.6:
|
317 |
+
emotion = ultra_analysis["emotional_state"]["primary_emotion"]
|
318 |
+
enhanced_prompt_parts.append(f"{emotion} expression")
|
319 |
+
|
320 |
+
# Agregar información de pose si está disponible
|
321 |
+
if ultra_analysis["pose_composition"]["posture"]:
|
322 |
+
enhanced_prompt_parts.append(ultra_analysis["pose_composition"]["posture"][0])
|
323 |
+
|
324 |
+
# Combinar y aplicar reglas de Flux
|
325 |
+
combined_prompt = ", ".join(enhanced_prompt_parts)
|
326 |
+
optimized_prompt = self.apply_flux_rules(combined_prompt)
|
327 |
+
|
328 |
+
# Si el analyzer enriqueció el prompt, úsalo
|
329 |
+
analyzer_prompt = self.analyzer.build_ultra_supreme_prompt(ultra_analysis, [full_prompt])
|
330 |
+
if len(analyzer_prompt) > len(optimized_prompt):
|
331 |
+
optimized_prompt = self.apply_flux_rules(analyzer_prompt)
|
332 |
+
|
333 |
+
# Calcular score usando el analyzer
|
334 |
+
score, breakdown = self.analyzer.calculate_ultra_supreme_score(optimized_prompt, ultra_analysis)
|
335 |
|
336 |
end_time = datetime.now()
|
337 |
duration = (end_time - start_time).total_seconds()
|
|
|
341 |
if torch.cuda.is_available():
|
342 |
torch.cuda.empty_cache()
|
343 |
|
344 |
+
# Generate enhanced analysis report con datos de múltiples modelos
|
345 |
+
analysis_info = self._generate_ultra_analysis_report(
|
346 |
+
ultra_analysis, score, breakdown, duration
|
347 |
)
|
348 |
|
349 |
return optimized_prompt, analysis_info, score, breakdown
|
|
|
401 |
|
402 |
return min(score, 100)
|
403 |
|
404 |
+
def _generate_ultra_analysis_report(self, analysis: Dict[str, Any],
|
405 |
+
score: int, breakdown: Dict[str, int],
|
406 |
+
duration: float) -> str:
|
407 |
+
"""Generate ultra detailed analysis report with multi-model results"""
|
408 |
|
409 |
device_used = "cuda" if torch.cuda.is_available() else "cpu"
|
410 |
gpu_status = "⚡ ZeroGPU" if device_used == "cuda" else "💻 CPU"
|
|
|
411 |
|
412 |
+
# Demographic info
|
413 |
+
demo_info = ""
|
414 |
+
if analysis["demographic"]["age_category"]:
|
415 |
+
age = analysis["demographic"]["age_category"].replace("_", " ").title()
|
416 |
+
gender = analysis["demographic"]["gender"] or "person"
|
417 |
+
confidence = analysis["demographic"]["age_confidence"]
|
418 |
+
demo_info = f"**Detected:** {age} {gender} (confidence: {confidence:.0%})"
|
419 |
+
|
420 |
+
# Emotion info
|
421 |
+
emotion_info = ""
|
422 |
+
if analysis["emotional_state"]["primary_emotion"]:
|
423 |
+
emotion = analysis["emotional_state"]["primary_emotion"]
|
424 |
+
confidence = analysis["emotional_state"]["emotion_confidence"]
|
425 |
+
emotion_info = f"**Primary Emotion:** {emotion} ({confidence:.0%})"
|
426 |
+
|
427 |
+
# Add emotion distribution if available
|
428 |
+
if analysis["emotional_state"]["emotion_distribution"]:
|
429 |
+
top_emotions = sorted(
|
430 |
+
analysis["emotional_state"]["emotion_distribution"].items(),
|
431 |
+
key=lambda x: x[1], reverse=True
|
432 |
+
)[:3]
|
433 |
+
emotion_details = ", ".join([f"{e[0]}: {e[1]:.0%}" for e in top_emotions])
|
434 |
+
emotion_info += f"\n**Emotion Distribution:** {emotion_details}"
|
435 |
|
436 |
+
# Face analysis info
|
437 |
+
face_info = f"**Faces Detected:** {analysis['facial_ultra']['face_count']}"
|
438 |
+
if analysis['facial_ultra']['face_count'] > 0:
|
439 |
+
features = []
|
440 |
+
for feature_type in ['eyes', 'mouth', 'facial_hair', 'skin']:
|
441 |
+
if analysis['facial_ultra'].get(feature_type):
|
442 |
+
features.extend(analysis['facial_ultra'][feature_type])
|
443 |
+
if features:
|
444 |
+
face_info += f"\n**Facial Features:** {', '.join(features[:5])}"
|
445 |
+
|
446 |
+
# Pose info
|
447 |
+
pose_info = ""
|
448 |
+
if analysis["pose_composition"].get("pose_confidence", 0) > 0:
|
449 |
+
confidence = analysis["pose_composition"]["pose_confidence"]
|
450 |
+
pose_info = f"**Pose Analysis:** Body detected ({confidence:.0%} confidence)"
|
451 |
+
if analysis["pose_composition"]["posture"]:
|
452 |
+
pose_info += f"\n**Posture:** {', '.join(analysis['pose_composition']['posture'])}"
|
453 |
+
|
454 |
+
# Environment info
|
455 |
+
env_info = ""
|
456 |
+
if analysis["environmental"]["setting_type"]:
|
457 |
+
env_info = f"**Setting:** {analysis['environmental']['setting_type'].replace('_', ' ').title()}"
|
458 |
+
if analysis["environmental"]["lighting_analysis"]:
|
459 |
+
env_info += f"\n**Lighting:** {', '.join(analysis['environmental']['lighting_analysis'])}"
|
460 |
+
|
461 |
+
# Intelligence metrics
|
462 |
+
metrics = analysis["intelligence_metrics"]
|
463 |
+
|
464 |
+
analysis_info = f"""**🚀 ULTRA SUPREME MULTI-MODEL ANALYSIS COMPLETE**
|
465 |
+
**Processing:** {gpu_status} • {duration:.1f}s • Multi-Model Pipeline
|
466 |
+
**Ultra Score:** {score}/100 • Models: CLIP + DeepFace + MediaPipe + Transformers
|
467 |
+
|
468 |
+
**📊 BREAKDOWN:**
|
469 |
+
• Prompt Quality: {breakdown.get('prompt_quality', 0)}/25
|
470 |
+
• Analysis Depth: {breakdown.get('analysis_depth', 0)}/25
|
471 |
+
• Model Confidence: {breakdown.get('model_confidence', 0)}/25
|
472 |
+
• Feature Richness: {breakdown.get('feature_richness', 0)}/25
|
473 |
+
|
474 |
+
**🧠 DEEP ANALYSIS RESULTS:**
|
475 |
+
|
476 |
+
**👤 DEMOGRAPHICS & IDENTITY:**
|
477 |
+
{demo_info or "No face detected for demographic analysis"}
|
478 |
+
|
479 |
+
**😊 EMOTIONAL ANALYSIS:**
|
480 |
+
{emotion_info or "No emotional data available"}
|
481 |
+
|
482 |
+
**👁️ FACIAL ANALYSIS:**
|
483 |
+
{face_info}
|
484 |
+
|
485 |
+
**🚶 POSE & BODY LANGUAGE:**
|
486 |
+
{pose_info or "No pose data available"}
|
487 |
|
488 |
+
**🏞️ ENVIRONMENT & SCENE:**
|
489 |
+
{env_info or "No environmental data detected"}
|
|
|
|
|
|
|
490 |
|
491 |
+
**📊 INTELLIGENCE METRICS:**
|
492 |
+
• **Total Features Detected:** {metrics['total_features_detected']}
|
493 |
+
• **Analysis Depth Score:** {metrics['analysis_depth_score']}/100
|
494 |
+
• **Model Confidence Average:** {metrics['model_confidence_average']:.0%}
|
495 |
+
• **Technical Optimization:** {metrics['technical_optimization_score']}/100
|
496 |
|
497 |
+
**✨ MULTI-MODEL ADVANTAGES:**
|
498 |
+
✅ DeepFace: Accurate age, gender, emotion detection
|
499 |
+
✅ MediaPipe: Body pose and gesture analysis
|
500 |
+
✅ CLIP: Semantic understanding and context
|
501 |
+
✅ Transformers: Advanced emotion classification
|
502 |
+
✅ OpenCV: Robust face detection
|
|
|
|
|
503 |
|
504 |
+
**🔬 Powered by Pariente AI Research • Ultra Supreme Intelligence Engine**"""
|
505 |
|
506 |
return analysis_info
|