#!/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"