1. 程式人生 > 其它 >TSINGSEE青犀視訊開發大華sdk以圖搜圖功能簡介

TSINGSEE青犀視訊開發大華sdk以圖搜圖功能簡介

大家知道我們最近一直在開發EasyCVR的智慧識別功能,為了能夠將不同的格式及SDK都與我們EasyCVR進行適配,我們也開始對此進行了研究。本文主要是分享一下我們在開發智慧識別功能時,涉及到大華SDK以圖搜圖功能的簡介。

該功能的實現主要是先從外部匯入一張圖片和相似度值,IVSS、NVR等裝置通過這張圖檢索歷史庫或人臉庫是否已經存在匹配的人臉,並返回在相似度之上的圖片結果。

下面簡述下呼叫過程:

1、呼叫 CLIENT_Init 完成 SDK 初始化流程。
2、初始化成功後,呼叫 CLIENT_LoginEx2 登入裝置。
3、呼叫 CLIENT_StartFindFaceRecognition 設定人臉查詢條件。
4、檢視以上步驟中的返回值,若接口出參結構體中 nTotalCount 返回的是-1,需要等待裝置查詢完成。
5、呼叫 CLIENT_AttachFaceFindState 訂閱人臉查詢狀態。然後等待進度回撥函式中的返回進度為 100 時即搜尋完成。搜尋完成後呼叫 CLIENT_DetachFaceFindState 取消訂閱查詢進度。
6、呼叫 CLIENT_DoFindFaceRecognition 介面獲取查詢結果。
7、呼叫 CLIENT_StopFindFaceRecognition 介面結束查詢。
8、業務使用完後,呼叫 CLIENT_Logout 登出裝置。
9、SDK 功能使用完後,呼叫 CLIENT_Cleanup 釋放 SDK 資源。

程式碼示例:

// 查詢進度回撥函式 
void CALLBACK FaceFindState(LLONG lLoginID, LLONG lAttachHandle, NET_CB_FACE_FIND_STATE* 
pstStates, int nStateNum, LDWORD dwUser) 
{ 
if (pstStates->nProgress== 100) //表示查詢進度 100% 
{ 
// 停止人臉查詢進度的訂閱 
CLIENT_DetachFaceFindState(lAttachHandle); 
// 開始查詢 
DoFind(); 
} 
return; 
} 
// 配置查詢條件 
NET_IN_STARTFIND_FACERECONGNITION stuInParam = { sizeof(stuInParam) }; 
NET_OUT_STARTFIND_FACERECONGNITION stuOutParam = { sizeof(stuOutParam) }; 
stuInParam.stFilterInfo.dwSize = sizeof(stuInParam.stFilterInfo); 
stuInParam.stMatchOptions.dwSize = sizeof(stuInParam.stMatchOptions); 
stuInParam.bPersonExEnable = TRUE; 
stuInParam.nChannelID = 0; 
stuInParam.stMatchOptions.nSimilarity = 80; 
stuInParam.stFilterInfo.stStartTime = startTime; 
stuInParam.stFilterInfo.stEndTime = endTime; 
stuInParam.nBufferLen = nPicBufLen; 
stuInParam.pBuffer = strPicBuf; // 圖片 Buffer 
stuInParam.stPersonInfoEx.wFacePicNum = 1; 
stuInParam.stPersonInfoEx.szFacePicInfo[0].dwOffSet = 0; 
stuInParam.stPersonInfoEx.szFacePicInfo[0].dwFileLenth = nLength; 
BOOL bRet = CLIENT_StartFindFaceRecognition(m_lLoginId, &stuInParam, &stuOutParam, 5000); 
if (!bRet) 
{ 
printf("CLIENT_StartFindFaceRecognition: failed! Error code %x.\n", CLIENT_GetLastError()); 
return -1; 
} 
m_lFindHandle = stuOutParam.lFindHandle;