문서의 이전 판입니다!


Face API > BS2_ScanFace


FaceStation2 장치에서 얼굴을 스캔하고 템플릿 데이터와 이미지 데이터를 추출합니다.

함수

#include "BS_API.h"
 
int BS2_ScanFace(void* context, uint32_t deviceId, BS2Face* face, uint8_t erollmentThreshold, OnReadyToScan ptrReadyToScan);

파라미터

  • [In] context : Context
  • [In] deviceId : 장치 식별자
  • [Out] face : 얼굴 데이터를 저장할 포인터
  • [In] erollmentThreshold : 요구되는 얼굴 erollmentThreshold - 상세한 것은 BS2FaceConfig.enrollThreshold 참조
  • [Out] ptrReadyToScan : 얼굴 스캔 준비가 완료되었을 때 호출되는 콜백 함수

반환값

성공적으로 수행될 경우 BS_SDK_SUCCESS를 반환하고, 에러가 발생할 경우 상응하는 에러 코드를 반환합니다.

샘플코드

C++

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);

C#

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);