52 lines
1.6 KiB
Bash
Executable File
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"
|