Signed-off-by: lwk <1076278852@qq.com>
This commit is contained in:
lwk 2022-03-26 10:55:02 +08:00
parent aba74ff36c
commit ec91d7004e
8 changed files with 78 additions and 78 deletions

View File

@ -55,7 +55,7 @@ static const char *FACEID_FILENAME("/data/useriam/faceId.dat");
static const char *AUTH_RESULT_FILENAME("/data/useriam/auth_result.dat");
static const int32_t SLEEP_LONG_NUM = 2000;
static const int32_t PARAM_RANGE = 10;
static const int32_t TEST_ANGLT_START_NUM = 1000;
static const int32_t TEST_ANGLE_START_NUM = 1000;
static const int32_t TEST_ANGLE_MAX_NUM = 1013;
static const int32_t TEST_ANGLE_ADD_NUM = 4;
static const int32_t DEFAULT_REMAIN_TIMES = 5;
@ -610,7 +610,7 @@ void FaceAuthCA::GetEnrollAngleResult()
info.param[j] = 0;
}
resultInfos_.insert(std::pair<int32_t, ResultInfo>(mapNum, info));
for (int32_t i = TEST_ANGLT_START_NUM; i < TEST_ANGLE_MAX_NUM; i += TEST_ANGLE_ADD_NUM) {
for (int32_t i = TEST_ANGLE_START_NUM; i < TEST_ANGLE_MAX_NUM; i += TEST_ANGLE_ADD_NUM) {
info.resultCode = i;
for (int32_t j = 0; j < PARAM_RANGE; j++) {
info.param[j] = 0;

View File

@ -38,7 +38,7 @@ public:
BUNDLE_MGR_SERVICE_SYS_ABILITY_ID = 401,
SUBSYS_APPLICATIONS_SYS_ABILITY_ID_BEGIN = 500,
APP_MGR_SERVICE_ID = 501,
INSTALLD_SERVICE_ID = 511,
INSTALLED_SERVICE_ID = 511,
SUBSYS_ARVR_SYS_ABILITY_ID_BEGIN = 600,
SUBSYS_ARVRHARDWARE_SYS_ABILITY_ID_BEGIN = 700,
SUBSYS_BARRIERFREE_SYS_ABILITY_ID_BEGIN = 800,

View File

@ -143,8 +143,8 @@ typedef enum FIRetCode {
FI_RC_ERROR,
FI_RC_INVALID_ARGUMENT,
FI_RC_INVALID_HANDLE,
FI_RC_NULLPOINTER,
FI_RC_OUTORMEMORY,
FI_RC_NULL_POINTER,
FI_RC_OUT_OF_MEMORY,
} FIRetCode;
typedef struct PrepareParam {
@ -209,7 +209,7 @@ typedef enum RESULT_ERRORCODE {
ERRCODE_COMPARE_FAIL,
ERRCODE_TIMEOUT,
ERRCODE_ALGORITHM_NOT_INIT,
ERRCODE_HAL_INVALIDE,
ERRCODE_HAL_INVALID,
ERRCODE_OVER_MAX_FACES,
ERRCODE_IN_LOCKOUT_MODE,
ERRCODE_INVALID_PARAMETERS,

View File

@ -14,7 +14,7 @@
*/
import Log from '../utils/log.ets'
import commonControler from '../controller/commonController.ets'
import commonController from '../controller/commonController.ets'
import Constants from '../config/constant.ets'
@Preview
@ -38,7 +38,7 @@ export default struct BackComponent {
.backgroundColor(this.isTouch? "#E3E3E3": "#00000000")
.onClick(() => {
Log.info(this.TAG, 'back image onClick +')
commonControler.routeBack()
commonController.routeBack()
Log.info(this.TAG, 'back image onClick -')
})
.margin({

View File

@ -59,13 +59,13 @@ class EnrollingController {
}
async onAcquire(result: number) {
Log.info(this.TAG, 'onAcuquire+ result: ' + result)
Log.info(this.TAG, 'onAcquire+ result: ' + result)
if (result === 25) {
Log.info(this.TAG, 'onAcuquire face detected+')
Log.info(this.TAG, 'onAcquire face detected+')
this.faceDetected()
Log.info(this.TAG, 'onAcuquire face detected-')
Log.info(this.TAG, 'onAcquire face detected-')
}
Log.info(this.TAG, 'onAcuquire-')
Log.info(this.TAG, 'onAcquire-')
}
async faceDetected() {

View File

@ -35,61 +35,61 @@ export default struct EnrollDeclare {
.width(Constants.DECLARE_MAX_WIDTH)
.textAlign(TextAlign.Start)
.margin({ top: Constants.DECLARE_TITLE_MARGIN_TOP, bottom: Constants.DECLARE_TITLE_MARGIN_BOTTOM })
Text(this.pattern == "2D" ? $r("app.string.face_recognize_annouce_message_01") : $r("app.string.face_3drecognize_annouce_message_01"))
Text(this.pattern == "2D" ? $r("app.string.face_recognize_announce_message_01") : $r("app.string.face_3drecognize_announce_message_01"))
.fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
.width(Constants.DECLARE_MAX_WIDTH)
.textAlign(TextAlign.Start)
.margin({ bottom: Constants.DECLARE_ITEM_MARGIN_BOTTOM})
.lineHeight(Constants.DECLARE_TEXT_LINE_HEIGHT)
Text($r("app.string.face_recognize_annouce_message_02"))
Text($r("app.string.face_recognize_announce_message_02"))
.fontSize(Constants.DECLARE_SECONDARY_TITLE_FONT_SIZE)
.width(Constants.DECLARE_MAX_WIDTH)
.textAlign(TextAlign.Start)
.margin({ top: Constants.DECLARE_TITLE_MARGIN_TOP, bottom: Constants.DECLARE_TITLE_MARGIN_BOTTOM })
Text($r("app.string.face_recognize_annouce_message_03"))
Text($r("app.string.face_recognize_announce_message_03"))
.fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
.width(Constants.DECLARE_MAX_WIDTH)
.textAlign(TextAlign.Start).margin({ bottom: Constants.DECLARE_ITEM_MARGIN_BOTTOM })
.lineHeight(Constants.DECLARE_TEXT_LINE_HEIGHT)
Text($r("app.string.face_recognize_annouce_message_04"))
Text($r("app.string.face_recognize_announce_message_04"))
.fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
.width(Constants.DECLARE_MAX_WIDTH)
.textAlign(TextAlign.Start).margin({ bottom: Constants.DECLARE_ITEM_MARGIN_BOTTOM })
.lineHeight(Constants.DECLARE_TEXT_LINE_HEIGHT)
Text($r("app.string.face_recognize_annouce_message_05"))
Text($r("app.string.face_recognize_announce_message_05"))
.fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
.width(Constants.DECLARE_MAX_WIDTH)
.lineHeight(Constants.DECLARE_TEXT_LINE_HEIGHT)
.textAlign(TextAlign.Start).margin({ bottom: Constants.DECLARE_ITEM_MARGIN_BOTTOM })
Text($r("app.string.face_recognize_annouce_message_06"))
Text($r("app.string.face_recognize_announce_message_06"))
.fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
.width(Constants.DECLARE_MAX_WIDTH)
.textAlign(TextAlign.Start).margin({ bottom: Constants.DECLARE_ITEM_MARGIN_BOTTOM })
.lineHeight(Constants.DECLARE_TEXT_LINE_HEIGHT)
Text($r("app.string.face_recognize_annouce_message_07"))
Text($r("app.string.face_recognize_announce_message_07"))
.fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
.width(Constants.DECLARE_MAX_WIDTH)
.textAlign(TextAlign.Start).margin({ bottom: Constants.DECLARE_ITEM_MARGIN_BOTTOM })
.lineHeight(Constants.DECLARE_TEXT_LINE_HEIGHT)
Text($r("app.string.face_recognize_annouce_message_08"))
Text($r("app.string.face_recognize_announce_message_08"))
.fontSize(Constants.DECLARE_SECONDARY_TITLE_FONT_SIZE)
.width(Constants.DECLARE_MAX_WIDTH)
.textAlign(TextAlign.Start).margin({ top: Constants.DECLARE_TITLE_MARGIN_TOP, bottom: Constants.DECLARE_TITLE_MARGIN_BOTTOM })
Text($r("app.string.face_recognize_annouce_message_09"))
Text($r("app.string.face_recognize_announce_message_09"))
.fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
.width(Constants.DECLARE_MAX_WIDTH)
.textAlign(TextAlign.Start).margin({ bottom: Constants.DECLARE_ITEM_MARGIN_BOTTOM })
.lineHeight(Constants.DECLARE_TEXT_LINE_HEIGHT)
if (this.pattern == "2D") {
Text($r("app.string.face_annouce_tip1_item2_3d"))
Text($r("app.string.face_announce_tip1_item2_3d"))
.fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
.width(Constants.DECLARE_MAX_WIDTH)
.textAlign(TextAlign.Start).margin({ bottom: Constants.DECLARE_ITEM_MARGIN_BOTTOM })
.lineHeight(Constants.DECLARE_TEXT_LINE_HEIGHT)
Text() {
Span(Constants.DECLARE_TITLE_3).fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
Span($r("app.string.face_recognize_annouce_message_10")).fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
Span($r("app.string.face_recognize_announce_message_10")).fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
}
.width(Constants.DECLARE_MAX_WIDTH)
.textAlign(TextAlign.Start).margin({ bottom: Constants.DECLARE_ITEM_MARGIN_BOTTOM })
@ -97,7 +97,7 @@ export default struct EnrollDeclare {
Text() {
Span(Constants.DECLARE_TITLE_4).fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
Span($r("app.string.face_recognize_annouce_message_11")).fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
Span($r("app.string.face_recognize_announce_message_11")).fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
}
.width(Constants.DECLARE_MAX_WIDTH)
.textAlign(TextAlign.Start).margin({ bottom: Constants.DECLARE_ITEM_MARGIN_BOTTOM })
@ -105,7 +105,7 @@ export default struct EnrollDeclare {
Text() {
Span(Constants.DECLARE_TITLE_5).fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
Span($r("app.string.face_recognize_annouce_message_12")).fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
Span($r("app.string.face_recognize_announce_message_12")).fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
}
.width(Constants.DECLARE_MAX_WIDTH)
.textAlign(TextAlign.Start).margin({ bottom: Constants.DECLARE_ITEM_MARGIN_BOTTOM })
@ -113,7 +113,7 @@ export default struct EnrollDeclare {
} else if (this.pattern == "3D") {
Text() {
Span(Constants.DECLARE_TITLE_2).fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
Span($r("app.string.face_recognize_annouce_message_10")).fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
Span($r("app.string.face_recognize_announce_message_10")).fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
}
.width(Constants.DECLARE_MAX_WIDTH)
.textAlign(TextAlign.Start).margin({ bottom: Constants.DECLARE_ITEM_MARGIN_BOTTOM })
@ -121,7 +121,7 @@ export default struct EnrollDeclare {
Text() {
Span(Constants.DECLARE_TITLE_3).fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
Span($r("app.string.face_recognize_annouce_message_11")).fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
Span($r("app.string.face_recognize_announce_message_11")).fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
}
.width(Constants.DECLARE_MAX_WIDTH)
.textAlign(TextAlign.Start).margin({ bottom: Constants.DECLARE_ITEM_MARGIN_BOTTOM })
@ -129,7 +129,7 @@ export default struct EnrollDeclare {
Text() {
Span(Constants.DECLARE_TITLE_4).fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
Span($r("app.string.face_recognize_annouce_message_12")).fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
Span($r("app.string.face_recognize_announce_message_12")).fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
}
.width(Constants.DECLARE_MAX_WIDTH)
.textAlign(TextAlign.Start).margin({ bottom: Constants.DECLARE_ITEM_MARGIN_BOTTOM })
@ -137,7 +137,7 @@ export default struct EnrollDeclare {
}
Text($r("app.string.face_recognize_annouce_message_13"))
Text($r("app.string.face_recognize_announce_message_13"))
.fontSize(Constants.DECLARE_SECONDARY_TITLE_FONT_SIZE)
.width(Constants.DECLARE_MAX_WIDTH)
.textAlign(TextAlign.Start)
@ -145,15 +145,15 @@ export default struct EnrollDeclare {
Text() {
Span($r("app.string.face_recognize_annouce_message_14_1"))
Span($r("app.string.face_recognize_announce_message_14_1"))
.fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
Span($r("app.string.face_recognize_annouce_message_14_3"))
Span($r("app.string.face_recognize_announce_message_14_3"))
.fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
.fontWeight(FontWeight.Bold)
.fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
Span($r("app.string.face_recognize_annouce_message_14_2"))
Span($r("app.string.face_recognize_announce_message_14_2"))
.fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
Span($r("app.string.face_recognize_annouce_message_14_3"))
Span($r("app.string.face_recognize_announce_message_14_3"))
.fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
.fontWeight(FontWeight.Bold)
@ -164,10 +164,10 @@ export default struct EnrollDeclare {
.lineHeight(Constants.DECLARE_TEXT_LINE_HEIGHT)
Text() {
Span($r("app.string.face_recognize_annouce_message_15_1")).fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
Span($r("app.string.face_recognize_annouce_message_14_3")).fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
Span($r("app.string.face_recognize_announce_message_15_1")).fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
Span($r("app.string.face_recognize_announce_message_14_3")).fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
.fontWeight(FontWeight.Bold)
Span($r("app.string.face_recognize_annouce_message_15_2")).fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
Span($r("app.string.face_recognize_announce_message_15_2")).fontSize(Constants.DECLARE_TEXT_FONT_SIZE)
}
.width(Constants.DECLARE_MAX_WIDTH)
.textAlign(TextAlign.Start)

View File

@ -21,87 +21,87 @@
"value": "Feature description"
},
{
"name": "face_recognize_annouce_message_01",
"name": "face_recognize_announce_message_01",
"value": "Face Recognition is a biometric identification technology that allows your phone to recognize the features of your face. It uses the front camera to capture facial data, and then compares it to pre-stored data to quickly verify your identity. You can use this feature to unlock your device, open locked apps, and more."
},
{
"name": "face_recognize_annouce_message_02",
"name": "face_recognize_announce_message_02",
"value": "Please note the following when setting up this feature:"
},
{
"name": "face_recognize_annouce_message_03",
"name": "face_recognize_announce_message_03",
"value": "1.Make sure that the camera lens is clean."
},
{
"name": "face_recognize_annouce_message_04",
"name": "face_recognize_announce_message_04",
"value": "2.Scan your face in a well-lit environment, avoiding direct sunlight."
},
{
"name": "face_recognize_annouce_message_05",
"name": "face_recognize_announce_message_05",
"value": "3.Avoid covering your face with items of clothing, hair, sunglasses, masks, or thick makeup."
},
{
"name": "face_recognize_annouce_message_06",
"name": "face_recognize_announce_message_06",
"value": "4.Make sure your face is completely displayed in the frame. Look straight at the camera, and avoid raising and lowering your head or closing your eyes."
},
{
"name": "face_recognize_annouce_message_07",
"name": "face_recognize_announce_message_07",
"value": "5.Make sure that no one else appears in the frame."
},
{
"name": "face_recognize_annouce_message_08",
"name": "face_recognize_announce_message_08",
"value": "Please note the following when using Face Recognition:"
},
{
"name": "face_recognize_annouce_message_09",
"name": "face_recognize_announce_message_09",
"value": "1.Face Recognition may not work as well in dim, very bright, or backlit environments, or if the angle between your face and the camera is too great."
},
{
"name": "face_annouce_tip1_item2_3d",
"name": "face_announce_tip1_item2_3d",
"value": "2.Face Recognition is less secure than other unlock methods such as Pattern, PIN, and Password."
},
{
"name": "face_recognize_annouce_message_10",
"name": "face_recognize_announce_message_10",
"value": "There is a small chance that your device may be unlocked by people that closely resemble you or by objects that represent close depictions of your likeness."
},
{
"name": "face_recognize_annouce_message_11",
"name": "face_recognize_announce_message_11",
"value": "To prevent Face Recognition from being used without your consent, please exercise caution before allowing other people to use your device."
},
{
"name": "face_recognize_annouce_message_12",
"name": "face_recognize_announce_message_12",
"value": "The functionality of Face Recognition may also be affected in scenarios other than those described above."
},
{
"name": "face_recognize_annouce_message_13",
"name": "face_recognize_announce_message_13",
"value": "Privacy Statement"
},
{
"name": "face_recognize_annouce_message_14_1",
"name": "face_recognize_announce_message_14_1",
"value": "Your"
},
{
"name": "face_recognize_annouce_message_14_2",
"name": "face_recognize_announce_message_14_2",
"value": "is rigorously protected. This data is encrypted and stored in an isolated zone on your device, where it will not be copied by Huawei, and cannot be copied or accessed by any app. When you use Face Recognition in an app, the app is only informed whether or not verification is successful, and cannot access your actual"
},
{
"name": "face_recognize_annouce_message_14_3",
"name": "face_recognize_announce_message_14_3",
"value": "facial data"
},
{
"name": "face_recognize_annouce_message_15_1",
"name": "face_recognize_announce_message_15_1",
"value": "As the owner of your"
},
{
"name": "face_recognize_annouce_message_15_2",
"name": "face_recognize_announce_message_15_2",
"value": ", you are entitled to decide how you use the Face Recognition feature. For example, if you don't want to use Face Recognition to access App Lock, you can disable this feature in Settings. You can also choose to permanently delete your。"
},
{
"name": "face_recognize_annouce_message_15_3",
"name": "face_recognize_announce_message_15_3",
"value": "facial data"
},
{
"name": "face_recognize_annouce_message_15_4",
"name": "face_recognize_announce_message_15_4",
"value": "from your device."
},
{
@ -109,7 +109,7 @@
"value": "Statement About 3D Face Recognition"
},
{
"name": "face_3drecognize_annouce_message_01",
"name": "face_3drecognize_announce_message_01",
"value": "3D Face Recognition uses depth-sensing technology to create a sophisticated, three-dimensional model of your face, which can be used to verify your identity. This lets you securely unlock your device, confirm payments, and access features such as App Lock and Safe by simply looking at the screen. 3D Face Recognition is more secure and robust than 2D face recognition technologies, and can even be used in the dark."
}
,

View File

@ -328,79 +328,79 @@
"value": "功能介绍"
},
{
"name": "face_recognize_annouce_message_01",
"name": "face_recognize_announce_message_01",
"value": "人脸识别是一种基于人的脸部特征信息进行身份识别的生物识别技术。它通过手机前置摄像头捕捉人脸面部数据,进而快速完成面部特征比对和身份认证。可用于解锁屏幕、访问应用锁等场景。"
},
{
"name": "face_recognize_annouce_message_02",
"name": "face_recognize_announce_message_02",
"value": "录入面部数据时,需注意以下事项:"
},
{
"name": "face_recognize_annouce_message_03",
"name": "face_recognize_announce_message_03",
"value": "1.确保摄像头清洁;"
},
{
"name": "face_recognize_annouce_message_04",
"name": "face_recognize_announce_message_04",
"value": "2.在光线充足的环境下录入,但需避免强光直射;"
},
{
"name": "face_recognize_annouce_message_05",
"name": "face_recognize_announce_message_05",
"value": "3.勿用衣帽、头发、墨镜、口罩、浓妆等遮挡面部;"
},
{
"name": "face_recognize_annouce_message_06",
"name": "face_recognize_announce_message_06",
"value": "4.确保面部正面完整清晰地出现在提示框内,不要闭眼、大幅度仰头或低头"
},
{
"name": "face_recognize_annouce_message_07",
"name": "face_recognize_announce_message_07",
"value": "5.避免其他人出现在录入画面中。"
},
{
"name": "face_recognize_annouce_message_08",
"name": "face_recognize_announce_message_08",
"value": "任何技术都存在一定局限和风险,使用人脸识别时,需注意以下事项:"
},
{
"name": "face_recognize_annouce_message_09",
"name": "face_recognize_announce_message_09",
"value": "1.在暗光、强光、逆光或角度过大等场景下,人脸识别的成功率会有所降低;"
},
{
"name": "face_annouce_tip1_item2_3d",
"name": "face_announce_tip1_item2_3d",
"value": "2.人脸识别的安全性低于图案密码、数字密码、混合密码。;"
},
{
"name": "face_recognize_annouce_message_10",
"name": "face_recognize_announce_message_10",
"value": "您的设备可能会被容貌、外形与您相近的人或物品解锁;"
},
{
"name": "face_recognize_annouce_message_11",
"name": "face_recognize_announce_message_11",
"value": "请勿将设备随意交给他人使用,避免人脸识别功能被恶意利用;"
},
{
"name": "face_recognize_annouce_message_12",
"name": "face_recognize_announce_message_12",
"value": "除以上事项外,您还需注意其他可能影响人脸识别功能正常使用的情况。"
},
{
"name": "face_recognize_annouce_message_13",
"name": "face_recognize_announce_message_13",
"value": "隐私声明"
},
{
"name": "face_recognize_annouce_message_14_1",
"name": "face_recognize_announce_message_14_1",
"value": "您的"
},
{
"name": "face_recognize_annouce_message_14_2",
"name": "face_recognize_announce_message_14_2",
"value": "将受到严格保护。该数据仅加密保存于本设备的安全隔离区域,华为不会进行备份,其他应用也无法访问或备份。例如,您使用人脸识别进行应用内认证时,应用仅能收到认证是否成功的通知,而无法访问、备份或录入"
},
{
"name": "face_recognize_annouce_message_14_3",
"name": "face_recognize_announce_message_14_3",
"value": "面部数据。"
},
{
"name": "face_recognize_annouce_message_15_1",
"name": "face_recognize_announce_message_15_1",
"value": "您拥有人脸识别的自主控制权,可灵活控制人脸识别的使用及适用范围。例如,您不想使用人脸识别访问应用锁,在“设置”中将其关闭即可,此时人脸识别仍可用于其他操作,但不可用于进入应用锁。您还可彻底删除"
},
{
"name": "face_recognize_annouce_message_15_2",
"name": "face_recognize_announce_message_15_2",
"value": "删除后本设备将不再保存这些数据。"
},
{
@ -408,7 +408,7 @@
"value": "关于3D人脸识别的声明"
},
{
"name": "face_3drecognize_annouce_message_01",
"name": "face_3drecognize_announce_message_01",
"value": "3D人脸识别是新一代人脸识别技术。它通过深度感应技术捕捉更丰富的面部数据实现三维立体防伪识别。在暗光、逆光、无光等环境下也可用于解锁屏幕访问应用锁、保密柜及支付其安全性、准确率和环境适应性较传统人脸识别技术大幅提升。"
}