dlib python人脸编码与c ++人脸编码

时间:2018-09-28 11:54:55

标签: python c++ dlib

我正在尝试在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点)形状预测器,

所以我以numberOfTimesToUpsample为1来调用c ++代码,并且由于我的c ++代码没有抖动,所以我以如下方式调用python代码: encoding = face_recognition.face_encodings(image, num_jitters=0)[0]

但是,当我通过两个系统运行带有人脸的图像时,编码方式会大不相同。例如,前几次暗淡的c ++输出:

-0.131519
0.0520326
0.0556113
-0.101895
-0.165266

还有python:

-0.14469159
0.04349349
0.03403644
-0.1062524
-0.18296713

我已经在https://github.com/davisking/dlib/blob/master/tools/python/src/face_recognition.cpp处检查了用于计算编码的dlib C ++-Python API,除了没有将所有内容都强制转换为double之外,我看不到任何主要区别。

修改:我也尝试将其转换为两倍。所有数字都一样。

我尝试构建链接到python dlib库随附的.so文件的项目。仍然有相同的数字。

我检查了我读取图像数据的方法产生的RGB像素值是否与python PIL.Image read-into-numpy-array相同。那里一切都很好。

我希望能够可靠地产生相同的输出。 我想念什么?

0 个答案:

没有答案