prompt
This commit is contained in:
@@ -80,6 +80,33 @@ CLEANUP_CONFIG = {
|
||||
"interval": int(os.getenv("CLEANUP_INTERVAL_SECONDS", "600"))
|
||||
}
|
||||
|
||||
# 提示词配置 (Prompt Config)
|
||||
PROMPTS = {
|
||||
"translate": "请将以下描述翻译成简洁、精准的英文,用于图像分割模型(SAM)的提示词。直接返回英文,不要包含任何解释或其他文字。\n\n输入: {text}",
|
||||
"tarot_card_dual": """这是一张塔罗牌的两个方向:
|
||||
图1:原始方向
|
||||
图2:旋转180度后的方向
|
||||
|
||||
请仔细对比两张图片的牌面内容(文字方向、人物站立方向、图案逻辑):
|
||||
1. 识别这张牌的名字(中文)。
|
||||
2. 判断哪一张图片展示了正确的“正位”(Upright)状态。
|
||||
- 如果图1是正位,说明原图就是正位。
|
||||
- 如果图2是正位,说明原图是逆位。
|
||||
|
||||
请以JSON格式返回,包含 'name' 和 'position' 两个字段。
|
||||
例如:{'name': '愚者', 'position': '正位'} 或 {'name': '倒吊人', 'position': '逆位'}。
|
||||
不要包含Markdown代码块标记。""",
|
||||
"tarot_card_single": "这是一张塔罗牌。请识别它的名字(中文),并判断它是正位还是逆位。请以JSON格式返回,包含 'name' 和 'position' 两个字段。例如:{'name': '愚者', 'position': '正位'}。不要包含Markdown代码块标记。",
|
||||
"tarot_spread": "这是一张包含多张塔罗牌的图片。请根据牌的排列方式识别这是什么牌阵(例如:圣三角、凯尔特十字、三张牌等)。如果看不出明显的正规牌阵,请返回“不是正规牌阵”。请以JSON格式返回,包含 'spread_name' 和 'description' 两个字段。例如:{'spread_name': '圣三角', 'description': '常见的时间流占卜法'}。不要包含Markdown代码块标记。",
|
||||
"face_analysis": """请仔细观察这张图片中的人物头部/面部特写:
|
||||
1. 识别性别 (Gender):男性/女性
|
||||
2. 预估年龄 (Age):请给出一个合理的年龄范围,例如 "25-30岁"
|
||||
3. 简要描述:发型、发色、是否有眼镜等显著特征。
|
||||
|
||||
请以 JSON 格式返回,包含 'gender', 'age', 'description' 字段。
|
||||
不要包含 Markdown 标记。"""
|
||||
}
|
||||
|
||||
# API Tags (用于文档分类)
|
||||
TAG_GENERAL = "General Segmentation (通用分割)"
|
||||
TAG_TAROT = "Tarot Analysis (塔罗牌分析)"
|
||||
@@ -265,11 +292,12 @@ def translate_to_sam3_prompt(text: str) -> str:
|
||||
"""
|
||||
print(f"正在翻译提示词: {text}")
|
||||
try:
|
||||
prompt_template = PROMPTS["translate"]
|
||||
messages = [
|
||||
{
|
||||
"role": "user",
|
||||
"content": [
|
||||
{"text": f"请将以下描述翻译成简洁、精准的英文,用于图像分割模型(SAM)的提示词。直接返回英文,不要包含任何解释或其他文字。\n\n输入: {text}"}
|
||||
{"text": prompt_template.format(text=text)}
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -503,19 +531,7 @@ def recognize_card_with_qwen(image_path: str) -> dict:
|
||||
"content": [
|
||||
{"image": file_url}, # 图1 (原图)
|
||||
{"image": rotated_file_url}, # 图2 (旋转180度)
|
||||
{"text": """这是一张塔罗牌的两个方向:
|
||||
图1:原始方向
|
||||
图2:旋转180度后的方向
|
||||
|
||||
请仔细对比两张图片的牌面内容(文字方向、人物站立方向、图案逻辑):
|
||||
1. 识别这张牌的名字(中文)。
|
||||
2. 判断哪一张图片展示了正确的“正位”(Upright)状态。
|
||||
- 如果图1是正位,说明原图就是正位。
|
||||
- 如果图2是正位,说明原图是逆位。
|
||||
|
||||
请以JSON格式返回,包含 'name' 和 'position' 两个字段。
|
||||
例如:{'name': '愚者', 'position': '正位'} 或 {'name': '倒吊人', 'position': '逆位'}。
|
||||
不要包含Markdown代码块标记。"""}
|
||||
{"text": PROMPTS["tarot_card_dual"]}
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -527,7 +543,7 @@ def recognize_card_with_qwen(image_path: str) -> dict:
|
||||
"role": "user",
|
||||
"content": [
|
||||
{"image": file_url},
|
||||
{"text": "这是一张塔罗牌。请识别它的名字(中文),并判断它是正位还是逆位。请以JSON格式返回,包含 'name' 和 'position' 两个字段。例如:{'name': '愚者', 'position': '正位'}。不要包含Markdown代码块标记。"}
|
||||
{"text": PROMPTS["tarot_card_single"]}
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -562,7 +578,7 @@ def recognize_spread_with_qwen(image_path: str) -> dict:
|
||||
"role": "user",
|
||||
"content": [
|
||||
{"image": file_url},
|
||||
{"text": "这是一张包含多张塔罗牌的图片。请根据牌的排列方式识别这是什么牌阵(例如:圣三角、凯尔特十字、三张牌等)。如果看不出明显的正规牌阵,请返回“不是正规牌阵”。请以JSON格式返回,包含 'spread_name' 和 'description' 两个字段。例如:{'spread_name': '圣三角', 'description': '常见的时间流占卜法'}。不要包含Markdown代码块标记。"}
|
||||
{"text": PROMPTS["tarot_spread"]}
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -1034,7 +1050,8 @@ async def segment_face(
|
||||
image=image,
|
||||
prompt=final_prompt,
|
||||
output_base_dir=RESULT_IMAGE_DIR,
|
||||
qwen_model=QWEN_MODEL
|
||||
qwen_model=QWEN_MODEL,
|
||||
analysis_prompt=PROMPTS["face_analysis"]
|
||||
)
|
||||
except Exception as e:
|
||||
import traceback
|
||||
@@ -1268,6 +1285,27 @@ async def set_model(model: str = Form(...)):
|
||||
QWEN_MODEL = model
|
||||
return {"status": "success", "message": f"Model switched to {model}", "current_model": QWEN_MODEL}
|
||||
|
||||
@app.get("/admin/api/prompts", dependencies=[Depends(verify_admin)])
|
||||
async def get_prompts():
|
||||
"""
|
||||
Get all prompts
|
||||
"""
|
||||
return PROMPTS
|
||||
|
||||
@app.post("/admin/api/prompts", dependencies=[Depends(verify_admin)])
|
||||
async def update_prompts(
|
||||
key: str = Form(...),
|
||||
content: str = Form(...)
|
||||
):
|
||||
"""
|
||||
Update a specific prompt
|
||||
"""
|
||||
if key not in PROMPTS:
|
||||
raise HTTPException(status_code=400, detail="Invalid prompt key")
|
||||
|
||||
PROMPTS[key] = content
|
||||
return {"status": "success", "message": f"Prompt '{key}' updated"}
|
||||
|
||||
# ==========================================
|
||||
# 10. Main Entry Point (启动入口)
|
||||
# ==========================================
|
||||
|
||||
Reference in New Issue
Block a user