更新记录
0.1.0(2026-07-19) 下载此版本
初次提交
平台兼容性
uni-app x(4.66)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| × | × | 7.0 | 12 | 12 | × |
其他
| 多语言 | 暗黑模式 | 宽屏模式 |
|---|---|---|
| √ | × | √ |
laoqianjunzi-face
laoqianjunzi-face 是一个面向 uni-app x 的 UTS 人脸能力插件,围绕当前插件内的 FaceHub API 提供统一的人脸引擎初始化、预览编排、图片检测、实时跟踪、智能活体、人脸注册识别与人脸库导入导出能力。
本文档仅说明当前插件已经公开的能力与用法,示例和 API 均以 uni_modules/laoqianjunzi-face/utssdk/interface.uts 为准。
功能概览
- 统一初始化与释放人脸引擎
- 基于
laoqianjunzi-face的实时预览宿主组件 - 相机预览拍照,直接回收本地图片路径与 Base64
- 单图快速验脸、深度检测、批量检测、特征提取
- 实时人脸跟踪,输出矩形框、姿态、清晰度、活体状态等数据
- 智能活体动作校验,支持
realFace、lookLeft、lookRight、blink、nod、holdStill - 本地人脸库注册、识别、TopN 检索、删除、清空、导入、导出
- 纯本地数据流转,不主动上传图像与特征向量
支持平台
来自 package.json 的当前声明:
| 平台 | 支持情况 | 最低版本 |
|---|---|---|
| Android App | 支持 | API 24 |
| iOS App | 支持 | iOS 12 |
| Harmony App | 支持 | API 12 |
| Web | 支持 Chrome | Safari 不支持 |
推荐环境:
- HBuilderX
5.07+ uni-app x4.66+- 页面或组件内使用时,优先放在
uni-app x项目中
权限与前置条件
插件当前声明的权限如下:
- Android:
CAMERA、RECORD_AUDIO - iOS:
Camera、Microphone、Photo Library - Harmony:
CAMERA - Web:首次打开预览时由浏览器请求摄像头权限
使用前请确认:
- 页面已经挂载
laoqianjunzi-face组件,作为实时预览宿主 - 先调用
initializeFaceHub,再调用预览、跟踪、活体等实时能力 - 图片检测类 API 传入的是本地可读文件路径,例如
uni.chooseImage返回的路径或captureFacePhoto返回的filePath - 页面需要滚动时,在 App 端必须使用
<scroll-view>包裹
目录结构
插件内与使用方最相关的目录:
utssdk/interface.uts:类型定义与公共 API 约束utssdk/index.uts:统一导出入口components/laoqianjunzi-face/:预览宿主组件pages/index.uvue:完整演示页
快速开始
1. 引入 API 与预览组件
页面脚本中引入统一入口:
import * as FaceHub from '@/uni_modules/laoqianjunzi-face/utssdk/index.uts'
预览组件采用 easycom 方式,模板里直接写:
<laoqianjunzi-face
class="camera-preview"
:autoStart="false"
:enableAudio="false"
:position="'front'"
></laoqianjunzi-face>
2. 页面最小示例
下面示例展示初始化、打开预览、开始跟踪与页面卸载清理:
<template>
<!-- #ifdef APP -->
<scroll-view class="page-scroll" :scroll-y="true">
<!-- #endif -->
<view class="page">
<view class="panel">
<text class="title">laoqianjunzi-face 最小示例</text>
<laoqianjunzi-face
class="camera-preview"
:autoStart="false"
:enableAudio="false"
:position="'front'"
></laoqianjunzi-face>
</view>
<view class="button-row">
<view class="action-btn" @tap="initEngine">
<text class="action-btn-text">初始化</text>
</view>
<view class="action-btn" @tap="openPreview">
<text class="action-btn-text">打开预览</text>
</view>
</view>
<view class="button-row">
<view class="action-btn" @tap="startTracking">
<text class="action-btn-text">开始跟踪</text>
</view>
<view class="action-btn" @tap="closePreview">
<text class="action-btn-text">关闭预览</text>
</view>
</view>
<text class="result-text">{{ resultText }}</text>
</view>
<!-- #ifdef APP -->
</scroll-view>
<!-- #endif -->
</template>
<script lang="uts">
import * as FaceHub from '@/uni_modules/laoqianjunzi-face/utssdk/index.uts'
export default {
data() {
return {
resultText: '等待操作'
}
},
onUnload() {
FaceHub.stopSmartLiveness({})
FaceHub.stopFaceTracking({})
FaceHub.closeFacePreview({})
FaceHub.releaseFaceHub({})
},
methods: {
writeResult(label: string, payload: any) {
try {
this.resultText = label + '\n' + JSON.stringify(payload)
} catch (_error) {
this.resultText = label
}
},
initEngine() {
FaceHub.initializeFaceHub({
activeModel: 'light',
autoWarmup: true,
success: (result) => {
this.writeResult('初始化成功', result)
},
fail: (error) => {
this.writeResult('初始化失败', error)
}
})
},
openPreview() {
FaceHub.openFacePreview({
position: 'front',
frameFormat: 'rgba',
maxFps: 10,
success: (result) => {
this.writeResult('预览已打开', result)
},
fail: (error) => {
this.writeResult('打开预览失败', error)
}
})
},
startTracking() {
FaceHub.startFaceTracking({
minIntervalMs: 260,
onTrack: (result) => {
this.writeResult('跟踪结果', result)
},
fail: (error) => {
this.writeResult('跟踪失败', error)
}
})
},
closePreview() {
FaceHub.closeFacePreview({
success: (result) => {
this.writeResult('预览已关闭', result)
}
})
}
}
}
</script>
<style>
.page-scroll {
flex: 1;
background-color: #eef3f7;
flex-direction: column;
}
.page {
padding: 24rpx;
background-color: #eef3f7;
flex-direction: column;
}
.panel {
padding: 24rpx;
margin-bottom: 16rpx;
border-radius: 24rpx;
background-color: #ffffff;
flex-direction: column;
}
.title {
margin-bottom: 16rpx;
font-size: 32rpx;
font-weight: 700;
color: #183046;
}
.camera-preview {
height: 360rpx;
flex-direction: column;
}
.button-row {
margin-bottom: 12rpx;
flex-direction: row;
}
.action-btn {
flex: 1;
height: 84rpx;
justify-content: center;
align-items: center;
border-radius: 18rpx;
background-color: #1d5a83;
flex-direction: row;
}
.action-btn-text {
font-size: 26rpx;
font-weight: 700;
color: #ffffff;
}
.result-text {
font-size: 24rpx;
line-height: 36rpx;
color: #3f5568;
}
</style>
推荐调用流程
实时预览与跟踪
- 页面挂载
laoqianjunzi-face - 调用
initializeFaceHub - 调用
openFacePreview - 调用
startFaceTracking或startSmartLiveness - 页面销毁时执行
stopFaceTracking、stopSmartLiveness、closeFacePreview、releaseFaceHub
图片验脸与识别
- 通过
uni.chooseImage或captureFacePhoto获取本地图片路径 - 调用
quickCheckFaceImage做快速预检 - 调用
inspectFaceImage获取详细检测结果 - 调用
extractFaceFeatureByFile提取特征,或直接registerFaceByFile/identifyFaceByFile
人脸库使用
registerFaceByFile写入userIdidentifyFaceByFile返回最优匹配identifyFaceTopNByFile获取候选列表exportFaceLibrary导出后可在下次会话中importFaceLibrary
预览组件
组件名称:laoqianjunzi-face
该组件负责提供摄像头预览宿主视图。实时预览、跟踪、智能活体等能力都依赖它先完成挂载。
Props
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
position |
'back' \| 'front' |
'front' |
预览摄像头方向 |
hidden |
boolean |
false |
是否隐藏原生预览 |
autoStart |
boolean |
false |
是否在宿主初始化后自动开启预览 |
enableAudio |
boolean |
false |
录制时是否启用音频 |
minFps |
number |
10 |
预览最小帧率 |
maxFps |
number |
12 |
预览最大帧率 |
mirrorFrontCapture |
boolean |
false |
前摄拍照是否镜像 |
previewWidth |
number |
0 |
预览宽度,0 表示使用宿主尺寸 |
previewHeight |
number |
0 |
预览高度,0 表示使用宿主尺寸 |
scalingRatio |
number |
1 |
预览缩放比例 |
API 一览
引擎生命周期
| 方法 | 说明 | 关键参数 | 成功返回 |
|---|---|---|---|
initializeFaceHub |
初始化引擎与当前工作模型 | activeModel、modelBaseUrl、modelPath、autoWarmup |
LaoqianjunziFaceInitializeResult |
getFaceHubState |
读取当前运行状态 | 无必填 | LaoqianjunziFaceEngineState |
releaseFaceHub |
释放引擎并重置实时任务 | 无必填 | LaoqianjunziFaceEngineState |
预览与拍照
| 方法 | 说明 | 关键参数 | 成功返回 |
|---|---|---|---|
openFacePreview |
打开摄像头预览并接入帧流 | position、frameFormat、maxFps、debug |
LaoqianjunziFaceEngineState |
closeFacePreview |
关闭预览并停止关联任务 | 无必填 | LaoqianjunziFaceEngineState |
captureFacePhoto |
从当前预览拍照 | quality |
LaoqianjunziFaceCapturePhotoResult |
图片检测
| 方法 | 说明 | 关键参数 | 成功返回 |
|---|---|---|---|
quickCheckFaceImage |
快速判断图片是否包含可用人脸 | filePath |
LaoqianjunziFaceQuickImageResult |
inspectFaceImage |
获取单图详细检测结果 | filePath |
LaoqianjunziFaceImageInspectResult |
inspectFaceImageBatch |
顺序批量检测多张图片 | filePaths |
LaoqianjunziFaceBatchInspectResult |
extractFaceFeatureByFile |
从单图提取特征向量 | filePath |
LaoqianjunziFaceFeatureResult |
实时分析
| 方法 | 说明 | 关键参数 | 成功返回 |
|---|---|---|---|
startFaceTracking |
开始实时跟踪 | minIntervalMs、qualityClarity、qualityReality、allowMask、onTrack |
LaoqianjunziFaceEngineState,并持续回调 LaoqianjunziFaceTrackSummary |
stopFaceTracking |
停止实时跟踪 | 无必填 | LaoqianjunziFaceEngineState |
startSmartLiveness |
启动智能活体校验 | actions、timeoutMs、minIntervalMs、minClarity、minReality、onProgress |
LaoqianjunziFaceLivenessResult |
stopSmartLiveness |
停止智能活体 | 无必填 | LaoqianjunziFaceEngineState |
人脸库与识别
| 方法 | 说明 | 关键参数 | 成功返回 |
|---|---|---|---|
getFaceLibraryState |
读取本地人脸库状态 | 无必填 | LaoqianjunziFaceLibraryState |
clearFaceLibrary |
清空本地人脸库 | 无必填 | LaoqianjunziFaceLibraryState |
registerFaceByFile |
用图片注册人脸 | filePath、userId |
LaoqianjunziFaceRegisterResult |
identifyFaceByFile |
用图片做单结果识别 | filePath |
LaoqianjunziFaceIdentifyResult |
identifyFaceTopNByFile |
输出 TopN 候选 | filePath、topN、threshold |
LaoqianjunziFaceIdentifyTopNResult |
deleteFaceByUserId |
删除指定用户的人脸档案 | userId |
LaoqianjunziFaceLibraryMutationResult |
exportFaceLibrary |
导出整库数据 | 无必填 | LaoqianjunziFaceLibraryExportResult |
importFaceLibrary |
导入人脸档案 | entries |
LaoqianjunziFaceLibraryImportResult |
compareFaceFeatures |
比较两个特征向量的相似度 | leftFeature、rightFeature |
LaoqianjunziFaceCompareResult |
模型管理
| 方法 | 说明 | 关键参数 | 成功返回 |
|---|---|---|---|
downloadFaceModel |
下载或准备指定模型 | modelName、baseUrl、onProgress |
LaoqianjunziFaceModelDownloadResult |
当前实现中,如果目标平台已经内置模型,downloadFaceModel 会直接返回成功,并通过 onProgress 给出 100% 进度。
核心返回结构
LaoqianjunziFaceEngineState
| 字段 | 类型 | 说明 |
|---|---|---|
ready |
boolean |
当前引擎是否已初始化 |
platform |
'android' \| 'ios' \| 'harmony' \| 'web' |
当前平台 |
activeModel |
'light' \| 'std' |
当前使用模型 |
previewOpen |
boolean |
预览是否已打开 |
trackingActive |
boolean |
是否正在跟踪 |
smartLivenessActive |
boolean |
是否正在执行智能活体 |
rawInit |
string |
原始初始化信息 |
如果你不想在业务层接触冗余字段,日常状态判断只需关心
ready、previewOpen、trackingActive、smartLivenessActive。
LaoqianjunziFaceTrackSummary
实时跟踪的关键字段:
faceCount:当前帧检测到的人脸数hasFace:是否存在人脸primaryRect:主人脸框primaryUserId:识别命中的主用户 IDprimaryScore:匹配分数yaw/pitch/roll:姿态角eyeLeft/eyeRight:眼睛状态smile:微笑分数mouthOpened:是否张嘴allHeadBody:是否完整进入画面liveness:活体状态文本clarity/reality:质量分值qualityPassed:质量是否通过overlays:用于绘制叠加框的数据frame:原始帧摘要
LaoqianjunziFaceLivenessProgress
| 字段 | 说明 |
|---|---|
currentAction |
当前正在执行的动作 |
completedActions |
已完成动作列表 |
remainingActions |
剩余动作列表 |
tips |
页面上适合直接展示的动作提示 |
track |
本次动作对应的最新跟踪结果 |
LaoqianjunziFaceLibraryProfile
| 字段 | 说明 |
|---|---|
userId |
业务用户标识 |
signature |
特征摘要字符串 |
vector |
特征向量 |
createdAt |
写入时间戳 |
回调约定
所有 API 都遵循 success / fail / complete 风格。
success:返回对应能力的结构化结果fail:返回LaoqianjunziFaceFailcomplete:无论成功失败都会执行,参数与最终结果保持一致
失败对象结构:
| 字段 | 说明 |
|---|---|
errSubject |
固定为 laoqianjunzi-face |
errCode |
插件错误码 |
errMsg |
错误说明 |
错误码
| 错误码 | 说明 |
|---|---|
9013301 |
人脸引擎尚未初始化 |
9013302 |
相机预览尚未打开 |
9013303 |
当前已有追踪任务在运行 |
9013304 |
当前已有活体任务在运行 |
9013305 |
当前没有可停止的任务 |
9013306 |
图片路径无效或为空 |
9013307 |
模型下载参数不合法 |
9013308 |
当前平台暂不支持该能力 |
9013309 |
人脸库尚未初始化 |
9013310 |
相机权限未授予 |
9013311 |
底层插件返回异常结果 |
9013312 |
任务执行超时 |
9013313 |
未检测到人脸 |
9013314 |
未检测到单张清晰正脸 |
9013315 |
活体校验未通过 |
9013316 |
动作参数不合法 |
9013317 |
特征向量参数不合法 |
9013318 |
底层依赖插件缺失或不可用 |
9013319 |
当前平台暂不支持该动作活体验证模式 |
使用建议
- 实时能力依赖预览宿主组件,建议页面一进入就先挂载
laoqianjunzi-face openFacePreview前先执行initializeFaceHub,否则会收到9013301captureFacePhoto、startFaceTracking、startSmartLiveness都要求预览已打开,否则会收到9013302- 识别类业务推荐先
registerFaceByFile建库,再identifyFaceByFile或identifyFaceTopNByFile - 如果需要自定义命中阈值,优先使用
identifyFaceTopNByFile,当前实现默认阈值是0.72 - Web 端请先确保预览组件已挂载,再调用
openFacePreview
示例页面
插件内置了完整演示页:
- 路径:
uni_modules/laoqianjunzi-face/pages/index - 文件:
uni_modules/laoqianjunzi-face/pages/index.uvue
演示页覆盖以下流程:
- 初始化引擎、读取状态、打开和关闭预览
- 预览拍照并回灌为图片检测输入
- 实时跟踪与智能活体
- 选择本地图片做快速验脸、深度检测、特征提取
- 注册、识别、TopN 检索、删除、导出、导入、清空人脸库
如果你想直接验证插件能力,优先运行这个页面。

收藏人数:
https://gitee.com/laoqianjunzi/laoqianjunzi-face
下载插件并导入HBuilderX
下载示例项目ZIP
赞赏(0)
下载 1169
赞赏 2
下载 12440709
赞赏 1934
赞赏
京公网安备:11010802035340号