Я пытаюсь сравнить FMD, полученный из Javascript SDK, используя функцию dpfj_compare()
из C ++ SDK. Однако, когда я пытаюсь сравнить их, функция возвращает значение, равное DPFJ_E_INVALID_PARAMETER
вместо DPFJ_SUCCESS
.
Это для проекта Django, который требовал идентификации по отпечатку пальца, и я сделал расширение Python, чтобы позволить Django получить доступ к функциям C / C ++ SDK, мы купили устройство считывания отпечатков пальцев Digital Persona U.are.U 4500 и интерфейсную часть приложения использует Javascript SDK U.are.U для получения данных отпечатка пальца в промежуточном формате. в соответствии с документацией SDK промежуточный формат - это FMD DP_PRE_REG / DP_VERIFICATION, SDK возвращает FMD, закодированный в Base64Url. Это FMD отправляется обратно, декодируется с помощью Python, а затем используется в функции dpfj_compare()
через расширение Python C.
Я протестировал функцию с некоторыми FMD, полученными из образца C ++, и использовал ее в Python через расширение, и оно работало. Однако когда я пытался использовать FMD, полученный из Javascript SDK, функция возвращает DPFJ_E_INVALID_PARAMETER
. Я попытался изменить формат с DPFJ_FMD_ISO_19794_2_2005
на DPFJ_FMD_DP_VER_FEATURES
, а затем на DPFJ_FMD_DP_PRE_REG_FEATURES
, но все равно получаю тот же результат.
static PyObject *fmd_compare(PyObject *self, PyObject *args, PyObject *kwargs) {
unsigned char *fmd1, *fmd2;
unsigned int fmd1size, fmd2size;
static char *kwlist[] = {
const_cast<char *>("fmd1"),
const_cast<char *>("fmd2"),
nullptr
};
if(!PyArg_ParseTupleAndKeywords(args, kwargs, "s#s#", kwlist, &fmd1, &fmd1size,
&fmd2, &fmd2size))
return Py_BuildValue("i", -1);
unsigned int falsematch_rate = 0;
int result = dpfj_compare(DPFJ_FMD_DP_PRE_REG_FEATURES, fmd1, fmd1size, 0,
DPFJ_FMD_DP_PRE_REG_FEATURES, fmd2, fmd2size, 0, &falsematch_rate);
switch(result) {
case DPFJ_SUCCESS:
return Py_BuildValue("i", falsematch_rate);
case DPFJ_E_INVALID_FMD:
return Py_BuildValue("i", -2);
case DPFJ_E_NOT_IMPLEMENTED:
return Py_BuildValue("i", -3);
case DPFJ_E_FAILURE:
return Py_BuildValue("i", -4);
case DPFJ_E_NO_DATA:
return Py_BuildValue("i", -5);
case DPFJ_E_MORE_DATA:
return Py_BuildValue("i", -6);
case DPFJ_E_INVALID_PARAMETER:
return Py_BuildValue("i", -7);
default:
return Py_BuildValue("i", -8);
}
}
Я ожидал, что результат будет равен DPFJ_SUCCESS
, но всякий раз, когда я использую данные, полученные из Javascript SDK, результат равен DPFJ_E_INVALID_PARAMETER
.
Нужно ли использовать другой формат?