차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
|
ko:bs2_scanfaceex [2020/09/22 15:02] kkshin |
ko:bs2_scanfaceex [2024/05/28 19:48] (현재) kkshin |
||
|---|---|---|---|
| 줄 5: | 줄 5: | ||
| ===== BS2_ScanFaceEx ===== | ===== BS2_ScanFaceEx ===== | ||
| - | [+ V2.7.1] ''FaceStation F2'' 장치에서 얼굴을 스캔하고 이미지 및 템플릿 데이터를 추출합니다. | + | [+ 2.7.1] ''Visual Face 기반'' 장치에서 얼굴을 스캔하고 이미지 및 템플릿 데이터를 추출합니다. |
| ==== 함수 ==== | ==== 함수 ==== | ||
| <code cpp> | <code cpp> | ||
| 줄 24: | 줄 24: | ||
| ==== 반환값 ==== | ==== 반환값 ==== | ||
| 성공적으로 수행될 경우 ''BS_SDK_SUCCESS''를 반환하고, 에러가 발생할 경우 상응하는 에러 코드를 반환합니다. | 성공적으로 수행될 경우 ''BS_SDK_SUCCESS''를 반환하고, 에러가 발생할 경우 상응하는 에러 코드를 반환합니다. | ||
| - | \\ | + | |
| + | ==== 샘플코드 ==== | ||
| + | C++ | ||
| + | <code cpp> | ||
| + | int UserControl::scanFaceEx(BS2_DEVICE_ID id, BS2FaceEx* ptrFace, uint8_t& numOfFace) | ||
| + | { | ||
| + | if (!ptrFace) | ||
| + | return BS_SDK_ERROR_INVALID_PARAM; | ||
| + | |||
| + | const int MAX_RETRY = 2; | ||
| + | int sdkResult = BS_SDK_SUCCESS; | ||
| + | int retryCount = 0; | ||
| + | |||
| + | while (retryCount < MAX_RETRY) | ||
| + | { | ||
| + | sdkResult = BS2_ScanFaceEx(context_, id, ptrFace, BS2_FACE_ENROLL_THRESHOLD_DEFAULT, onReadyToScanFace); | ||
| + | if (BS_SDK_SUCCESS != sdkResult) | ||
| + | { | ||
| + | TRACE("BS2_ScanFaceEx call failed: %d", sdkResult); | ||
| + | retryCount++; | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | numOfFace++; | ||
| + | break; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | return sdkResult; | ||
| + | } | ||
| + | |||
| + | BS2_ReleaseObject(uidObj); | ||
| + | </code> | ||
| + | C# | ||
| + | <code cpp> | ||
| + | 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 | ||
| + | { | ||
| + | userBlob[0].user.numFaces++; | ||
| + | index++; | ||
| + | faceEx[0].faceIndex = (byte)index; | ||
| + | Marshal.StructureToPtr(faceEx[0], curFaceExObjs, false); | ||
| + | curFaceExObjs += structSize; | ||
| + | |||
| + | Thread.Sleep(100); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | cbFaceOnReadyToScan = null; | ||
| + | } | ||
| + | } | ||
| + | </code> | ||