/// <summary> /// 人脸检测(PS:检测RGB图像的人脸时,必须保证图像的宽度能被4整除,否则会失败) /// </summary> /// <param name="pEngine">引擎Handle</param> /// <param name="imageInfo">图像数据</param> /// <returns>人脸检测结果</returns> public static ASF_MultiFaceInfo DetectFace(IntPtr pEngine, ImageInfo imageInfo) { ASF_MultiFaceInfo multiFaceInfo = new ASF_MultiFaceInfo(); IntPtr pMultiFaceInfo = MemoryUtil.Malloc(MemoryUtil.SizeOf <ASF_MultiFaceInfo>()); int retCode = ASFFunctions.ASFDetectFaces(pEngine, imageInfo.width, imageInfo.height, imageInfo.format, imageInfo.imgData, pMultiFaceInfo); multiFaceInfo = MemoryUtil.PtrToStructure <ASF_MultiFaceInfo>(pMultiFaceInfo); return(multiFaceInfo); }
/// <summary> /// 人脸检测 /// 检测RGB图像的人脸时,必须保证图像的宽度能被4整除,否则会失败 /// </summary> /// <param name="pEngine">引擎</param> /// <param name="imageInfo">图像数据</param> /// <returns></returns> public static ASF_MultiFaceInfo DetectFace(IntPtr pEngine, ImageInfo imageInfo) { //创建多张人脸的数据结构体 ASF_MultiFaceInfo multiFaceInfo = new ASF_MultiFaceInfo(); //创建一个指针可以指向MultiFaceInfo结构 IntPtr pMultiFaceInfo = MemoryUtil.Malloc(MemoryUtil.SizeOf <ASF_MultiFaceInfo>()); int retCode = ASFFunctions.ASFDetectFaces(pEngine, imageInfo.width, imageInfo.height, imageInfo.format, imageInfo.imgData, pMultiFaceInfo); //当人脸识别错误,则释放内存,返回一个默认的结构 if (retCode != 0) { MemoryUtil.Free(pMultiFaceInfo); pMultiFaceInfo = IntPtr.Zero; return(multiFaceInfo); } //将从C++程序集得到的多人脸结构内存转义成C#的多人脸结构体中 multiFaceInfo = MemoryUtil.PtrToStructure <ASF_MultiFaceInfo>(pMultiFaceInfo); MemoryUtil.Free(pMultiFaceInfo); pMultiFaceInfo = IntPtr.Zero; return(multiFaceInfo); }