кодирование лица dlib python против кодирования лица c ++ - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь создать ту же кодировку лица в C ++, которую дает эта библиотека-оболочка python: https://github.com/ageitgey/face_recognition/blob/master/face_recognition/api.py

Код C ++:

    frontal_face_detector detector;
    ...
        for (auto face : detector(img, numberOfTimesToUpsample))
        {
            auto shape = sp(img, face); //sp = shape_predictor 5 face landmarks same as python lib
            matrix<rgb_pixel> face_chip;
            extract_image_chip(img, get_face_chip_details(shape,150,0.25), face_chip); // Chip size and padding same as dlib python settings
            faces.push_back(move(face_chip));
            coords.push_back(face);
        }
    ...
        std::vector<dlib::matrix<float,0,1>> face_descriptors = net(faces, 16); // net is dlib_face_recognition_resnet_model_v1 same as python lib
    ...

Библиотека Python по умолчанию сэмплирует один рази использует небольшой (5-точечный) предиктор формы,

, поэтому я вызываю код c ++ с numberOfTimesToUpsample в качестве 1, и так как мой код c ++ не выполняет дрожание, то я вызываю код python как: encoding = face_recognition.face_encodings(image, num_jitters=0)[0]

Однако, когда я запускаю изображение с лицом через обе системы, кодировки получаются совершенно разными.Например, выходные данные c ++ первых нескольких dims:

-0.131519
0.0520326
0.0556113
-0.101895
-0.165266

и python:

-0.14469159
0.04349349
0.03403644
-0.1062524
-0.18296713

Я исследовал dlib C ++ - Python API для вычисления кодировок здесь: https://github.com/davisking/dlib/blob/master/tools/python/src/face_recognition.cpp и на самом деле не вижу никаких существенных отличий, кроме того, что не приводим все к double.

Редактировать : я также пытался преобразовать в удвоение.Все числа одинаковы.

Я пытался создать свой проект, связанный с файлом .so, который поставляется с библиотекой python dlib.Все еще получил те же числа.

Я проверил, что мой метод чтения данных изображения выдает те же значения пикселей RGB, что и массив python PIL.Image чтения-в-numpy.Там все выглядит хорошо.

Я бы хотел, чтобы можно было надежно производить тот же вывод.Чего мне не хватает?

...