Как использовать данные набора функций, полученные с помощью Javascript SDK, в C ++ SDK - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь сравнить 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.

Нужно ли использовать другой формат?

...