차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
ko:bs2_scanface [2020/10/22 09:42] kkshin |
ko:bs2_scanface [2024/05/28 19:44] (현재) kkshin |
||
---|---|---|---|
줄 5: | 줄 5: | ||
===== BS2_ScanFace===== | ===== BS2_ScanFace===== | ||
- | ''FaceStation2'' 장치에서 얼굴을 스캔하고 템플릿 데이터와 이미지 데이터를 추출합니다. | + | ''IR Face 기반'' 장치에서 얼굴을 스캔하고 템플릿 데이터와 이미지 데이터를 추출합니다. |
==== 함수 ==== | ==== 함수 ==== | ||
<code cpp> | <code cpp> | ||
줄 25: | 줄 25: | ||
성공적으로 수행될 경우 ''BS_SDK_SUCCESS''를 반환하고, 에러가 발생할 경우 상응하는 에러 코드를 반환합니다. | 성공적으로 수행될 경우 ''BS_SDK_SUCCESS''를 반환하고, 에러가 발생할 경우 상응하는 에러 코드를 반환합니다. | ||
\\ | \\ | ||
+ | ==== 샘플코드 ==== | ||
+ | C++ | ||
+ | <code cpp> | ||
+ | if (faceScanSupported) | ||
+ | { | ||
+ | if (Utility::isYes("Do you want to scan face?")) | ||
+ | { | ||
+ | uint32_t numFace = Utility::getInput<uint32_t>("How many face would you like to register?"); | ||
+ | BS2Face* ptrFace = new BS2Face[numFace]; | ||
+ | if (ptrFace) | ||
+ | { | ||
+ | userBlob.faceObjs = ptrFace; | ||
+ | for (uint32_t index = 0; index < numFace;) | ||
+ | { | ||
+ | sdkResult = BS2_ScanFace(context_, id, &ptrFace[index], BS2_FACE_ENROLL_THRESHOLD_DEFAULT, | ||
+ | onReadyToScanFace); | ||
+ | if (BS_SDK_SUCCESS != sdkResult) | ||
+ | TRACE("BS2_ScanFace call failed: %d", sdkResult); | ||
+ | else | ||
+ | { | ||
+ | user.numFaces++; | ||
+ | index++; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | BS2_ReleaseObject(uidObj); | ||
+ | </code> | ||
+ | C# | ||
+ | <code cpp> | ||
+ | if (faceScanSupported) | ||
+ | { | ||
+ | Console.WriteLine("Do you want to scan face? [y/n]"); | ||
+ | Console.Write(">> "); | ||
+ | if (Util.IsYes()) | ||
+ | { | ||
+ | Console.WriteLine("How many face would you like to register?"); | ||
+ | Console.Write(">> "); | ||
+ | int numOfFace = Util.GetInput(1); | ||
+ | if (0 < numOfFace) | ||
+ | { | ||
+ | int structSize = Marshal.SizeOf(typeof(BS2Face)); | ||
+ | BS2Face[] face = Util.AllocateStructureArray<BS2Face>(1); | ||
+ | userBlob[0].faceObjs = Marshal.AllocHGlobal(structSize * numOfFace); | ||
+ | IntPtr curFaceObjs = userBlob[0].faceObjs; | ||
+ | cbFaceOnReadyToScan = new API.OnReadyToScan(ReadyToScanForFace); | ||
+ | for (int index = 0; index < numOfFace;) | ||
+ | { | ||
+ | sdkResult = (BS2ErrorCode)API.BS2_ScanFace(sdkContext, deviceID, face, (byte)BS2FaceEnrollThreshold.THRESHOLD_DEFAULT, cbFaceOnReadyToScan); | ||
+ | if (BS2ErrorCode.BS_SDK_SUCCESS != sdkResult) | ||
+ | Console.WriteLine("BS2_ScanFace call failed: %d", sdkResult); | ||
+ | else | ||
+ | { | ||
+ | userBlob[0].user.numFaces++; | ||
+ | index++; | ||
+ | face[0].faceIndex = (byte)index; | ||
+ | Marshal.StructureToPtr(face[0], curFaceObjs, false); | ||
+ | curFaceObjs += structSize; | ||
+ | |||
+ | Thread.Sleep(100); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | cbFaceOnReadyToScan = null; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </code> |