//特征提取 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; }
public static extern int ExtractFeature(IntPtr engine, ref ImageData imageData, ref FaceFeatureInput faceFeatureInput, out FaceModel faceModel);