Files
juzi/reference/facepp-skinanalyze/examples/call_skinanalyze_3view.sh
T
2026-09-26 16:23:59 +08:00

51 lines
2.1 KiB
Bash
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.
#!/usr/bin/env bash
# Face++ skinanalyze_pro 三视图调用(正脸 + 左右侧脸 → 下颌线)
# 用法: call_skinanalyze_3view.sh <正脸图> <左侧脸图> <右侧脸图> [输出json]
set -euo pipefail
set -a; source "${CREDENTIALS_ENV:-$HOME/.openclaw/credentials.env}"; set +a
FRONT=${1:?用法: call_skinanalyze_3view.sh <正脸图> <左侧脸图> <右侧脸图> [输出json]}
LEFT=${2:?缺左侧脸图}
RIGHT=${3:?缺右侧脸图}
OUT=${4:-/tmp/skinanalyze_3view_result.json}
retry() {
local n=0
until [ "$n" -ge 3 ]; do
RESP=$(curl -s "${FACEPP_SKINANALYZE_URL:-https://api-cn.faceplusplus.com/facepp/v1/skinanalyze_pro}" \
-F api_key=$FACEPP_API_KEY -F api_secret=$FACEPP_API_SECRET \
-F image_file=@"$FRONT" \
-F left_side_image_file=@"$LEFT" \
-F right_side_image_file=@"$RIGHT" \
-F "return_side_results=jawline_info" \
-F "return_maps=water_area,red_area,brown_area,texture_enhanced_pores,texture_enhanced_blackheads,texture_enhanced_oily_area,texture_enhanced_lines,rough_area,roi_outline_map,texture_enhanced_bw" \
-F "return_marks=wrinkle_mark,melanin_mark,dark_circle_outline")
if ! echo "$RESP" | grep -q 'error_message'; then
echo "$RESP" > "$OUT"
return 0
fi
n=$((n+1))
echo "第${n}次失败: $(echo "$RESP" | head -c 120),${n}0秒后重试..." >&2
sleep $((n*10))
done
echo "$RESP" > "$OUT"
return 1
}
retry || { echo "三次重试均失败" >&2; exit 1; }
python3 - "$OUT" <<'PY'
import json, sys
d = json.load(open(sys.argv[1]))
assert 'error_message' not in d, d.get('error_message')
r = d['result']; si = r['score_info']
ls = d.get('left_side_result', {}).get('left_jawline_info', {})
rs = d.get('right_side_result', {}).get('right_jawline_info', {})
print('OK skin_age:', r['skin_age']['value'],
'| total:', si['total_score'],
'| 左下颌线:', ls.get('left_jawline_angle'), '°(q%s)' % ls.get('left_jawline_quality'),
'| 右下颌线:', rs.get('right_jawline_angle'), '°(q%s)' % rs.get('right_jawline_quality'),
'| 标准区间 116-120°')
print('完整结果已存', sys.argv[1])
PY