차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
|
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> | ||