This commit is contained in:
xsl
2026-09-26 16:23:59 +08:00
parent 5957ef04fc
commit ab9a39a8f3
11 changed files with 683 additions and 0 deletions
@@ -0,0 +1,17 @@
#!/usr/bin/env bash
# Face++ skinanalyze_pro 标准调用
# 用法: call_skinanalyze.sh <图片路径> [输出json路径]
set -euo pipefail
set -a; source "${CREDENTIALS_ENV:-$HOME/.openclaw/credentials.env}"; set +a
IMG=${1:?用法: call_skinanalyze.sh <图片路径> [输出json]}
OUT=${2:-/tmp/skinanalyze_result.json}
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=@"$IMG" \
-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" | tee "$OUT"
python3 - "$OUT" <<'PY'
import json,sys
d=json.load(open(sys.argv[1]))
assert 'error_message' not in d, d.get('error_message')
print('OK, top keys:', ', '.join(sorted(d.keys())[:10]))
PY
@@ -0,0 +1,50 @@
#!/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
Binary file not shown.

After

Width:  |  Height:  |  Size: 809 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 790 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 736 KiB