leonsimon23 commited on
Commit
995459b
·
verified ·
1 Parent(s): 562efa6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +49 -44
app.py CHANGED
@@ -16,16 +16,14 @@ GEMINI_API_URL = "https://generativelanguage.googleapis.com/v1beta/models/gemini
16
  ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}
17
 
18
  def allowed_file(filename):
19
- return '.' in filename and \
20
- filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
21
 
22
- # 优化图像函数,现在接受字节数据作为输入
23
  def optimize_image(image_bytes, max_size=(1024, 1024), quality=85):
24
  """优化图像大小和质量"""
25
  try:
26
  # 使用 io.BytesIO 将字节数据转换为文件对象,供 Pillow 使用
27
  img = Image.open(io.BytesIO(image_bytes))
28
-
29
  if img.mode in ('RGBA', 'LA'):
30
  background = Image.new('RGB', img.size, (255, 255, 255))
31
  if img.mode == 'RGBA':
@@ -43,63 +41,71 @@ def optimize_image(image_bytes, max_size=(1024, 1024), quality=85):
43
  return img_byte_arr.getvalue()
44
  except Exception as e:
45
  print(f"Image optimization error: {e}")
46
- # 优化失败,返回原始字节数据
47
- return image_bytes
48
 
49
- # call_gemini_api 函数
50
  def call_gemini_api(text_content=None, image_data=None):
51
  """调用Gemini API进行分析"""
52
-
53
  if not GEMINI_API_KEY:
54
  return {"error": "未配置Gemini API密钥,请设置环境变量GEMINI_API_KEY"}
55
-
56
  system_prompt = """你是一位经验丰富的皮肤科专家医生,具有多年的临床诊疗经验。请基于提供的信息进行专业的皮肤病分析。
57
 
58
- 分析要求:
59
- 1. 仔细观察皮肤病变的形态、颜色、分布、边界等特征
60
- 2. 结合患者描述的症状和病史
61
- 3. 提供可能的诊断方向(按可能性大小排序)
62
- 4. 给出详细的诊疗建议
63
- 5. 必要时建议进一步检查
64
- 6. 提醒患者注意事项
 
 
 
 
 
 
 
 
 
 
 
65
 
66
- 请按以下格式回复:
67
 
68
- ## 🔍 图像观察分析
69
- [详细描述观察到的皮肤病变特征]
70
 
71
- ## 📋 症状综合评估
72
- [结合文字描述的症状分析]
73
 
74
- ## 🎯 可能诊断
75
- 1. **最可能诊断**: [诊断名称] - 可能性: X%
76
- - 依据: [具体理由]
77
-
78
- 2. **次要考虑**: [其他可能诊断]
79
 
80
- ## 💊 治疗建议
81
- ### 药物治疗
82
- - [具体用药建议]
83
 
84
- ### 生活护理
85
- - [日常护理要点]
86
 
87
- ## 🏥 进一步检查建议
88
- [如需要其他检查,请列出]
89
 
90
- ## ⚠️ 注意事项
91
- [重要提醒和注意事项]
92
 
93
- ---
94
- **免责声明**: 此分析仅供临床参考,最终诊断需结合完整病史、体格检查等综合判断。建议患者及时就医,接受专业医师诊疗。"""
 
 
 
 
 
 
 
 
 
 
95
 
96
  parts = []
97
-
98
  if text_content:
99
  parts.append({"text": f"{system_prompt}\n\n患者症状描述:{text_content}"})
100
  else:
101
  parts.append({"text": system_prompt + "\n\n请基于图像进行分析。"})
102
-
103
  if image_data:
104
  image_base64 = base64.b64encode(image_data).decode('utf-8')
105
  parts.append({
@@ -108,7 +114,7 @@ def call_gemini_api(text_content=None, image_data=None):
108
  "data": image_base64
109
  }
110
  })
111
-
112
  request_body = {
113
  "contents": [
114
  {
@@ -140,12 +146,12 @@ def call_gemini_api(text_content=None, image_data=None):
140
  }
141
  ]
142
  }
143
-
144
  headers = {
145
  'Content-Type': 'application/json',
146
  'x-goog-api-key': GEMINI_API_KEY
147
  }
148
-
149
  try:
150
  response = requests.post(
151
  GEMINI_API_URL,
@@ -180,7 +186,6 @@ def index():
180
  @app.route('/analyze', methods=['POST'])
181
  def analyze():
182
  """分析皮肤图像和症状的API端点"""
183
-
184
  try:
185
  text_content = request.form.get('text', '').strip()
186
  image_data = None
@@ -237,4 +242,4 @@ if __name__ == '__main__':
237
  print("⚠️ 警告: 未设置GEMINI_API_KEY环境变量")
238
  print(" 请设置环境变量: export GEMINI_API_KEY=your_api_key")
239
  port = int(os.environ.get('PORT', 7860))
240
- app.run(host='0.0.0.0', port=port, debug=False)
 
16
  ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}
17
 
18
  def allowed_file(filename):
19
+ return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
 
20
 
 
21
  def optimize_image(image_bytes, max_size=(1024, 1024), quality=85):
22
  """优化图像大小和质量"""
23
  try:
24
  # 使用 io.BytesIO 将字节数据转换为文件对象,供 Pillow 使用
25
  img = Image.open(io.BytesIO(image_bytes))
26
+
27
  if img.mode in ('RGBA', 'LA'):
28
  background = Image.new('RGB', img.size, (255, 255, 255))
29
  if img.mode == 'RGBA':
 
41
  return img_byte_arr.getvalue()
42
  except Exception as e:
43
  print(f"Image optimization error: {e}")
44
+ return image_bytes # 优化失败,返回原始字节数据
 
45
 
 
46
  def call_gemini_api(text_content=None, image_data=None):
47
  """调用Gemini API进行分析"""
 
48
  if not GEMINI_API_KEY:
49
  return {"error": "未配置Gemini API密钥,请设置环境变量GEMINI_API_KEY"}
50
+
51
  system_prompt = """你是一位经验丰富的皮肤科专家医生,具有多年的临床诊疗经验。请基于提供的信息进行专业的皮肤病分析。
52
 
53
+ 分析要求:
54
+
55
+ 仔细观察皮肤病变的形态、颜色、分布、边界等特征
56
+
57
+ 结合患者描述的症状和病史
58
+
59
+ 提供可能的诊断方向(按可能性大小排序)
60
+
61
+ 给出详细的诊疗建议
62
+
63
+ 必要时建议进一步检查
64
+
65
+ 提醒患者注意事项
66
+ 请按以下格式回复:
67
+
68
+ 🔍 图像观察分析
69
+
70
+ [详细描述观察到的皮肤病变特征]
71
 
72
+ 📋 症状综合评估
73
 
74
+ [结合文字描述的症状分析]
 
75
 
76
+ 🎯 可能诊断
 
77
 
78
+ 最可能诊断: [诊断名称] - 可能性: X%
 
 
 
 
79
 
80
+ 依据: [具体理由]
 
 
81
 
82
+ 次要考虑: [其他可能诊断]
 
83
 
84
+ 💊 治疗建议
85
+ 药物治疗
86
 
87
+ [具体用药建议]
 
88
 
89
+ 生活护理
90
+
91
+ [日常护理要点]
92
+
93
+ 🏥 进一步检查建议
94
+
95
+ [如需要其他检查,请列出]
96
+
97
+ ⚠️ 注意事项
98
+ [重要提醒和注意事项]
99
+
100
+ 免责声明: 此分析仅供临床参考,最终诊断需结合完整病史、体格检查等综合判断。建议患者及时就医,接受专业医师诊疗。"""
101
 
102
  parts = []
103
+
104
  if text_content:
105
  parts.append({"text": f"{system_prompt}\n\n患者症状描述:{text_content}"})
106
  else:
107
  parts.append({"text": system_prompt + "\n\n请基于图像进行分析。"})
108
+
109
  if image_data:
110
  image_base64 = base64.b64encode(image_data).decode('utf-8')
111
  parts.append({
 
114
  "data": image_base64
115
  }
116
  })
117
+
118
  request_body = {
119
  "contents": [
120
  {
 
146
  }
147
  ]
148
  }
149
+
150
  headers = {
151
  'Content-Type': 'application/json',
152
  'x-goog-api-key': GEMINI_API_KEY
153
  }
154
+
155
  try:
156
  response = requests.post(
157
  GEMINI_API_URL,
 
186
  @app.route('/analyze', methods=['POST'])
187
  def analyze():
188
  """分析皮肤图像和症状的API端点"""
 
189
  try:
190
  text_content = request.form.get('text', '').strip()
191
  image_data = None
 
242
  print("⚠️ 警告: 未设置GEMINI_API_KEY环境变量")
243
  print(" 请设置环境变量: export GEMINI_API_KEY=your_api_key")
244
  port = int(os.environ.get('PORT', 7860))
245
+ app.run(host='0.0.0.0', port=port, debug=False)