[Код прилагается] Как использовать Dahua SDK для поиска изображений по изображению?

Архитектура

Мы все знаем, что в последнее время мы разрабатываем функцию интеллектуального распознавания EasyCVR, Чтобы иметь возможность адаптировать различные форматы и SDK к нашему EasyCVR, мы также начали изучать это. В этой статье в основном рассказывается о функции поиска изображений Dahua 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;