适配内网仓库模型分片

This commit is contained in:
FinleyHsu
2026-07-29 12:07:35 +08:00
parent d15802fb2b
commit c4d1406a2c
12 changed files with 66 additions and 5 deletions
-1
View File
@@ -1 +0,0 @@
app/src/main/assets/face_models/*.csta filter=lfs diff=lfs merge=lfs -text
+2
View File
@@ -1,4 +1,5 @@
.DS_Store .DS_Store
._codex_tmp/
.idea/ .idea/
.gradle/ .gradle/
*.iml *.iml
@@ -9,3 +10,4 @@ sdk-demo/
*.apk *.apk
*.ap_ *.ap_
keystore/ keystore/
app/src/main/assets/face_models/face_recognizer.csta
+10 -1
View File
@@ -37,15 +37,24 @@ build.sh 无 Gradle 手动构建脚本
- `platforms/android-28/android.jar` - `platforms/android-28/android.jar`
- `build-tools/34.0.0` - `build-tools/34.0.0`
- JDK 8 或兼容 `javac --release 8` 的 JDK - JDK 8 或兼容 `javac --release 8` 的 JDK
- Git LFS(仓库中的 SeetaFace6 `.csta` 模型通过 LFS 管理)
- Android SDK platform-tools,用于 `adb install` - Android SDK platform-tools,用于 `adb install`
内网仓库限制单文件最大 50MB,因此约 98MB 的
`face_recognizer.csta` 保存为 `model-parts/` 下的四个分片。
`build.sh` 会在编译前自动校验 SHA-256 并恢复完整模型,无需手动合并。
## 构建 APK ## 构建 APK
```bash ```bash
bash build.sh bash build.sh
``` ```
如果只需要恢复或校验人脸模型,可单独执行:
```bash
bash scripts/restore-face-models.sh
```
构建产物: 构建产物:
```text ```text
Binary file not shown.
@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3cefce29d2ceb6fd95153d67c11f24ce08746e1877478bacaa5ae5d333a0a670
size 102551956
+3
View File
@@ -42,6 +42,9 @@ echo "Platform: android-28"
echo "Project: $PROJECT" echo "Project: $PROJECT"
echo "" echo ""
# ---- 恢复超过 Git 单文件限制的人脸模型 ----
"$PROJECT/scripts/restore-face-models.sh"
# ---- Debug 签名证书 ---- # ---- Debug 签名证书 ----
if [ ! -f "$KEYSTORE" ]; then if [ ! -f "$KEYSTORE" ]; then
echo "未找到 debug keystore,正在生成: $KEYSTORE" echo "未找到 debug keystore,正在生成: $KEYSTORE"
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+51
View File
@@ -0,0 +1,51 @@
#!/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"