更新记录
1.0.0(2026-04-09)
-
人脸识别能力
- 新增原生实时人脸识别能力,支持打开相机后实时检测、识别、搜库并返回结果。
- 支持两种识别模式:
- 悬浮识别窗模式
startFaceDetect - 全屏原生识别页模式
openFaceDetect - 支持识别成功后自动关闭并回传匹配结果。
- 支持连续识别失败达到指定次数后自动关闭。
-
实时检测状态回传
- 支持实时状态回传,前端可根据事件类型做提示。
- 当前支持的主要状态包括:
preview_readydetectingface_not_detectedface_detectedface_occludedface_pose_invalidface_too_darkface_blurryface_not_liverecognize_failedrecognize_successrecognize_max_failuressdk_error
-
悬浮窗识别界面
- 支持在前端页面中间以悬浮窗形式展示相机识别区域,不再只能全屏显示。
- 支持自定义悬浮窗参数:
- 是否启用悬浮窗
floatingWindowMode - 宽度比例
windowWidthRatio - 高度比例
windowHeightRatio - 横向偏移
windowOffsetXRatio - 纵向偏移
windowOffsetYRatio - 容器背景色
containerBackgroundColor
-
识别界面控制参数
- 支持前端控制以下 UI 开关:
- 关闭按钮
showCloseButton / showCancelButton - 开始检测按钮
showStartButton - 状态文字
showStatusText - 自动开始检测
autoStartAnalyze - 识别成功自动关闭
autoStopOnRecognize - 连续失败自动关闭
maxRecognizeFailures
-
人脸框与引导区域
- 支持方形引导框显示控制:
showSquareGuide- 支持引导框大小和位置控制:
guideBoxWidthRatioguideBoxHeightRatioguideOffsetXRatioguideOffsetYRatio- 支持原生遮罩显示开关:
showGuideMask
-
相机方向与图片方向控制
- 支持统一的方向控制参数:
- 相机朝向
cameraFacing - 预览方向
displayOrientationDeg - 抓拍图片旋转
captureImageRotationDeg - 抓拍镜像
captureMirrorX - 人脸框旋转
rectRotation - 人脸框镜像
rectMirrorX
-
人脸识别参数控制
- 支持前端传入识别参数:
- 识别模式
predictMode - 活体模式
livenessMode - 质量模式
qualityMode - 最大人脸数
maxFaceCount - 最小人脸尺寸
minFaceSize - 距离阈值
distanceThreshold - 人脸置信度阈值
faceScoreThreshold - 线程数
threadNum - 识别间隔
analyzeIntervalMs - 预览解码尺寸
previewDecodeMaxSize
-
授权与配置
- 支持两种授权方式:
- 通过
licensePath激活 - 通过
appId激活 - 支持实时识别链自动校验授权。
- 支持数据库路径配置:
dbPath
-
图片识别与人脸库能力
- 支持图片特征提取
getImageFeatures - 支持释放图片特征
releaseImageFeatures - 支持人脸入库
addDBRecord - 支持人脸搜库
searchDB - 支持 1:1 比对
compare1v1 - 支持获取全部人脸库记录
getAllDBRecords - 支持删除库记录
deleteDBRecord - 支持清空人脸库
clearFaceDatabase
- 支持图片特征提取
-
稳定性优化
- 优化了实时识别反复打开关闭时的 SDK 生命周期管理。
- 优化了成功识别后的资源释放链,降低商米授权设备上识别成功后闪退的概率。
- 优化了悬浮层关闭与重复打开时的处理逻辑。
-
调试与测试
- 提供测试页支持直接配置识别参数、窗口参数和界面参数。
- 支持支付模式预设与调试模式预设,方便快速切换测试场景。
平台兼容性
uni-app(3.7.3)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | - | - | √ | - | - | - | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
其他
| 多语言 | 暗黑模式 | 宽屏模式 |
|---|---|---|
| × | × | √ |
phiron-sunmiFace UTS 插件使用说明
1. 插件说明
phiron-sunmiFace 是基于商米人脸识别 SDK 封装的 uni-app UTS 插件,当前主要提供:
- 设备信息与 SDK 信息获取
- 商米人脸 SDK 初始化
licensePath激活授权- 图片人脸特征提取
- 人脸库入库、搜库、删除、清空
- 实时相机识别
- 悬浮识别窗和全屏识别页
当前插件目录:
2. 前端引用方式
import * as SunmiFaceUTS from '@/uni_modules/phiron-sunmiFace'
不要再使用旧版原生插件的:
const sunmiFace = uni.requireNativePlugin('sunmiFace')
3. 推荐调用顺序
推荐按下面顺序接入:
getDeviceInfo()checkPermissions()createHandle()init()activateByLicensePath()initDB()- 再调用图片识别、实时识别、人脸库相关接口
推荐示例:
import * as SunmiFaceUTS from '@/uni_modules/phiron-sunmiFace'
async function setupSunmiFace() {
console.log('deviceInfo', SunmiFaceUTS.getDeviceInfo())
console.log('permissions', SunmiFaceUTS.checkPermissions())
console.log('createHandle', SunmiFaceUTS.createHandle())
console.log('init', SunmiFaceUTS.init({ useAssetConfig: true }))
console.log('activate', SunmiFaceUTS.activateByLicensePath({
licensePath: '/storage/emulated/0/SunmiRemoteFiles/license_face.txt'
}))
console.log('initDB', SunmiFaceUTS.initDB())
}
4. 权限申请
当前 checkPermissions() 已实现真实权限弹窗,不再只是提示文案。
会按系统版本申请这些权限:
CAMERAREAD_PHONE_STATE- Android 13+:
READ_MEDIA_IMAGES - Android 12 及以下:
READ_EXTERNAL_STORAGE - Android 9 及以下:
WRITE_EXTERNAL_STORAGE
调用示例:
const res = SunmiFaceUTS.checkPermissions()
console.log(res)
返回示例:
{
"code": 0,
"success": true,
"message": "已拉起系统权限授权弹窗",
"data": {
"requiredPermissions": ["android.permission.CAMERA"],
"missingPermissions": ["android.permission.CAMERA"],
"allGranted": false,
"requested": true
}
}
5. 初始化与授权
5.1 创建句柄
SunmiFaceUTS.createHandle()
5.2 初始化 SDK
SunmiFaceUTS.init({
useAssetConfig: true
})
可选参数:
useAssetConfigconfigPathdbPath
5.3 通过文件激活,推荐
SunmiFaceUTS.activateByLicensePath({
licensePath: '/storage/emulated/0/SunmiRemoteFiles/license_face.txt'
})
5.4 通过 AppId 激活
SunmiFaceUTS.activateByAppId({
appId: '你的商米 AppId',
forceRefresh: false
})
注意:
- 当前仓库里
licensePath激活可用(离线激活不可用 官方更新到2.0.1后 不支持离线激活,只能远程激活拿到授权license.txt) initAuthorizeSDK / syncGetAuthorizeCode / activateByAppId依赖商米授权 SDK 的额外运行时库- 如果你只拿到了
SunmiAuthorize-SDK-1.0.1.aar,但没有商米配套的com.sunmilib.*依赖库,这几条接口会失败 - 这种情况下,建议优先走
activateByLicensePath
6. 基础接口
6.1 获取 SDK 版本
SunmiFaceUTS.getVersion()
6.2 获取设备信息
SunmiFaceUTS.getDeviceInfo()
6.3 释放句柄
SunmiFaceUTS.releaseHandle()
7. 人脸 SDK 配置
7.1 设置配置
SunmiFaceUTS.setConfig({
threadNum: 2,
distanceThreshold: 0.9,
faceScoreThreshold: 0.7,
minFaceSize: 60
})
7.2 获取当前配置
SunmiFaceUTS.getConfig()
8. 人脸库初始化
SunmiFaceUTS.initDB({
dbPath: ''
})
如果不传 dbPath,插件会使用默认数据库路径。
9. 图片特征提取
9.1 从图片路径提取
const res = SunmiFaceUTS.getImageFeatures({
imagePath: '/storage/emulated/0/Download/face_a.jpg',
keepAlive: true,
maxFaceCount: 1,
predictMode: 3,
livenessMode: 0,
qualityMode: 0
})
9.2 从 base64 提取
SunmiFaceUTS.getImageFeatures({
base64: 'data:image/jpeg;base64,...',
keepAlive: true
})
常用参数:
imagePathbase64tokenfeaturekeepAliveretainTokenmaxFaceCountpredictModelivenessModequalityModedecodeMaxSizedistanceThresholdminFaceSize
9.3 释放特征对象
如果前面拿到了 token,建议用完释放:
SunmiFaceUTS.releaseImageFeatures({
token: 'xxx'
})
10. 人脸库操作
10.1 入库
SunmiFaceUTS.addDBRecord({
imagePath: '/storage/emulated/0/Download/face_a.jpg',
id: 'user-001',
name: '张三',
phone: '***',
dbPath: ''
})
也可以基于 token 或 feature 入库。
10.2 搜库
SunmiFaceUTS.searchDB({
token: 'xxx'
})
10.3 获取全部记录
SunmiFaceUTS.getAllDBRecords()
10.4 删除记录
SunmiFaceUTS.deleteDBRecord({
id: 'user-001',
imgId: ''
})
10.5 清空人脸库
SunmiFaceUTS.clearFaceDatabase()
11. 1:1 比对
SunmiFaceUTS.compare1v1({
first: {
imagePath: '/storage/emulated/0/Download/face_a.jpg'
},
second: {
imagePath: '/storage/emulated/0/Download/face_b.jpg'
}
})
12. 实时识别接口
12.1 页面内悬浮识别窗
SunmiFaceUTS.startFaceDetect({
floatingWindowMode: true,
cameraFacing: 'front',
autoStartAnalyze: true,
autoStopOnRecognize: true,
showCloseButton: false,
showStartButton: false,
showStatusText: false,
showSquareGuide: true,
showGuideMask: false,
windowWidthRatio: 0.58,
windowHeightRatio: 0.42,
windowOffsetXRatio: 0,
windowOffsetYRatio: -0.06,
licensePath: '/storage/emulated/0/SunmiRemoteFiles/license_face.txt'
}, (event) => {
console.log('face event', event)
})
12.2 停止悬浮识别
SunmiFaceUTS.stopFaceDetect()
12.3 打开全屏识别页
SunmiFaceUTS.openFaceDetect({
cameraFacing: 'front',
autoStartAnalyze: true,
autoStopOnRecognize: true,
showCloseButton: false,
showStartButton: false,
showStatusText: false,
showSquareGuide: true,
showGuideMask: false,
licensePath: '/storage/emulated/0/SunmiRemoteFiles/license_face.txt'
}, (event) => {
console.log('face event', event)
})
12.4 兼容入口
SunmiFaceUTS.startFaceRecognize(options, callback)
当前它等价于实时识别兼容入口,主要用于兼容旧调用方式。
13. 实时事件说明
实时识别过程中,回调里可能会收到这些 eventType:
preview_readydetectingface_not_detectedface_detectedface_occludedface_pose_invalidface_too_darkface_blurryface_not_liverecognize_failedrecognize_successrecognize_max_failuressdk_errorclosedstopped
前端可以根据 eventType 自己显示提示文案。
14. 常用参数说明
14.1 识别参数
predictModelivenessModequalityModemaxFaceCountminFaceSizedistanceThresholdfaceScoreThresholdthreadNumanalyzeIntervalMspreviewDecodeMaxSize
14.2 UI 控制参数
showCloseButtonshowStartButtonshowStatusTextautoStartAnalyzeautoStopOnRecognizemaxRecognizeFailures
14.3 悬浮窗参数
floatingWindowModecontainerBackgroundColorwindowWidthRatiowindowHeightRatiowindowOffsetXRatiowindowOffsetYRatio
14.4 引导框参数
showSquareGuideshowGuideMaskguideBoxWidthRatioguideBoxHeightRatioguideOffsetXRatioguideOffsetYRatio
14.5 方向参数
cameraFacingdisplayOrientationDegcaptureImageRotationDegcaptureMirrorXrectRotationrectMirrorX
15. 当前已知限制
- 推荐优先使用
licensePath激活 appId授权链当前依赖商米未提供完整的授权运行时库- 如果缺少
com.sunmilib.*和相关 RxJava 依赖,以下接口会失败:initAuthorizeSDKsyncGetAuthorizeCodeasyncGetAuthorizeTokenactivateByAppId
- 实时识别在反复开关场景下已经做了多轮释放优化,但仍建议以真机长时间测试为准
16. 问题排查建议
16.1 权限不弹窗
先调用:
SunmiFaceUTS.checkPermissions()
确认返回里:
allGrantedrequestedmissingPermissions
16.2 appId 激活报缺类错误
如果报:
HttpConfig$Buildercom.sunmilib.*io.reactivex.*
说明不是业务代码问题,而是商米授权 SDK 配套依赖不完整。
16.3 实时识别多次开关后闪退
优先检查:
- 是否使用最新插件版本
- 是否反复创建多个识别窗但没有正确关闭
- 是否前端在识别成功后又立刻重复打开
17. 简单接入示例
import * as SunmiFaceUTS from '@/uni_modules/phiron-sunmiFace'
export async function initFaceSdk() {
SunmiFaceUTS.checkPermissions()
SunmiFaceUTS.createHandle()
SunmiFaceUTS.init({ useAssetConfig: true })
SunmiFaceUTS.activateByLicensePath({
licensePath: '/storage/emulated/0/SunmiRemoteFiles/license_face.txt'
})
SunmiFaceUTS.initDB()
}
export function openCashierFacePay() {
return SunmiFaceUTS.startFaceDetect({
floatingWindowMode: true,
autoStartAnalyze: true,
autoStopOnRecognize: true,
showCloseButton: false,
showStartButton: false,
showStatusText: false,
showSquareGuide: true,
showGuideMask: false,
cameraFacing: 'front',
licensePath: '/storage/emulated/0/SunmiRemoteFiles/license_face.txt'
}, (event) => {
console.log('face pay event =>', event)
})
}

收藏人数:
购买源码授权版(
试用
使用 HBuilderX 导入示例项目
赞赏(0)
下载 10
赞赏 0
下载 11519271
赞赏 1903
赞赏
京公网安备:11010802035340号