基于 Vue 3 + Capacitor 的 Android 混合应用:自拍相机 + 画廊 + 设置持久化。
AI 默认启用(不提供开关),且不做后台自动分析。分析由用户在拍照后主动触发,结果可选择是否采纳并写入本机分析记录。
- 前置摄像头:默认按“自拍”分析(面部/痘痘/肤况现象/护理建议,非医疗建议)
- 后置摄像头:默认按“物品”分析(物品识别 + 人民币 CNY 估值区间 + 比价关键词)
- 不让 AI 自行判断“人还是物”:前后置决定调用哪个接口
- 上传前会在本地先压缩图片,再上传到 AI 服务(减少流量、提升速度)
- 拍照预览页:点“自拍分析 / 物品分析”触发分析;点“采纳并保存”才会把结果写入画廊的 AI 记录
- 画廊页:在画廊内查看 AI 记录与详情,并可对单张照片重新分析
仓库内提供服务端入口:server/index.mjs,用于接收图片并转发到上游 OpenAI 兼容接口。
-
POST /v1/selfie- 请求体:图片二进制
Content-Type:建议image/jpeg/image/png/image/webp- 返回:
{ ok, raw, parsed, parseError, usage } parsed结构:summary: stringselfie: { acneLevel, acneAreas, skinFindings, advice, disclaimer }
-
POST /v1/value- 请求体:图片二进制
Content-Type:同上- 返回:
{ ok, raw, parsed, parseError, usage } parsed结构:summary: stringitem: { name, condition, valueCny: { min, max }, basis, searchKeywords }
-
GET /v1/health- 返回:
{ ok: true }
- 返回:
服务端通过 Chat Completions 的 tool/function calling 获取结构化输出。上游需要支持返回 tool_calls(或在 reasoning_content/content 中返回 tool_calls)。
PORT:监听端口(默认8787)ALLOW_ORIGIN:CORS 允许来源(默认*)UPSTREAM_BASE_URL:上游 OpenAI 兼容地址(示例:https://api.openai.com/v1)UPSTREAM_API_KEY:上游 API KeyUPSTREAM_MODEL:上游模型名MAX_BODY_BYTES:最大图片大小(默认10485760)UPSTREAM_TIMEOUT_MS:上游超时(默认60000)
$env:UPSTREAM_BASE_URL="https://api.openai.com/v1"
$env:UPSTREAM_API_KEY="sk-..."
$env:UPSTREAM_MODEL="gpt-4.1-mini" # 需支持 tools/function calling
node server/index.mjs# 自拍分析
Invoke-RestMethod -Method Post `
-Uri "http://127.0.0.1:8787/v1/selfie" `
-ContentType "image/jpeg" `
-InFile ".\test.jpg"
# 物品估值
Invoke-RestMethod -Method Post `
-Uri "http://127.0.0.1:8787/v1/value" `
-ContentType "image/jpeg" `
-InFile ".\test.jpg"