更新记录
1.0.0(2026-06-19)
-Android / iOS / HarmonyOS 三端同一套 API。
-全离线推理,支持人脸检测、关键点定位、特征提取、活体检测、年龄/性别/口罩/眼睛/姿态/质量评估、1:1 比对、1:N 识别、人脸库管理。
平台兼容性
uni-app(4.18)
| Vue2 |
Vue3 |
Chrome |
Safari |
app-vue |
app-nvue |
Android |
iOS |
鸿蒙 |
| √ |
√ |
× |
× |
√ |
√ |
5.0 |
√ |
4.18 |
| 微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
小红书小程序 |
快应用-华为 |
快应用-联盟 |
| × |
× |
× |
× |
× |
× |
- |
× |
- |
- |
- |
- |
其他
ly028-OffFace 离线人脸检测识别特真提取
📱 下载体验 APK
基于 SeetaFace6 的人脸检测 UTS 原生插件,Android / iOS / HarmonyOS Next 三端完美支持,导出函数完全一致,一套代码三端运行。全离线运行,无需网络连接,数据不出设备。
特性
- 🔒 全离线 — 本地推理,无需联网,人脸数据不出设备
- 📱 三端完美一致 — Android / iOS / HarmonyOS Next 导出 API 完全相同,调用端无平台差异
- 🎯 30+ 个导出函数 — 检测、关键点、特征提取、活体、年龄、性别、口罩、眼睛、姿态、质量、1:1 比对、1:N 识别、人脸库管理
- 🧩 UTS 插件 — uni-app/uni-app x 原生插件,按需集成
平台兼容
| 平台 |
最低版本 |
架构 |
| Android |
7.0 (API 21) |
arm64-v8a, armeabi-v7a |
| iOS |
12.0 |
arm64 |
| HarmonyOS Next |
API 9+ |
arm64-v8a |
集成与调试
HBuilderX 自定义基座运行
- 插件市场购买插件后,在
manifest.json → App 原生插件配置中选择 ly028-OffFace
- 选择需要使用的模块
- 自定义调试基座:菜单栏 → 运行 → 运行到手机或模拟器 → 制作自定义调试基座
- 制作完成后,选择自定义基座运行到真机即可调试所有功能
首次使用请确保已关联 uni-app 开发者证书,自定义基座有效期为 7 天,过期后需重新制作。
离线打包
插件为原生代码插件,离线打包需自行集成原生依赖。
快速开始
import * as OffFace from '@/uni_modules/ly028-OffFace'
// 1. 异步初始化引擎
OffFace.initFaceEngineAsync(null, null, (res) => {
const initResult = JSON.parse(res)
if (initResult.code === 0) {
console.log('引擎初始化成功')
}
})
// 2. 异步检测人脸
OffFace.detectFileAsync('/path/to/image.jpg', (res) => {
const result = JSON.parse(res)
if (result.code === 0 && result.data.faceCount > 0) {
console.log('检测到', result.data.faceCount, '张人脸')
console.log('第一个人脸:', result.data.faces[0])
}
})
// 3. 释放引擎
OffFace.releaseEngine()
全量 API 参考
引擎生命周期
| API |
说明 |
initFaceEngineAsync(modelBaseUrl?, modelPath?, callback) |
初始化引擎,结果通过 callback 返回 |
releaseEngine() |
释放引擎 |
setAppLanguage(language) |
设置语言(zh-Hans / en) |
人脸检测
| API |
说明 |
detectFace(imageData, width, height, channels) |
从 RGBA 像素数组检测 |
detectWithOptions(imageData, w, h, ch, minSize, threshold, flags) |
全功能检测(flags 按位组合) |
detectFileAsync(filePath, callback) |
异步文件检测,结果通过 callback 返回 |
detectFileWithOptionsAsync(filePath, options, callback) |
带选项异步文件检测 |
detectTestImage(width, height) |
测试图像检测 |
flags 位定义:
| 位 |
功能 |
| 1 |
关键点 |
| 2 |
年龄(需额外模型) |
| 4 |
性别 |
| 8 |
口罩 |
| 16 |
眼睛状态 |
| 32 |
姿态角 |
| 64 |
活体 |
| 128 |
质量评估 |
活体检测
| API |
说明 |
detectFileLivenessAsync(filePath, callback) |
异步活体检测 |
checkLivenessReadyAsync(callback) |
异步检查活体模型是否就绪 |
返回 liveness 值:real(真实)、spoof(伪造)、fuzzy(模糊)、detecting(检测中)
模块管理
| API |
说明 |
getModelStatusAsync(callback) |
异步获取模型下载状态 |
getMissingModels() |
获取缺失模型列表 |
downloadModelAsync(name, baseUrl, onResult) |
异步下载模型 |
getLoadStatus() |
获取模块加载状态 |
getModelLoadStatusByFilesAsync(callback) |
异步按文件查加载状态 |
ensureModuleLoaded(moduleName) |
确保模块已加载 |
ensureModulesLoaded(names) |
批量确保加载 |
loadModule(name, modelDir) |
手动加载模块 |
onDownloadProgress(callback) |
监听下载进度 |
人脸识别(FaceDatabase)
| API |
说明 |
initFaceDatabaseAsync(modelType, callback) |
异步初始化人脸库(light / std) |
switchFaceDatabaseAsync(modelType, callback) |
异步切换活跃模型 |
getFaceDatabaseStatusAsync(callback) |
异步获取双库状态 |
特征提取
| API |
说明 |
extractFeatureAsync(imageData, width, height, landmarks, callback) |
异步提取人脸特征向量 |
人脸注册
| API |
说明 |
registerFaceAsync(imageData, w, h, landmarks, userId, callback) |
异步注册人脸 |
registerFaceByFileAsync(filePath, landmarks, userId?, callback) |
从文件注册(空 userId 自动生成) |
updateFaceByFileAsync(filePath, landmarks, userId, callback) |
更新已注册人脸 |
1:N 识别
| API |
说明 |
identifyFaceAsync(imageData, w, h, landmarks, callback) |
异步最佳匹配识别 |
identifyFaceByFileAsync(filePath, landmarks, callback) |
从文件识别 |
identifyTopNAsync(imageData, w, h, landmarks, n, callback) |
异步 Top-N 识别 |
identifyTopNByFileAsync(filePath, landmarks, topN, callback) |
从文件 Top-N |
人脸管理
| API |
说明 |
deleteFaceAsync(userId, callback) |
异步删除人脸 |
clearFacesAsync(callback) |
异步清空所有人脸 |
getFaceCountAsync(callback) |
异步获取人脸数 |
exportFeaturesAsync(callback) |
异步导出所有人脸特征 |
compareFacesAsync(feature1, feature2, callback) |
异步 1:1 特征比对 |
配置
| API |
说明 |
setMinFaceSize(size) |
最小人脸像素(默认 40) |
setDetectThreshold(threshold) |
检测阈值(默认 0.9) |
返回值格式
所有 API 返回统一 JSON 信封:
// 成功
{"code": 0, "data": {...}}
// 失败
{"code": 1, "subCode": 500, "msg": "错误描述"}
检测结果结构
{
"code": 0,
"data": {
"faceCount": 1,
"imageWidth": 1920,
"imageHeight": 1080,
"faces": [{
"rect": {"x": 100, "y": 200, "width": 300, "height": 400},
"score": 0.98,
"landmarks": [{"x": 150, "y": 250}, ...],
"age": 25,
"gender": "male",
"mask": false,
"maskScore": 0.02,
"eyeLeft": "open",
"eyeRight": "open",
"yaw": -5.3, "pitch": 2.1, "roll": 1.0,
"liveness": "real",
"quality": {
"brightness": {"level": "high", "score": 0.95},
"clarity": {"level": "medium", "score": 0.65},
"integrity": {"level": "high", "score": 0.90}
}
}]
}
}
识别结果结构
{"code": 0, "data": {"found": true, "userId": "user_abc123", "similarity": 0.87}}
Top-N 结果结构
{"code": 0, "data": {"count": 3, "topN": 5, "results": [
{"userId": "user_abc", "similarity": 0.87},
{"userId": "user_def", "similarity": 0.72}
], "duplicates": [], "duplicateThreshold": 0.6}}
注意事项
- 引擎只能初始化一次,释放后可再次初始化
- 人脸库初始化选择:
light(512 维,轻量)、std(1024 维,需下载 face_recognizer.csta 约 98MB)
- 活体检测需要
fas_first.csta 和 fas_second.csta 两个模型
- 年龄检测为热加载模块,需额外下载
age_predictor.csta(约 32MB)
- 并发检测内部有互斥锁,同一时间只允许一次检测
- 建议图片最大尺寸 1280px,超尺寸自动缩放
隐私声明
- 本插件不采集任何用户数据
- 所有人脸检测与识别在设备端离线完成
- 无需网络权限,不上传任何图像或特征数据
鸿蒙实测图
iOS 实测图
体验
📱 下载体验 APK
许可