/// <summary> /// 人脸特征比对 /// </summary> /// <param name="faceFeature1">特征1</param> /// <param name="faceFeature2">特征2</param> /// <param name="similarity">相似度</param> /// <param name="compareModel">ASF_LIFE_PHOTO:用于生活照之间的特征比对;ASF_ID_PHOTO:用于证件照或证件照和生活照之间的特征比对</param> /// <returns>返回0表示正常;返回负数请根据ErrorCodeUtil类注释查看;其他值请在官网-帮助中心查询</returns> public int ASFFaceFeatureCompare(FaceFeature faceFeature1, FaceFeature faceFeature2, out float similarity, ASF_CompareModel compareModel = ASF_CompareModel.ASF_LIFE_PHOTO) { similarity = 0f; if (faceFeature1 == null || faceFeature2 == null) { return(ErrorCodeUtil.FEATURE_IS_NULL); } #region 将特征对象转化为特征结构体,再转化为非托管内存 ASF_FaceFeature asfFeatureStruct1 = new ASF_FaceFeature(); asfFeatureStruct1.featureSize = faceFeature1.featureSize; asfFeatureStruct1.feature = MemoryUtil.Malloc(asfFeatureStruct1.featureSize); MemoryUtil.Copy(faceFeature1.feature, 0, asfFeatureStruct1.feature, asfFeatureStruct1.featureSize); IntPtr pFeature1 = MemoryUtil.Malloc(MemoryUtil.SizeOf <ASF_FaceFeature>()); MemoryUtil.StructureToPtr(asfFeatureStruct1, pFeature1); ASF_FaceFeature asfFeatureStruct2 = new ASF_FaceFeature(); asfFeatureStruct2.featureSize = faceFeature2.featureSize; asfFeatureStruct2.feature = MemoryUtil.Malloc(asfFeatureStruct2.featureSize); MemoryUtil.Copy(faceFeature2.feature, 0, asfFeatureStruct2.feature, asfFeatureStruct2.featureSize); IntPtr pFeature2 = MemoryUtil.Malloc(MemoryUtil.SizeOf <ASF_FaceFeature>()); MemoryUtil.StructureToPtr(asfFeatureStruct2, pFeature2); #endregion //调用SDK接口 int retCode = ASFFunctions.ASFFaceFeatureCompare(pEngine, pFeature1, pFeature2, ref similarity, compareModel); MemoryUtil.FreeArray(pFeature1, pFeature2, asfFeatureStruct1.feature, asfFeatureStruct2.feature); return(retCode); }
public static extern int ASFFaceFeatureCompare(IntPtr pEngine, IntPtr faceFeature1, IntPtr faceFeature2, ref float similarity, ASF_CompareModel compareModel = ASF_CompareModel.ASF_LIFE_PHOTO);
public static extern MResult ASFFaceFeatureCompare(IntPtr hEngine, ASF_FaceFeature faceFeature1, ASF_FaceFeature faceFeature2, out float confidenceLevel, ASF_CompareModel compareModel = ASF_CompareModel.ASF_LIFE_PHOTO);
public static extern int ASFFaceFeatureCompare(IntPtr pEngine, IntPtr faceFeature1, IntPtr faceFeature2, ref float confidenceLevel, ASF_CompareModel compareModel = ASF_CompareModel.ASF_LIFE_PHOTO);
/// <summary> /// 人脸特征比对,输出比对相似度。 /// </summary> /// <param name="feature1"></param> /// <param name="feature2"></param> /// <param name="compareModel"></param> /// <returns></returns> public float FaceFeatureCompare(ASF_FaceFeature feature1, ASF_FaceFeature feature2, ASF_CompareModel compareModel = ASF_CompareModel.ASF_LIFE_PHOTO) { ASFFunctions.ASFFaceFeatureCompare(EngineHandler, feature1, feature2, out float score, compareModel); return(score); }