コード例 #1
0
        /// <summary>
        /// 人脸3D角度检测
        /// </summary>
        /// <param name="pEngine">引擎Handle</param>
        /// <param name="imageInfo">图像数据</param>
        /// <param name="multiFaceInfo">检测的人脸信息</param>
        /// <returns>人脸3D角度检测结果结构体</returns>
        public static Face3DAngle Face3DAngleDetection(FaceEngine faceEngine, Image image, MultiFaceInfo multiFaceInfo, out int retCode)
        {
            retCode = -1;
            Face3DAngle face3DAngle = new Face3DAngle();

            try
            {
                if (multiFaceInfo.faceNum <= 0)
                {
                    return(face3DAngle);
                }

                //人脸信息检测
                retCode = faceEngine.ASFProcessEx(image, multiFaceInfo, FaceEngineMask.ASF_FACE3DANGLE);
                if (retCode == 0)
                {
                    //获取人脸3D角度
                    retCode = faceEngine.ASFGetFace3DAngle(out face3DAngle);
                }
            }
            catch (Exception ex)
            {
                LogUtil.LogInfo(typeof(FaceUtil), ex);
            }
            return(face3DAngle);
        }
コード例 #2
0
        /// <summary>
        /// 获取3D角度信息
        /// </summary>
        /// <param name="pEngine">引擎handle</param>
        /// <param name="faceAngle">3D角度信息结果</param>
        /// <returns>返回0表示正常;返回负数请根据ErrorCodeUtil类注释查看;其他值请在官网-帮助中心查询</returns>
        public int ASFGetFace3DAngle(out Face3DAngle faceAngle)
        {
            faceAngle = new Face3DAngle();
            IntPtr pFaceAngle = MemoryUtil.Malloc(MemoryUtil.SizeOf <ASF_Face3DAngle>());
            //调用SDK接口
            int retCode = ASFFunctions.ASFGetFace3DAngle(pEngine, pFaceAngle);

            if (retCode != 0)
            {
                MemoryUtil.Free(pFaceAngle);
                return(retCode);
            }
            //转化结果
            ASF_Face3DAngle asfFaceAngle = MemoryUtil.PtrToStructure <ASF_Face3DAngle>(pFaceAngle);

            faceAngle.num = asfFaceAngle.num;
            if (faceAngle.num > 0)
            {
                faceAngle.pitch = new float[faceAngle.num];
                Marshal.Copy(asfFaceAngle.pitch, faceAngle.pitch, 0, faceAngle.num);
                faceAngle.roll = new float[faceAngle.num];
                Marshal.Copy(asfFaceAngle.roll, faceAngle.roll, 0, faceAngle.num);
                faceAngle.yaw = new float[faceAngle.num];
                Marshal.Copy(asfFaceAngle.yaw, faceAngle.yaw, 0, faceAngle.num);
                faceAngle.status = new int[faceAngle.num];
                Marshal.Copy(asfFaceAngle.status, faceAngle.status, 0, faceAngle.num);
            }
            MemoryUtil.FreeArray(pFaceAngle);
            return(retCode);
        }
コード例 #3
0
        /// <summary>
        /// 获取3D角度信息。
        /// </summary>
        /// <returns></returns>
        public List <Face3DAngle> GetFace3DAngle()
        {
            var result = ASFFunctions.ASFGetFace3DAngle(EngineHandler, out ASF_Face3DAngle face3DAngle);

            if (result == MResult.MOK)
            {
                var     Face3DAngles = new List <Face3DAngle>();
                float[] _roll        = new float[face3DAngle.num];
                float[] _yaw         = new float[face3DAngle.num];
                float[] _pitch       = new float[face3DAngle.num];
                int[]   _status      = new int[face3DAngle.num];
                Marshal.Copy(face3DAngle.roll, _roll, 0, face3DAngle.num);
                Marshal.Copy(face3DAngle.yaw, _yaw, 0, face3DAngle.num);
                Marshal.Copy(face3DAngle.pitch, _pitch, 0, face3DAngle.num);
                Marshal.Copy(face3DAngle.status, _status, 0, face3DAngle.num);
                for (int i = 0; i < face3DAngle.num; i++)
                {
                    var angle = new Face3DAngle
                    {
                        pitch  = _pitch[i],
                        roll   = _roll[i],
                        status = _status[i],
                        yaw    = _yaw[i]
                    };
                    Face3DAngles.Add(angle);
                }
                return(Face3DAngles);
            }
            return(null);
        }