Exemplo n.º 1
0
 /// <summary>
 /// 释放引擎Handler
 /// </summary>
 /// <returns></returns>
 public static bool DisposeEngine()
 {
     if (hEngine != null)
     {
         try
         {
             ResultCode result = (ResultCode)ASFAPI.ASFUninitEngine(hEngine);
             if (result == ResultCode.成功)
             {
                 return(true);
             }
             else
             {
                 throw new Exception(result.ToString());
             }
         }
         catch (Exception ex)
         {
             throw ex;
         }
         finally
         {
             //Marshal.FreeHGlobal(hEngine);
         }
     }
     return(true);
 }
Exemplo n.º 2
0
        /// <summary>
        /// 人脸比对
        /// </summary>
        /// <param name="data1">第一张人脸数据</param>
        /// <param name="data2">第二张人脸数据</param>
        /// <returns></returns>
        public float Compare(byte[] data1, byte[] data2)
        {
            try
            {
                FaceFeature feature1 = new FaceFeature();
                feature1.feature = Marshal.AllocHGlobal(data1.Length);
                Marshal.Copy(data1, 0, feature1.feature, data1.Length);
                feature1.featureSize = data1.Length;
                IntPtr pLocalFeature1 = Marshal.AllocHGlobal(Marshal.SizeOf(feature1));
                Marshal.StructureToPtr(feature1, pLocalFeature1, false);

                FaceFeature feature2 = new FaceFeature();
                feature2.feature = Marshal.AllocHGlobal(data2.Length);
                Marshal.Copy(data2, 0, feature2.feature, data2.Length);
                feature2.featureSize = data2.Length;
                IntPtr pLocalFeature2 = Marshal.AllocHGlobal(Marshal.SizeOf(feature2));
                Marshal.StructureToPtr(feature2, pLocalFeature2, false);
                float similar = 0.0f;

                ASFAPI.ASFFaceFeatureCompare(hEngine, pLocalFeature1, pLocalFeature2, out similar);
                return(similar);
            }
            catch (Exception ex)
            {
                return(0.0f);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// 获取年龄信息
        /// </summary>
        /// <returns></returns>
        public int GetAge()
        {
            var faceinfo = DetectFaces();

            if (faceinfo.faceOrient == IntPtr.Zero || faceinfo.faceRect == IntPtr.Zero)
            {
                return(0);
            }

            var processResult = ASFAPI.ASFProcess(hEngine, bitmapImage.Width, bitmapImage.Height, bitmapImage.Format, bitmapImage.ImageData, faceinfo, (int)(EngineMode.年龄识别));

            if (processResult != (int)ResultCode.成功)
            {
                return(0);
            }

            AgeInfo age       = new AgeInfo();
            var     ageResult = ASFAPI.ASFGetAge(hEngine, ref age);

            if (ageResult != (int)ResultCode.成功)
            {
                return(0);
            }

            int[] ageArray = new int[age.num];
            Marshal.Copy(age.ageArray, ageArray, 0, ageArray.Length);
            return(ageArray[0]);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 获取年龄信息
        /// </summary>
        /// <returns></returns>
        public int GetAge()
        {
            var faceinfo = DetectFaces();

            ASFAPI.ASFProcess(hEngine, bitmapImage.Width, bitmapImage.Height, bitmapImage.Format, bitmapImage.ImageData, faceinfo, (int)(EngineMode.年龄识别));
            AgeInfo age = new AgeInfo();

            ASFAPI.ASFGetAge(hEngine, ref age);
            int[] ageArray = new int[age.num];
            Marshal.Copy(age.ageArray, ageArray, 0, ageArray.Length);
            return(ageArray[0]);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 获取人脸特征
        /// </summary>
        /// <returns></returns>
        public byte[] getFaceFeature(Bitmap image)
        {
            BitmapImage bitmapImage   = null;
            var         multiFaceInfo = DetectFaces(image, out bitmapImage);

            if (multiFaceInfo.faceNum == 0 || multiFaceInfo.faceOrient == IntPtr.Zero || multiFaceInfo.faceRect == IntPtr.Zero)
            {
                return(null);
            }

            SingleFaceInfo info  = new SingleFaceInfo();
            Mrect          mrect = new Mrect();

            int[] orientArray = new int[multiFaceInfo.faceNum];
            Marshal.Copy(multiFaceInfo.faceOrient, orientArray, 0, orientArray.Length);
            info.faceOrient = orientArray[0];

            byte[] byteArray = new byte[4 * 4];
            Marshal.Copy(multiFaceInfo.faceRect, byteArray, 0, byteArray.Length);
            int    size   = Marshal.SizeOf(mrect);
            IntPtr buffer = Marshal.AllocHGlobal(size);

            try
            {
                Marshal.Copy(byteArray, 0, buffer, size);
                mrect = (Mrect)Marshal.PtrToStructure(buffer, typeof(Mrect));
            }
            finally
            {
                Marshal.FreeHGlobal(buffer);
            }
            info.faceRect = mrect;

            FaceFeature feature = new FaceFeature();
            IntPtr      ptr1    = Marshal.AllocHGlobal(Marshal.SizeOf(info));

            Marshal.StructureToPtr(info, ptr1, false);
            var result = ASFAPI.ASFFaceFeatureExtract(hEngine, bitmapImage.Width, bitmapImage.Height, bitmapImage.Format, bitmapImage.ImageData, ptr1, ref feature);

            Marshal.FreeHGlobal(ptr1);
            byte[] data = null;
            if (result == 0 && feature.featureSize > 0 && feature.feature != IntPtr.Zero)
            {
                data = new byte[1032];
                Marshal.Copy(feature.feature, data, 0, 1032);
                return(data);
            }
            else
            {
                return(null);
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// 人脸比对
        /// </summary>
        /// <param name="data1">第一张人脸数据</param>
        /// <param name="data2">第二张人脸数据</param>
        /// <returns></returns>
        public float Compare(byte[] data1, byte[] data2)
        {
            FaceFeature feature1 = new FaceFeature();
            FaceFeature feature2 = new FaceFeature();
            IntPtr      ptr1     = Marshal.AllocHGlobal(data1.Length);
            IntPtr      ptr2     = Marshal.AllocHGlobal(data2.Length);

            Marshal.Copy(data1, 0, ptr1, data1.Length);
            Marshal.Copy(data2, 0, ptr2, data2.Length);
            feature1.feature     = ptr1;
            feature1.featureSize = 1032;
            feature2.feature     = ptr2;
            feature2.featureSize = 1032;
            float similar = 0.0f;

            ASFAPI.ASFFaceFeatureCompare(hEngine, feature1, feature2, ref similar);
            return(similar);
        }
Exemplo n.º 7
0
 /// <summary>
 /// 获得引擎Handler
 /// </summary>
 /// <param name="mode">模式(图像/视频流)</param>
 /// <param name="orientPriority">检测方向的优先级</param>
 /// <param name="detectFaceScaleVal">数值化的最小人脸尺寸</param>
 /// <returns></returns>
 public static IntPtr GetEngineInstance(uint mode, DetectionOrientPriority orientPriority, int detectFaceScaleVal = 12)
 {
     hEngine = IntPtr.Zero;
     try
     {
         ResultCode result = (ResultCode)ASFAPI.ASFInitEngine(mode, (int)orientPriority, detectFaceScaleVal, 50, (int)(EngineMode.人脸检测 | EngineMode.人脸识别 | EngineMode.性别识别 | EngineMode.年龄识别 | EngineMode.角度识别), ref hEngine);
         if (result == ResultCode.成功)
         {
             return(hEngine);
         }
         else
         {
             throw new Exception(result.ToString());
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
Exemplo n.º 8
0
        /// <summary>
        /// 获取性别信息
        /// </summary>
        /// <returns></returns>
        public string GetGender()
        {
            var faceinfo = DetectFaces();

            ASFAPI.ASFProcess(hEngine, bitmapImage.Width, bitmapImage.Height, bitmapImage.Format, bitmapImage.ImageData, faceinfo, (int)(EngineMode.性别识别));
            GenderInfo gender = new GenderInfo();

            ASFAPI.ASFGetGender(hEngine, ref gender);
            int[] genderArray = new int[gender.num];
            Marshal.Copy(gender.genderArray, genderArray, 0, genderArray.Length);
            switch (genderArray[0])
            {
            case 0:
                return("男");

            case 1:
                return("女");

            default:
                return("未知");
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// 获取性别信息
        /// </summary>
        /// <returns></returns>
        public string GetGender()
        {
            var faceinfo = DetectFaces();

            if (faceinfo.faceOrient == IntPtr.Zero || faceinfo.faceRect == IntPtr.Zero)
            {
                return("未知");
            }

            var processResult = ASFAPI.ASFProcess(hEngine, bitmapImage.Width, bitmapImage.Height, bitmapImage.Format, bitmapImage.ImageData, faceinfo, (int)(EngineMode.性别识别));

            if (processResult != (int)ResultCode.成功)
            {
                return("未知");
            }

            GenderInfo gender       = new GenderInfo();
            var        genderResult = ASFAPI.ASFGetGender(hEngine, ref gender);

            if (genderResult != (int)ResultCode.成功 || gender.num <= 0)
            {
                return("未知");
            }

            int[] genderArray = new int[gender.num];
            Marshal.Copy(gender.genderArray, genderArray, 0, genderArray.Length);
            switch (genderArray[0])
            {
            case 0:
                return("男");

            case 1:
                return("女");

            default:
                return("未知");
            }
        }
Exemplo n.º 10
0
 /// <summary>
 /// 释放引擎Handler
 /// </summary>
 /// <returns></returns>
 public static bool DisposeEngine()
 {
     if (hEngine != IntPtr.Zero)
     {
         try
         {
             ResultCode result = (ResultCode)ASFAPI.ASFUninitEngine(hEngine);
             if (result == ResultCode.成功)
             {
                 return(true);
             }
             else
             {
                 throw new Exception(result.ToString());
             }
         }
         catch (Exception ex)
         {
             throw ex;
         }
     }
     return(true);
 }
Exemplo n.º 11
0
        /// <summary>
        /// 获取人脸检测结果
        /// </summary>
        /// <param name="image"></param>
        /// <param name="bitmapImage"></param>
        /// <returns></returns>
        public MultiFaceInfo DetectFaces(Bitmap image, out BitmapImage bitmapImage)
        {
            bitmapImage = new BitmapImage(image);
            bitmapImage.ParseImage();
            MultiFaceInfo faceInfo = new MultiFaceInfo();

            try
            {
                ResultCode result = (ResultCode)ASFAPI.ASFDetectFaces(hEngine, bitmapImage.Width, bitmapImage.Height, bitmapImage.Format, bitmapImage.ImageData, ref faceInfo);
                if (result == ResultCode.成功)
                {
                    return(faceInfo);
                }
                else
                {
                    throw new Exception(result.ToString());
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Exemplo n.º 12
0
        /// <summary>
        /// 激活引擎
        /// </summary>
        /// <param name="appId">appid</param>
        /// <param name="appKey">appkey</param>
        /// <returns>激活结果</returns>
        public static ResultCode ActivateEngine(string appId, string appKey)
        {
            int result = ASFAPI.ASFActivation(appId, appKey);

            return((ResultCode)result);
        }