people-reading/backend/app/services/face_analyzer.py
2026-05-12 17:05:32 +08:00

76 lines
4.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from app.services.analyzer_common import DISCLAIMER, BaseAnalyzer
USER_PROMPT = (
"请分析这张单人正脸照片,生成中文面相娱乐报告。"
"必须先判断照片是否适合分析:是否单人、正脸、五官无遮挡、光线清晰。"
"必须覆盖脸型轮廓、三庭五眼、眉眼神态、鼻唇表达、气色状态、整体气质。"
"写作要求:"
"1. overall_summary 用 2 到 4 句话,像给用户本人看的开场结论,要贴近日常生活。"
"2. dimensions 中每个 interpretation 必须关联现实场景,例如学习专注、工作表达、社交沟通、情绪恢复、生活节奏。"
"3. 每个 advice 必须是今天或本周能做的小建议,不要空泛。"
"4. 不评价美丑,不做健康诊断,不判断年龄、种族、身份、财富、婚姻结局。"
"5. 如果照片不够正脸、多人、遮挡或不清晰,要把 quality_check.can_analyze 设为 false并说明原因。"
)
class FaceAnalyzer(BaseAnalyzer):
async def analyze(self, image_bytes: bytes, content_type: str) -> dict:
if not self.client:
return self._mock_report()
return await self._create_image_report(USER_PROMPT, image_bytes, content_type)
def _mock_report(self) -> dict:
return {
"quality_check": {"can_analyze": True, "reason": "mock mode", "confidence": 0.71},
"overall_summary": "这是一份娱乐向面相报告。整体看,你给人的第一感觉偏稳,适合用清楚、温和的表达建立信任。最近如果在学习、工作或关系里需要推进事情,先把状态收拾利落,会更容易进入节奏。",
"dimensions": [
{
"name": "脸型轮廓",
"observations": ["整体轮廓较均衡", "面部线条有稳定感"],
"interpretation": "这类轮廓象征做事方式偏稳,现实里可能更适合长期推进,而不是靠一阵热情冲刺。",
"confidence": 0.68,
"advice": "这周选一个最重要的目标,每天只推进一个小动作。",
},
{
"name": "三庭五眼",
"observations": ["比例观感较协调", "中庭存在一定表达重心"],
"interpretation": "比例协调象征你在计划和表达之间有平衡感。学习或工作中,适合先梳理框架,再输出观点。",
"confidence": 0.64,
"advice": "开会或沟通前,先写下 3 个要点,避免临场发散。",
},
{
"name": "眉眼神态",
"observations": ["眉眼状态较集中", "眼神表达偏内敛"],
"interpretation": "眉眼偏集中,象征观察力不错。你可能容易先看懂气氛,再决定怎么表达。",
"confidence": 0.66,
"advice": "有想法时别只观察,试着先说一个小判断。",
},
{
"name": "鼻唇表达",
"observations": ["表达区域较清晰", "唇部状态偏平和"],
"interpretation": "这象征你适合用稳定语气处理分歧。关系里,不必一次讲完所有委屈,先说最具体的一件事就好。",
"confidence": 0.61,
"advice": "本周沟通需求时,用“我希望下次可以……”开头。",
},
{
"name": "气色状态",
"observations": ["画面气色受光线影响", "整体状态可读性尚可"],
"interpretation": "气色象征当下状态。照片里呈现出的状态提醒你,近期要少一点硬撑,多一点规律恢复。",
"confidence": 0.55,
"advice": "今晚把睡前 30 分钟留给放松,不再继续刷任务。",
},
{
"name": "整体气质",
"observations": ["气质偏克制", "亲和感与边界感并存"],
"interpretation": "整体气质象征你适合走可靠路线。事业或学习里,稳定交付比强行表现更能给你加分。",
"confidence": 0.67,
"advice": "把一个小成果整理出来发给该看到的人。",
},
],
"strengths": ["容易给人可靠感", "适合先观察再行动", "沟通时有稳定气场"],
"challenges": ["想得多时表达会慢半拍", "容易把疲惫藏起来"],
"suggestions": ["生活上先整理作息和精神状态", "学习成长上先列框架再输出", "事业工作上用稳定交付建立信任", "关系沟通上把需求说具体"],
"lucky_keywords": ["稳住气场", "先说重点", "整理状态"],
"disclaimer": DISCLAIMER,
}