Мы все знаем, что в последнее время мы разрабатываем функцию интеллектуального распознавания 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;