fastapi==0.115.12 uvicorn[standard]==0.34.2 python-multipart==0.0.31 httpx==0.28.1 # 接口1:四庭七眼测量(worker 侧算法依赖) mediapipe==0.10.14 # MediaPipe Face Mesh(经典 Solutions API,模型内置) opencv-python==4.10.0.84 # 图片读取/处理 + solvePnP 姿态估计 Pillow==11.0.0 # 标注图生成(PNG 透明图层) numpy==1.26.4 # 必须 <2,否则 mediapipe 0.10.x import 崩溃 # 方案 B:头发分割(BiSeNet face-parsing) # 国内安装可走 Tsinghua 镜像(PyPI 的 linux wheel 即 CUDA 12.1 构建): # ./venv/bin/pip install torch==2.2.2 torchvision==0.17.2 -i https://pypi.tuna.tsinghua.edu.cn/simple/ # ⚠️ 本 worker 是 RTX 5090(sm_120/Blackwell),torch 2.2.2(cu121) 只编到 sm_90, # GPU 上跑算子会报 "no kernel image",代码已自动回退 CPU(方案B 仍可用)。 # 要真正用 5090 GPU,请换 torch cu128(≥2.7)+ 对应 torchvision,代码无需改。 torch==2.2.2 # 当前在 5090 上仅 CPU 可用;GPU 需 cu128(≥2.7) torchvision==0.17.2 # 接口2:C端生发(发际线预览) # MediaPipe Tasks(FaceLandmarker) 用已装的 mediapipe;新增 SegFormer 人脸分割: transformers==4.45.2 # SegFormer 人脸分割(jonathandinu/face-parsing,本地权重) # 接口3:B端生发(马克笔发际线检测) # ⚠️ 必须 0.24.x —— 0.25+ 强依赖 numpy>=2,会顶掉 mediapipe 需要的 numpy<2 scikit-image==0.24.0 # route_through_array(黑帽响应图上的 Dijkstra 最小路径) # 测试 pytest==8.3.3