TSINGSEE青犀視訊開發大華sdk以圖搜圖功能簡介
阿新 • • 發佈:2021-10-09
大家知道我們最近一直在開發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;