更新记录
1.2.0(2026-10-16) 下载此版本
- 模型与 face-api.js 不再随插件分发:改为纯离线方案,需宿主自行下载并放到项目根
/static/face-models/下(见 readme「准备模型文件」) - 组件读取路径写死为项目根 static:
/static/face-models/face-api/face-api.min.js与/static/face-models/models/ - 插件
static/仅保留组件 UI 图片(icon/引导图/结果图),宿主工程不再「零配置」 assetBase语义收窄为「模型资源根路径」(不再影响组件图片),默认读取项目根/static/face-models/
1.1.0(2026-10-12) 下载此版本
- 架构重写:从「web-view 内嵌 H5」改为 renderjs,检测逻辑在组件的 webview 层直接运行
- 不再需要独立的 H5 工程与构建产物(已移除
hybrid/),项目结构回归纯 uni-app - 模型、图片、face-api.js 浏览器版统一内置到插件
static/,宿主工程零配置 - 新增
assetBase属性,可显式指定资源根路径 - 新增
back事件(结果页返回 / 倒计时结束) - 移除
h5BaseUrl属性(renderjs 版无需 H5 部署地址) - 平台支持:App(app-vue) 与 H5;不支持小程序、nvue、uni-app x
1.0.4(2026-10-10) 下载此版本
- 修复插件市场下载包不完整的问题:移除包内与根目录重名的模型说明文件(hybrid/html/livedetect/models/readme.md),规避市场端重打包时误将 models 目录当作插件根目录的异常
- 该文件仅为模型介绍文档,face-api.js 运行时不加载它,插件功能无任何变化
平台兼容性
uni-app(5.0)
| Vue2 | Vue2插件版本 | Vue3 | Vue3插件版本 | Chrome | Chrome插件版本 | Safari | Safari插件版本 | app-vue | app-vue插件版本 | app-nvue | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | 1.0.0 | √ | 1.0.0 | √ | 1.0.0 | √ | 1.0.0 | √ | 1.0.0 | - | √ | 1.0.0 | √ | 1.0.0 | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(5.0)
| Chrome | Chrome插件版本 | Safari | Safari插件版本 | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|---|---|---|---|
| √ | 1.0.0 | √ | 1.0.0 | √ | 1.0.0 | √ | 1.0.0 | - | - |
Rui-faceVerify 人脸检测、人脸识别、活体检测与人证比对
一款面向 uni-app 的人脸活体检测 + 人证核身组件:先通过摄像头引导用户完成指定动作,判定操作者为「真人」;再可选地将抓拍人像连同姓名、身份证号提交给业务方自己的核验接口,完成「人证一致」比对。
检测算法基于 face-api.js,借助 renderjs 在组件所在的 webview 层直接运行——不依赖任何原生 SDK、不内嵌 web-view,全流程在设备端本地离线推理,人脸画面不经过任何第三方。
插件自身的 UI 图片随插件内置;face-api.js 与模型不随插件分发,需按下文「准备模型文件」放到项目根
static/。
功能介绍
动作活体检测
- 支持 张嘴、眨眼、左转头、右转头、点头 5 种动作
- 动作序列自由配置(
actions),按顺序逐个引导,全部通过才算活体通过 - 内置光线、距离、正对屏幕等实时提示;动作切换时抛出
action事件,便于自定义语音或文案
两种认证模式
| 模式 | 说明 |
|---|---|
liveness |
纯活体:只做动作活体检测,通过后直接出结果 |
identity |
人证核身:活体通过后,自动发起人证一致性比对 |
人证比对(接口零硬编码)
- 插件不内置任何服务器地址,比对接口由业务方通过
verifyApi自行配置 - 活体通过后向该接口发起
POST(application/json):{ realName, idCard, faceImage } - 约定式契约:返回
{ success: true | false }即判定通过 / 不通过 - 支持
token鉴权(请求头Authorization: Bearer <token>) - 提供
test测试模式:不调用真实接口,本地模拟成功,便于快速联调
结果与回调
- 无论哪种模式,均回传抓拍人像(
data:image/png;base64,...),业务方可自行入库或二次核验 - 通过
result/success/fail/action/error/back事件回传全流程状态 - 结果页提供 5 秒自动返回倒计时,也可手动返回
接入与技术特性
- 引入即用:
uni_modules+ easycom,模板中直接写<Rui-faceVerify/>,无需 import 与注册 - 无原生依赖:renderjs 在 webview 层运行,不需要任何原生插件
- 本地离线:模型加载与推理均在设备端完成
- 可调可换:动作阈值与页面文案集中在
common/faceConfig.js,可按业务调整 - 隐私友好:页面展示的姓名、身份证号自动脱敏
支持的平台
| 平台 | 支持 | 说明 |
|---|---|---|
| App (app-vue) | ✅ | renderjs 在 webview 层采集摄像头并运行 face-api.js |
| H5 | ✅ | 浏览器环境,需 HTTPS 才能调起摄像头 |
| 小程序 | ❌ | renderjs 不支持,且本地算法资源受限 |
| nvue / uni-app x | ❌ | 非 webview 渲染,renderjs 不可用 |
准备模型文件(必读)
本插件不自带任何模型文件,采用纯离线方案:face-api.js 浏览器版与模型均由宿主工程自行放置。
请下载配套示例工程,把其根目录下的 static/face-models/ 整个目录拷贝到你的项目根目录 static/ 下,并保持如下目录结构(插件代码读取路径已写死,目录与文件名均不可修改):
static/
└── face-models/
├── face-api/
│ └── face-api.min.js
└── models/
├── tiny_face_detector_model-weights_manifest.json
├── tiny_face_detector_model-shard1
├── face_landmark_68_model-weights_manifest.json
└── face_landmark_68_model-shard1
注意:模型放在项目根
static/,不是插件uni_modules/Rui-faceVerify/static/。若模型必须放在其他位置,可通过assetBase属性显式指定根路径。
快速开始
组件位于 uni_modules 下,无需 import、无需注册,直接在模板中使用:
<template>
<Rui-faceVerify
:visible="visible"
mode="identity"
:actions="[1, 2]"
name="测试用户"
idcard="000000000000000000"
verify-api="https://your-domain.com/verify"
@success="onSuccess"
@fail="onFail"
@action="onAction"
@back="onBack"
/>
</template>
<script>
export default {
data() {
return { visible: true }
},
methods: {
onSuccess(e) {
console.log('认证通过', e.picture)
this.visible = false
},
onFail(e) {
console.log('认证失败', e.state)
},
onAction(e) {
// 活体动作切换,可用于自定义语音/文案
console.log('当前动作', e.description)
},
onBack() {
// 结果页点击“返回”或倒计时结束
this.visible = false
}
}
}
</script>
也可以按 URL 参数方式使用(见工程内 pages/face/index.vue):
/pages/face/index?mode=identity&actions=1,2&name=测试用户&idcard=000000000000000000&verifyApi=https://your-domain.com/verify
Props
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
visible |
Boolean | true |
是否展示。置为 false 会停止摄像头并销毁 renderjs |
mode |
String | identity |
liveness 纯活体;identity 活体+人证比对 |
actions |
Array / String | [1, 2] |
活体动作序列。1张嘴 2眨眼 3左转头 4右转头 5点头 |
name |
String | '' |
姓名,identity 模式必填 |
idcard |
String | '' |
身份证号,identity 模式必填 |
verifyApi |
String | '' |
人证比对接口地址,identity 模式必填 |
token |
String | '' |
比对接口鉴权 token,请求时以 Authorization: Bearer <token> 头携带 |
test |
Boolean | false |
测试模式,不真实调用接口,走本地模拟 |
assetBase |
String | '' |
模型资源根路径(face-api.js 与 models)。默认读取项目根 /static/face-models/,一般无需设置;模型放在其他位置时可显式指定,如 /static/face-models/ |
Events
| 事件 | 参数 | 说明 |
|---|---|---|
result |
{ type, state, count, picture, source } |
任何最终结果都会触发 |
success |
同上 | state === 'SUCCESS' |
fail |
同上 | state !== 'SUCCESS' |
action |
{ code, description, prompt } |
活体动作切换 |
error |
{ message } |
初始化失败(如摄像头不可用、模型加载失败) |
back |
无 | 结果页点击“返回”或结果页倒计时结束 |
结果字段说明:
| 字段 | 说明 |
|---|---|
type |
当前模式 liveness / identity |
state |
SUCCESS 通过;其他为失败(如 TIMEOUT、FAIL) |
picture |
抓拍人像,data:image/png;base64,... |
count |
本次会话内的结果序号 |
source |
回传原始入参,便于业务透传 |
人证比对接口约定
identity 模式会在活体通过后,向你配置的 verifyApi 发起 POST(application/json) 请求:
{
"realName": "测试用户",
"idCard": "000000000000000000",
"faceImage": "data:image/png;base64,..."
}
接口需返回:
{ "success": true }
约定规则:
- HTTP 200 且
success为布尔值 才算有效响应 success: true→ 认证通过;success: false→ 认证失败- 非 200、超时、网络异常,或缺少布尔
success字段,一律视为失败,并在结果页给出明确提示
注意事项
- 模型文件:插件不带任何模型,必须把
face-api.js与模型按「准备模型文件」放到项目根/static/face-models/,否则认证时会提示「加载 face-api.js 失败」或「加载人脸模型失败」。 - 平台限制:本组件依赖 renderjs,仅支持 App(app-vue) 与 H5,不支持小程序、nvue 与 uni-app x。
- 摄像头权限:App 端打包需勾选相机权限(组件已声明用途说明);H5 端需在 HTTPS 环境下才能调起摄像头。
- 跨域:H5 平台由浏览器直接发起比对请求,你的接口必须放行 CORS(含 OPTIONS 预检);若使用
token,还需允许Authorization、Content-Type请求头。App 端无此限制。 - 语音播报:动作提示音使用 webview 的
speechSynthesis,部分设备 WebView 不支持;可通过监听@action自行播报。 faceImage格式:为data:image/png;base64,前缀的完整 data URL,如你的后端需要纯 base64,请自行截取逗号后的内容。- 人脸数据合规:抓拍人像属敏感个人信息,请务必在自身隐私政策中说明用途与留存策略。
目录结构
uni_modules/Rui-faceVerify
├── components/Rui-faceVerify/Rui-faceVerify.vue # 组件入口(UI + 状态机 + renderjs 检测)
├── common/faceConfig.js # 动作/阈值/文案/脱敏/参数归一化
├── static/
│ └── face/ # 组件 UI 图片(icon/引导图/结果图,随插件内置)
├── package.json
├── readme.md
└── changelog.md
模型与 face-api.js 不在此目录,需放到宿主项目根 static/face-models/,见「准备模型文件」。

收藏人数:
下载插件并导入HBuilderX
下载示例项目ZIP
赞赏(1)
下载 89
赞赏 1
下载 12765007
赞赏 1959
赞赏
京公网安备:11010802035340号