103 lines
3.3 KiB
Dart
103 lines
3.3 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:common_utils/common_utils.dart';
|
|
import 'package:get/get.dart';
|
|
|
|
import 'package:pj_supermarket_cloud/common/index.dart';
|
|
|
|
abstract class AppFaceTool {
|
|
static const String _tag = "app 人脸工具";
|
|
|
|
// 跳转到人脸识别页面
|
|
static Future<bool> jumpFacePage() async {
|
|
if (AppRuntimeTool.useManualHardwareInput) return false;
|
|
final isJump = await FaceDiscernPlugs.jumpFaceDiscernPage();
|
|
if (!isJump) return false;
|
|
Future.delayed(const Duration(seconds: 2), () {
|
|
AppSubScreenTool.hide();
|
|
});
|
|
return true;
|
|
}
|
|
|
|
// 检查人脸激活参数
|
|
static bool _validateSysFaceParams(SysSetting sysSetting) {
|
|
if (ObjectUtil.isEmpty(sysSetting.faceAppId)) {
|
|
return false;
|
|
}
|
|
if (ObjectUtil.isEmpty(sysSetting.faceSdkKey)) {
|
|
return false;
|
|
}
|
|
if (ObjectUtil.isEmpty(sysSetting.faceActiveKey)) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// 批量注册人脸
|
|
static Future<bool> faceRegister({
|
|
String? userId,
|
|
bool forceRegister = false,
|
|
}) async {
|
|
if (AppRuntimeTool.useManualHardwareInput) return true;
|
|
var faceCount = await FaceDiscernPlugs.getFaceCount();
|
|
if (faceCount == 0 || forceRegister) {
|
|
final list = await FaceDiscernPlugs.registerFaceByDatabase(
|
|
userId: userId,
|
|
);
|
|
if (!ObjectUtil.isEmptyList(list)) {
|
|
final app = Get.find<AppControl>();
|
|
final faceDao = app.dataBase.getFaceDao;
|
|
logger.i("|$_tag|批量注册人脸,错误的人脸:${json.encode(list)}");
|
|
for (final v in list) {
|
|
final sampleId = v.toString();
|
|
final userFace = await faceDao.findBySampleId(sampleId);
|
|
if (ObjectUtil.isNotEmpty(userFace)) {
|
|
if (ObjectUtil.isNotEmpty(userFace?.path)) {
|
|
await SyncFaceTool.delFaceByStorage(filePath: userFace!.path!);
|
|
}
|
|
await faceDao.delById(userFace!.id!);
|
|
await AppFaceTool.removeFace(sampleId: sampleId);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
faceCount = await FaceDiscernPlugs.getFaceCount();
|
|
if (faceCount == 0) return false;
|
|
return true;
|
|
}
|
|
|
|
// 是否激活人脸sdk
|
|
static Future<bool> isActiveSdk() async {
|
|
if (AppRuntimeTool.useManualHardwareInput) return true;
|
|
final isNetwork = AppNetworkTool.isAutoNetwork();
|
|
if (!isNetwork) return true;
|
|
var faceConfig = await FaceDiscernPlugs.getConfig();
|
|
if (faceConfig == null || faceConfig.isActive == false) {
|
|
final sysSetting = await AppSettingTool.getSysSetting();
|
|
final valid = AppFaceTool._validateSysFaceParams(sysSetting);
|
|
if (!valid) return false;
|
|
final isActive = await FaceDiscernPlugs.active(
|
|
appId: sysSetting.faceAppId!,
|
|
sdkKey: sysSetting.faceSdkKey!,
|
|
activeKey: sysSetting.faceActiveKey!,
|
|
);
|
|
if (isActive) {
|
|
faceConfig = await FaceDiscernPlugs.getConfig();
|
|
}
|
|
}
|
|
if (faceConfig == null) {
|
|
return false;
|
|
}
|
|
return faceConfig.isActive;
|
|
}
|
|
|
|
// 删除人脸
|
|
static Future<bool> removeFace({String? sampleId}) async {
|
|
if (sampleId == null) return false;
|
|
if (AppRuntimeTool.useManualHardwareInput) return true;
|
|
final isActive = await AppFaceTool.isActiveSdk();
|
|
if (!isActive) return false;
|
|
return await FaceDiscernPlugs.removeFace(sampleId: sampleId);
|
|
}
|
|
}
|