Files
GarbageCanCenter_Woer_face/scripts/restore-face-models.sh
T

52 lines
1.6 KiB
Bash
Executable File

#!/bin/sh
# 将 Git 中的小于 50MB 分片恢复为 SeetaFace6 识别模型。
set -eu
PROJECT_DIR=$(CDPATH= cd -- "$(dirname "$0")/.." && pwd)
MODEL_FILE="$PROJECT_DIR/app/src/main/assets/face_models/face_recognizer.csta"
PART_DIR="$PROJECT_DIR/model-parts"
PART_PATTERN="$PART_DIR/face_recognizer.csta.part-"
EXPECTED_SHA256="3cefce29d2ceb6fd95153d67c11f24ce08746e1877478bacaa5ae5d333a0a670"
sha256_file() {
if command -v sha256sum >/dev/null 2>&1; then
sha256sum "$1" | awk '{print $1}'
elif command -v shasum >/dev/null 2>&1; then
shasum -a 256 "$1" | awk '{print $1}'
else
echo "错误:系统缺少 sha256sum 或 shasum,无法校验模型。" >&2
return 1
fi
}
if [ -f "$MODEL_FILE" ]; then
CURRENT_SHA256=$(sha256_file "$MODEL_FILE")
if [ "$CURRENT_SHA256" = "$EXPECTED_SHA256" ]; then
echo "人脸识别模型已存在且校验通过。"
exit 0
fi
echo "检测到损坏或版本不匹配的人脸识别模型,将从分片重新恢复。"
fi
if ! ls "${PART_PATTERN}"* >/dev/null 2>&1; then
echo "错误:未找到人脸识别模型分片:${PART_PATTERN}*" >&2
exit 1
fi
mkdir -p "$(dirname "$MODEL_FILE")"
TEMP_FILE=$(mktemp "${MODEL_FILE}.tmp.XXXXXX")
trap 'rm -f "$TEMP_FILE"' EXIT HUP INT TERM
cat "${PART_PATTERN}"* > "$TEMP_FILE"
ACTUAL_SHA256=$(sha256_file "$TEMP_FILE")
if [ "$ACTUAL_SHA256" != "$EXPECTED_SHA256" ]; then
echo "错误:模型分片合并后的 SHA-256 校验失败。" >&2
echo "期望:$EXPECTED_SHA256" >&2
echo "实际:$ACTUAL_SHA256" >&2
exit 1
fi
mv "$TEMP_FILE" "$MODEL_FILE"
trap - EXIT HUP INT TERM
echo "人脸识别模型恢复完成:$MODEL_FILE"