跳到主要内容

faceComparator(人脸比对)

识别人脸,对人像进行高精度比对,给出置信度分数,判断对象是否为同一个人。人脸比对技术可应用于实现对图库照片的智能分类管理等场景中。基于领先的端侧智能图像识别算法,对人脸识别准确度高,让应用体验更好。

起始版本: 5.0.0(12)

导入模块

import { faceComparator } from '@kit.CoreVisionKit';

VisionInfo

待识别的视觉信息,目前仅支持颜色数据格式为RGBA_8888的PixelMap类型的视觉信息。

系统能力: SystemCapability.AI.Face.Comparator

起始版本: 5.0.0(12)

名称类型只读可选说明
pixelMapimage.PixelMap待识别的图片。 具体规格请参考约束与限制

FaceCompareResult

人脸比对的结果。

系统能力: SystemCapability.AI.Face.Comparator

起始版本: 5.0.0(12)

名称类型只读可选说明
isSamePersonboolean是否是同一个人,true代表为同一个人,false不是同一个人。
similaritynumber相似度,取值范围是(0,1)的浮点数。值越大说明相似程度越高。

faceComparator.init

init(): Promise<boolean>

初始化人脸比对分析器服务。使用Promise异步回调。

系统能力: SystemCapability.AI.Face.Comparator

起始版本: 5.0.0(12)

返回值:

类型说明
Promise<boolean>Promise对象,返回初始化是否成功。 true:初始化成功;false:初始化失败。

示例:

import { faceComparator } from '@kit.CoreVisionKit';
import { hilog } from '@kit.PerformanceAnalysisKit';

async function initAndReleaseFaceComparator() {
// 初始化人脸比较服务
const initResult = await faceComparator.init();
hilog.info(0x0000, 'faceComparatorSample', `Face comparator initialization result:${initResult}`);

if (initResult) {
hilog.info(0x0000, 'faceComparatorSample', 'Face comparator initialized successfully');

// 这里可以添加使用人脸比较服务的代码

// 使用完毕后,释放人脸比较服务
await faceComparator.release();
hilog.info(0x0000, 'faceComparatorSample', 'Face comparator released successfully');
} else {
hilog.error(0x0000, 'faceComparatorSample', 'Failed to initialize face comparator');
}
}

@Entry
@Component
struct Page {

build() {
Column(){
Button('initAndReleaseFaceComparator').onClick(() => {
// 调用函数
void initAndReleaseFaceComparator();
})
}
}
}

faceComparator.release

release(): Promise<void>

释放人脸比对分析器服务。使用Promise异步回调。

系统能力: SystemCapability.AI.Face.Comparator

起始版本: 5.0.0(12)

返回值:

类型说明
Promise<void>Promise对象,释放接口无返回值。

示例:

import { faceComparator } from '@kit.CoreVisionKit';
import { hilog } from '@kit.PerformanceAnalysisKit';

async function initAndReleaseFaceComparator() {
// 初始化人脸比较服务
const initResult = await faceComparator.init();
hilog.info(0x0000, 'faceComparatorSample', `Face comparator initialization result:${initResult}`);

if (initResult) {
hilog.info(0x0000, 'faceComparatorSample', 'Face comparator initialized successfully');

// 这里可以添加使用人脸比较服务的代码

// 使用完毕后,释放人脸比较服务
await faceComparator.release();
hilog.info(0x0000, 'faceComparatorSample', 'Face comparator released successfully');
} else {
hilog.error(0x0000, 'faceComparatorSample', 'Failed to initialize face comparator');
}
}

@Entry
@Component
struct Page {

build() {
Column(){
Button('initAndReleaseFaceComparator').onClick(() => {
// 调用函数
void initAndReleaseFaceComparator();
})
}
}
}

faceComparator.compareFaces

compareFaces(visionInfo1: VisionInfo, visionInfo2: VisionInfo): Promise<FaceCompareResult>

创建人脸比对实例,使用Promise异步回调。

系统能力: SystemCapability.AI.Face.Comparator

起始版本: 5.0.0(12)

参数:

参数名类型必填说明
visionInfo1VisionInfo第一张包含人脸的图片。
visionInfo2VisionInfo第二张包含人脸的图片。

返回值:

类型说明
Promise<FaceCompareResult>Promise对象,返回人脸比对的结果。

错误码:

以下错误码的详细介绍请参见Core Vision Kit错误码

错误码ID错误信息
200Run timed out, please try again later.
401The parameter check failed.
1008400001Failed to run, please try again.
1008400002The service is abnormal.

示例:

import { faceComparator } from '@kit.CoreVisionKit';
import { image } from '@kit.ImageKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { fileIo } from '@kit.CoreFileKit';
import { photoAccessHelper } from '@kit.MediaLibraryKit';

async function faceCompareTest() {
let chooseImage: PixelMap | undefined = undefined;
let chooseImage1: PixelMap | undefined = undefined;

// 从图库中选择两张图片
let PhotoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
PhotoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
PhotoSelectOptions.maxSelectNumber = 2;
let photoPicker: photoAccessHelper.PhotoViewPicker = new photoAccessHelper.PhotoViewPicker();
let PhotoSelectResult = await photoPicker.select(PhotoSelectOptions);
let uris = PhotoSelectResult.photoUris;

if (uris.length !== 2) {
hilog.info(0x0000, 'testTag', 'selected uris length is not 2');
return;
}

// 将选择的图片转换为PixelMap
let fileSource = await fileIo.open(uris[0], fileIo.OpenMode.READ_ONLY);
let imageSource = image.createImageSource(fileSource.fd);
chooseImage = await imageSource.createPixelMap();

fileSource = await fileIo.open(uris[1], fileIo.OpenMode.READ_ONLY);
imageSource = image.createImageSource(fileSource.fd);
chooseImage1 = await imageSource.createPixelMap();

if (!chooseImage || !chooseImage1) {
hilog.info(0x0000, 'testTag', 'chooseImage or chooseImage1 is undefined');
return;
}

// 调用人脸比对接口
let visionInfo: faceComparator.VisionInfo = {
pixelMap: chooseImage
};
let visionInfo1: faceComparator.VisionInfo = {
pixelMap: chooseImage1
};

let data: faceComparator.FaceCompareResult = await faceComparator.compareFaces(visionInfo, visionInfo1);
let similarity = (data.similarity * 100).toFixed(2);
let isSamePerson = data.isSamePerson ? 'is' : 'is not';
let faceString = `Similarity: ${similarity}%. ${isSamePerson} the same person`;
hilog.info(0x0000, 'testTag', 'faceString data is ' + faceString);

// 释放资源
if (chooseImage && chooseImage1) {
void chooseImage.release();
chooseImage1.release();
}
if (fileSource) {
try {
await fileIo.close(fileSource);
} catch (err) {
hilog.error(0x0000, 'testTag', `Failed to close fileSource. Code: ${err.code}, message: ${err.message}`);
}
}
}

@Entry
@Component
struct Page {

build() {
Column(){
Button('faceCompareTest').onClick(() => {
faceCompareTest().catch((err: BusinessError) => {
hilog.error(0x0000, 'faceCompareSample', `Failed to compare faces. Code: ${err.code}, message: ${err.message}`);
});
})
}
}
}