Beispiel #1
0
        //特征提取
        private FaceModel ExtractFeature(Bitmap bitmap)
        {
            var detectResult = Detection(bitmap);
            var bmpData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height)
                , ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);

            var imageData = new ImageData
            {
                PixelArrayFormat = 513,//Rgb24,
                Width = bitmap.Width,
                Height = bitmap.Height,
                Pitch = new int[4] { bmpData.Stride, 0, 0, 0 },
                ppu8Plane = new IntPtr[4] { bmpData.Scan0, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero }
            };

            var FFI = new FaceFeatureInput();
            FFI.FaceRect = Marshal.PtrToStructure<FaceRect>(detectResult.PFaceRect);
            FFI.Orient = 1;
            FaceModel faceModel = new FaceModel() { Size = 22020, PFeature = Marshal.AllocCoTaskMem(22020) };
            faceModel.Size = 0;
            if (ArcWrapper.ExtractFeature(_REnginer, ref imageData, ref FFI, out var fm) == (int)ErrorCode.Ok)
            {
                faceModel.Size = fm.Size;
                ArcWrapper.CopyMemory(faceModel.PFeature, fm.PFeature, fm.Size);
            }

            return faceModel;
        }
Beispiel #2
0
 public static extern int ExtractFeature(IntPtr engine, ref ImageData imageData, ref FaceFeatureInput faceFeatureInput, out FaceModel faceModel);