har1zarD commited on
Commit
8c64cb8
Β·
1 Parent(s): 11ed200
.claude/agents/ai-food-scanner-model.md ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ name: ai-food-scanner-model
3
+ description: when i call him
4
+ model: sonnet
5
+ ---
6
+
7
+ You are a senior Machine Learning and Python engineer from the year 2025, specializing in computer vision, deep learning, and large-scale model optimization.
8
+ You have full knowledge of the latest architectures, training techniques, and deployment frameworks available in 2025.
9
+ Your expertise covers state-of-the-art food recognition systems, multimodal AI models, and high-performance implementations.
10
+ You understand how to build, train, and deploy advanced AI models with cutting-edge accuracy, efficiency, and reliability, hosted on Hugging Face.
11
+
12
+ Your goal is to create the most advanced AI Food Scanner model possible in 2025, capable of understanding food images and extracting meaningful information such as classification, ingredients, and nutritional values.
13
+ You think, reason, and code like a world-class ML engineer β€” producing clean, elegant, and optimized Python code that reflects deep technical mastery and modern best practices.
test_improvements.py ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """
3
+ Test script to validate the food recognition improvements.
4
+ Tests the smart override system and validation rules.
5
+ """
6
+
7
+ import sys
8
+ import os
9
+ sys.path.append(os.path.dirname(__file__))
10
+
11
+ # Import the constants from the main app
12
+ from app import (
13
+ SMART_FOOD_OVERRIDES,
14
+ FOOD_MODELS,
15
+ MIN_CONFIDENCE_THRESHOLD,
16
+ MIN_ALTERNATIVE_CONFIDENCE,
17
+ COMPREHENSIVE_FOOD_CATEGORIES,
18
+ BALKAN_TO_FOOD101_MAPPING
19
+ )
20
+
21
+ def test_smart_overrides():
22
+ """Test the smart override system."""
23
+ print("πŸ§ͺ Testing Smart Override System")
24
+ print("=" * 50)
25
+
26
+ # Test 1: Fried Food overrides
27
+ if "Fried Food" in SMART_FOOD_OVERRIDES:
28
+ fried_overrides = SMART_FOOD_OVERRIDES["Fried Food"]
29
+ print(f"βœ… Fried Food overrides: {len(fried_overrides)} items")
30
+
31
+ # Check key items
32
+ if "fish_and_chips" in fried_overrides:
33
+ print(f" 🐟 Fish and Chips: {fried_overrides['fish_and_chips']}")
34
+ if "pancakes" in fried_overrides:
35
+ print(f" πŸ₯ž Pancakes: {fried_overrides['pancakes']}")
36
+
37
+ # Test 2: Model priority changes
38
+ print(f"\nπŸ“Š Model Priorities:")
39
+ for model_key, config in FOOD_MODELS.items():
40
+ priority = config["priority"]
41
+ desc = config["description"]
42
+ print(f" {priority}. {model_key}: {desc}")
43
+
44
+ print(f"\nβš™οΈ Confidence Thresholds:")
45
+ print(f" Minimum: {MIN_CONFIDENCE_THRESHOLD:.1%}")
46
+ print(f" Alternative: {MIN_ALTERNATIVE_CONFIDENCE:.1%}")
47
+
48
+ # Test model count
49
+ active_models = len(FOOD_MODELS)
50
+ print(f"\n🎯 Active Models: {active_models}")
51
+ if active_models == 1:
52
+ print(" βœ… PERFECT: Only Food-101 enabled (no generic models)")
53
+ else:
54
+ print(" ⚠️ WARNING: Multiple models active")
55
+
56
+ return True
57
+
58
+ def test_food_categories():
59
+ """Test comprehensive food categories."""
60
+ print(f"\n🍽️ Food Categories: {len(COMPREHENSIVE_FOOD_CATEGORIES)} items")
61
+
62
+ # Test key foods
63
+ key_foods = ["pancakes", "fish_and_chips", "american_pancakes", "waffles"]
64
+ for food in key_foods:
65
+ if food in COMPREHENSIVE_FOOD_CATEGORIES:
66
+ print(f" βœ… {food} - Found")
67
+ else:
68
+ print(f" ❌ {food} - Missing")
69
+
70
+ # Test Balkan mapping
71
+ print(f"\nπŸ‡§πŸ‡¦ Balkan Food Mapping:")
72
+ for balkan_food, food101_equiv in BALKAN_TO_FOOD101_MAPPING.items():
73
+ print(f" {balkan_food} β†’ {food101_equiv}")
74
+
75
+ def test_validation_rules():
76
+ """Test validation rules logic."""
77
+ print(f"\nπŸ” Testing Validation Rules")
78
+
79
+ # Simulate predictions that should be caught
80
+ test_cases = [
81
+ {"label": "pancakes dessert", "expected": "FAIL", "reason": "Breakfast as dessert"},
82
+ {"label": "fish_and_chips", "expected": "PASS", "reason": "Correct classification"},
83
+ {"label": "american pancakes", "expected": "PASS", "reason": "Correct breakfast"},
84
+ {"label": "fried food", "expected": "PENALTY", "reason": "Too generic"}
85
+ ]
86
+
87
+ for case in test_cases:
88
+ label = case["label"].lower().replace("_", " ")
89
+
90
+ # Rule 1: Breakfast items classified as dessert
91
+ is_breakfast_dessert = (
92
+ any(term in label for term in ['pancake', 'waffle', 'french_toast']) and
93
+ any(term in label for term in ['dessert', 'cake', 'sweet'])
94
+ )
95
+
96
+ # Rule 2: Generic high confidence items
97
+ is_generic = label in ['food', 'meal', 'dish', 'fried food', 'dessert']
98
+
99
+ if is_breakfast_dessert:
100
+ result = "FAIL (Breakfast as dessert)"
101
+ elif is_generic:
102
+ result = "PENALTY (Too generic)"
103
+ else:
104
+ result = "PASS"
105
+
106
+ status = "βœ…" if case["expected"] in result else "❌"
107
+ print(f" {status} {case['label']}: {result}")
108
+
109
+ if __name__ == "__main__":
110
+ print("πŸš€ Testing Food Recognition Improvements")
111
+ print("=" * 60)
112
+
113
+ try:
114
+ test_smart_overrides()
115
+ test_food_categories()
116
+ test_validation_rules()
117
+
118
+ print("\n" + "=" * 60)
119
+ print("βœ… ALL TESTS COMPLETED - Model improvements validated!")
120
+ print("\nπŸ“ Key Improvements:")
121
+ print(" β€’ Food-101 model prioritized for specific dishes")
122
+ print(" β€’ Smart overrides for fried food β†’ specific dishes")
123
+ print(" β€’ Validation rules prevent breakfast β†’ dessert mistakes")
124
+ print(" β€’ Enhanced confidence boosting for target foods")
125
+ print(" β€’ Stricter confidence thresholds for better quality")
126
+
127
+ except Exception as e:
128
+ print(f"❌ Test failed: {e}")
129
+ sys.exit(1)