차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
ko:bs2_extracetemplatefaceex [2022/06/27 16:20]
mark [샘플코드]
ko:bs2_extracetemplatefaceex [2023/11/02 09:45] (현재)
kkshin
줄 5: 줄 5:
  
 ===== BS2_ExtractTemplateFaceEx ===== ===== BS2_ExtractTemplateFaceEx =====
-[+ 2.7.1] ''​FaceStation F2''​ 얼굴이 포함된 이미지를 가지고, template을 추출합니다. \\+[+ 2.7.1] ''​FaceStation F2''​ ''​BioStation 3''​ 얼굴이 포함된 이미지를 가지고, template을 추출합니다. \\
 AOC 카드에 template을 담기 위해 사용합니다. AOC 카드에 template을 담기 위해 사용합니다.
 +<callout type="​warning"​ icon="​true">​
 +**주의 사항** \\
 +[[BS2_GetNormalizedImageFaceEx]]를 통해 추출된 이미지를 전달하여야 합니다.
 +</​callout>​
 +
 ==== 함수 ==== ==== 함수 ====
 <code cpp> <code cpp>
줄 27: 줄 32:
 성공적으로 수행될 경우 ''​BS_SDK_SUCCESS''​를 반환하고,​ 에러가 발생할 경우 상응하는 에러 코드를 반환합니다. ​ 성공적으로 수행될 경우 ''​BS_SDK_SUCCESS''​를 반환하고,​ 에러가 발생할 경우 상응하는 에러 코드를 반환합니다. ​
 \\  ​ \\  ​
-==== 샘플코드 ==== 
-C++ 
-<code cpp> 
-int UserControl::​extractTemplateFaceEx(BS2_DEVICE_ID id, BS2TemplateEx&​ templateEx) 
-{ 
- BS2SimpleDeviceInfoEx deviceInfoEx = { 0, }; 
- 
- int sdkResult = BS2_GetDeviceInfoEx(context_,​ id, NULL, &​deviceInfoEx);​ 
- if (BS_SDK_SUCCESS != sdkResult) 
- { 
- TRACE("​BS2_GetDeviceInfoEx call failed: %d", sdkResult); 
- return sdkResult; 
- } 
- 
- bool faceExScanSupported = (deviceInfoEx.supported & BS2SimpleDeviceInfoEx::​BS2_SUPPORT_FACE_EX_SCAN) ==  
-        BS2SimpleDeviceInfoEx::​BS2_SUPPORT_FACE_EX_SCAN;​ 
- if (faceExScanSupported) 
- { 
- try 
- { 
- if (Utility::​isYes("​Do you want to extract faceEx template from image?"​)) 
- { 
- string imagePath = Utility::​getInput<​string>​("​Enter the face image path and name:"​);//​C:​\88withphone.jpg 
- uint32_t size = Utility::​getResourceSize(imagePath);​ 
- shared_ptr<​uint8_t>​ buffer(new uint8_t[size],​ ArrayDeleter<​uint8_t>​());​ 
- 
- size_t dataOffset = offsetof(BS2FaceEx,​ rawImageData);​ 
- size_t faceSize = dataOffset + size; 
- if (Utility::​getResourceFromFile(imagePath,​ buffer, size)) 
- { 
- sdkResult = BS2_ExtractTemplateFaceEx(context_,​ id, buffer.get(),​ size, 0, &​templateEx);​ 
- if (BS_SDK_SUCCESS != sdkResult) 
- { 
- TRACE("​BS2_ExtractTemplateFaceEx call failed: %d", sdkResult); 
- return sdkResult; 
- } 
- print(templateEx);​ 
- } 
- } 
- } 
- catch (const std::​exception&​) 
- { 
- 
- } 
- } 
- 
- return sdkResult; 
-} 
-BS2_ReleaseObject(uidObj);​ 
-</​code>​ 
-C# 
-<code cpp> 
-Console.WriteLine("​Do you want to register from image? [y/​n]"​);​ 
-Console.Write(">>​ "); 
-if (Util.IsYes()) 
-{ 
- Console.WriteLine("​Enter the face image path and name:"​);​ 
- Console.Write(">>​ "); 
- string imagePath = Console.ReadLine();​ 
- 
-    if (!File.Exists(imagePath)) 
-    { 
-        Console.WriteLine("​Invalid file path"​);​ 
-        return; 
-    } 
- 
-    Image faceImage = Image.FromFile(imagePath);​ 
-    if (!faceImage.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg)) 
-    { 
-        Console.WriteLine("​Invalid image file format"​);​ 
-        return; 
-    } 
-                        ​ 
-    IntPtr imageData = IntPtr.Zero;​ 
- UInt32 imageLen = 0; 
-    if (Util.LoadBinary(imagePath,​ out imageData, out imageLen)) 
-    { 
-        if (0 == imageLen) 
-        { 
-            Console.WriteLine("​Empty image file"​);​ 
-            return; 
-        } 
- 
-        int structHeaderSize = Marshal.SizeOf(typeof(BS2FaceExUnwarped));​ 
-        int totalSize = structHeaderSize + (int)imageLen;​ 
-        userBlob[0].faceExObjs = Marshal.AllocHGlobal(totalSize);​ 
-        IntPtr curFaceExObjs = userBlob[0].faceExObjs;​ 
- 
-        BS2FaceExUnwarped unwarped = Util.AllocateStructure<​BS2FaceExUnwarped>​();​ 
-        unwarped.flag = 0; 
-        unwarped.imageLen = imageLen; 
- 
- Marshal.StructureToPtr(unwarped,​ curFaceExObjs,​ false); 
- curFaceExObjs += structHeaderSize;​ 
- 
-        Util.CopyMemory(curFaceExObjs,​ imageData, imageLen); 
- 
-        userBlob[0].user.numFaces = 1; 
-        unwarpedMemory = true; 
- } 
-} 
-</​code>​