yuting111222 commited on
Commit
c2a1c6d
·
1 Parent(s): 8b0abe0

Add real Hugging Face model support with Food101 classification

Browse files
Files changed (2) hide show
  1. app.py +60 -6
  2. requirements.txt +8 -0
app.py CHANGED
@@ -10,6 +10,7 @@ import logging
10
  import time
11
  from datetime import datetime
12
  import os # Added for environment detection
 
13
 
14
  # 設置詳細日誌 - 在 Hugging Face Spaces 中只使用 StreamHandler
15
  logging.basicConfig(
@@ -165,14 +166,67 @@ def simulate_ai_analysis(image_url: str):
165
  }
166
 
167
  def real_ai_analysis(image_url: str):
168
- """真實 AI 分析 - 需要模型文件"""
169
  try:
170
- log_analysis_step("模型載入", "嘗試載入真實 AI 模型...")
171
 
172
- # 這裡可以添加真實的模型載入代碼
173
- # 由於 Docker Space 限制,這裡使用模擬模式
174
- log_analysis_step("模型載入", "模型文件不可用,切換到模擬模式")
175
- return simulate_ai_analysis(image_url)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
176
 
177
  except Exception as e:
178
  log_analysis_step("模型載入", f"模型載入失敗: {str(e)}")
 
10
  import time
11
  from datetime import datetime
12
  import os # Added for environment detection
13
+ import torch # Added for Hugging Face model inference
14
 
15
  # 設置詳細日誌 - 在 Hugging Face Spaces 中只使用 StreamHandler
16
  logging.basicConfig(
 
166
  }
167
 
168
  def real_ai_analysis(image_url: str):
169
+ """真實 AI 分析 - 使用 Hugging Face 模型"""
170
  try:
171
+ log_analysis_step("模型載入", "嘗試載入 Hugging Face 模型...")
172
 
173
+ # 嘗試載入 Hugging Face 模型
174
+ try:
175
+ from transformers import AutoImageProcessor, AutoModelForImageClassification
176
+ from PIL import Image
177
+ import requests
178
+ from io import BytesIO
179
+
180
+ log_analysis_step("模型載入", "載入 Food101 模型...")
181
+
182
+ # 載入預訓練的 Food101 模型
183
+ processor = AutoImageProcessor.from_pretrained("nateraw/food101")
184
+ model = AutoModelForImageClassification.from_pretrained("nateraw/food101")
185
+
186
+ log_analysis_step("圖片處理", "下載並處理圖片...")
187
+
188
+ # 下載圖片
189
+ response = requests.get(image_url)
190
+ image = Image.open(BytesIO(response.content))
191
+
192
+ # 處理圖片
193
+ inputs = processor(image, return_tensors="pt")
194
+
195
+ log_analysis_step("模型推理", "進行食物識別...")
196
+
197
+ # 進行預測
198
+ with torch.no_grad():
199
+ outputs = model(**inputs)
200
+ logits = outputs.logits
201
+ predicted_class_id = logits.argmax(-1).item()
202
+ confidence = torch.softmax(logits, dim=-1).max().item()
203
+
204
+ # 獲取食物名稱
205
+ food_name = model.config.id2label[predicted_class_id]
206
+
207
+ log_analysis_step("識別完成", f"識別結果: {food_name} (信心度: {confidence:.1%})")
208
+
209
+ # 查詢營養資訊
210
+ nutrition_data = lookup_nutrition_data(food_name)
211
+
212
+ return {
213
+ "food_name": food_name,
214
+ "confidence": confidence * 100,
215
+ "weight": 150, # 模擬重量估算
216
+ "nutrition": nutrition_data.get("nutrition", {}),
217
+ "analysis_steps": [
218
+ "Hugging Face Food101 模型載入完成",
219
+ "圖片下載和預處理完成",
220
+ f"食物識別: {food_name}",
221
+ "營養資訊查詢完成"
222
+ ],
223
+ "mode": "real_hf_model"
224
+ }
225
+
226
+ except Exception as model_error:
227
+ log_analysis_step("模型載入", f"Hugging Face 模型載入失敗: {str(model_error)}")
228
+ log_analysis_step("模式切換", "切換到模擬模式")
229
+ return simulate_ai_analysis(image_url)
230
 
231
  except Exception as e:
232
  log_analysis_step("模型載入", f"模型載入失敗: {str(e)}")
requirements.txt CHANGED
@@ -4,8 +4,15 @@ uvicorn[standard]>=0.27.0
4
  gradio>=4.44.0
5
  pydantic>=2.5.0
6
 
 
 
 
 
 
 
7
  # Image processing
8
  Pillow>=10.3.0
 
9
 
10
  # HTTP requests
11
  requests>=2.31.0
@@ -13,6 +20,7 @@ httpx>=0.25.0
13
 
14
  # Data processing
15
  numpy>=1.24.0
 
16
 
17
  # CORS support
18
  python-multipart>=0.0.6
 
4
  gradio>=4.44.0
5
  pydantic>=2.5.0
6
 
7
+ # Hugging Face models
8
+ transformers>=4.35.0
9
+ torch>=2.0.0
10
+ torchvision>=0.15.0
11
+ diffusers>=0.24.0
12
+
13
  # Image processing
14
  Pillow>=10.3.0
15
+ opencv-python>=4.8.0
16
 
17
  # HTTP requests
18
  requests>=2.31.0
 
20
 
21
  # Data processing
22
  numpy>=1.24.0
23
+ pandas>=2.0.0
24
 
25
  # CORS support
26
  python-multipart>=0.0.6