차이

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

차이 보기로 링크

다음 판
이전 판
마지막 판 양쪽 다음 판
ko:bs2_scanface [2017/06/28 11:32]
127.0.0.1 바깥 편집
ko:bs2_scanface [2022/05/25 17:05]
mark [반환값]
줄 5: 줄 5:
  
 ===== BS2_ScanFace===== ===== BS2_ScanFace=====
-장치에서 얼굴을 스캔하고 템플릿 데이터와 이미지 데이터를 추출합니다.+''​FaceStation2'' ​장치에서 얼굴을 스캔하고 템플릿 데이터와 이미지 데이터를 추출합니다.
 ==== 함수 ==== ==== 함수 ====
 <code cpp> <code cpp>
줄 20: 줄 20:
   * [In] ''//​deviceId//''​ : 장치 식별자   * [In] ''//​deviceId//''​ : 장치 식별자
   * [Out] ''//​face//''​ : 얼굴 데이터를 저장할 포인터  ​   * [Out] ''//​face//''​ : 얼굴 데이터를 저장할 포인터  ​
-  * [In] ''//​erollmentThreshold//''​ : 요구되는 얼굴 erollmentThreshold+  * [In] ''//​erollmentThreshold//''​ : 요구되는 얼굴 erollmentThreshold ​- 상세한 것은 [[configuration_api#​bs2faceconfig|BS2FaceConfig.enrollThreshold]] 참조
   * [Out] ''//​ptrReadyToScan//''​ : 얼굴 스캔 준비가 완료되었을 때 호출되는 콜백 함수   * [Out] ''//​ptrReadyToScan//''​ : 얼굴 스캔 준비가 완료되었을 때 호출되는 콜백 함수
 ==== 반환값 ==== ==== 반환값 ====
 성공적으로 수행될 경우 ''​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>
 +private API.OnReadyToScan cbFaceOnReadyToScan = null;
 +if (faceScanSupported)
 +{
 +    int numOfFace = 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(context,​ 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;
 +    }
 +}
 +BS2_ReleaseObject(uidObj);​
 +</​code>​