Motivo de este documento:
Al llamar a la función ScanFaceEx, algún usuario desea guardar o ver la imagen WARPED directamente (para verificar que FACE se ha guardado después de ScanFace)
Cómo usar y código de ejemplo:
La imagen se almacena en esa ruta en formato {0}-{1}.jpg.
if (Util.IsYes()) { Console.WriteLine("How many faceEx would you like to register?"); Console.Write(">> "); int numOfFace = Util.GetInput(1); if (0 < numOfFace) { int structSize = Marshal.SizeOf(typeof(BS2FaceExWarped)); BS2FaceExWarped[] faceEx = Util.AllocateStructureArray<BS2FaceExWarped>(1); userBlob[0].faceExObjs = Marshal.AllocHGlobal(structSize * numOfFace); IntPtr curFaceExObjs = userBlob[0].faceExObjs; cbFaceOnReadyToScan = new API.OnReadyToScan(ReadyToScanForFace);
for (int index = 0; index < numOfFace;) { sdkResult = (BS2ErrorCode)API.BS2_ScanFaceEx(sdkContext, deviceID, faceEx, (byte)BS2FaceEnrollThreshold.THRESHOLD_DEFAULT, cbFaceOnReadyToScan); if (BS2ErrorCode.BS_SDK_SUCCESS != sdkResult) Console.WriteLine("BS2_ScanFaceEx call failed: %d", sdkResult); else { Console.WriteLine("Do you want to save warpped image? [y/n]"); Console.Write(">> "); if (Util.IsYes()) { int written = 0; int size = (int)faceEx[0].imageLen; IntPtr imgPtr = Marshal.AllocHGlobal(size); Marshal.Copy(faceEx[index].imageData, 0, imgPtr, size); FileStream file = new FileStream(String.Format("{0}-{1}.jpg", userID, index), FileMode.Create, FileAccess.Write); WriteFile(file.Handle, imgPtr, (int)faceEx[index].imageLen, out written, IntPtr.Zero); file.Close(); } userBlob[0].user.numFaces++; index++; faceEx[0].faceIndex = (byte)index; Marshal.StructureToPtr(faceEx[0], curFaceExObjs, false); curFaceExObjs += structSize;
Thread.Sleep(100); } }
cbFaceOnReadyToScan = null; } }
C
Resultado:
Por favor descargue el adjunto y úselo como referencia.
7