从文本文件dlib C ++中读取人脸向量

时间:2018-09-26 08:35:43

标签: c++ dlib

我正在尝试从文本文件中读取128D人脸矢量。

  1. 你如何做到的?

  2. 如果我有多个人脸矢量,如何在一个变量中读取它们并将其与传入的人脸进行比较?

1 个答案:

答案 0 :(得分:0)

  

我正在尝试从文本文件中读取128D人脸矢量。你如何做到的?

这取决于您的电话号码格式。它们是CSV格式吗?还是像JSON或XML这样的描述符格式?还是由空格分隔的纯值?

例如,假设您有一个文本文件,其中包含用空格分隔的值,如下所示:

39.5 23.2 23.8 23.9 12.3

您可以将其读入这样的向量中:

#include <fstream>
#include <vector>

int main(){
    std::vector<double> faceVector; // we fill the numbers into this vector
    std::fstream fs("path/to/nums.txt", std::fstream::in ); // make the file stream
    double num;
    while (fs >> num) { // read in the number. Stops when no numbers are left
        faceVector.push_back(num); // add the number to the vector
    }
    for (double d : faceVector) {
        printf("value is %f\n", d); // print each number in the vector to see if it went right
    }
    return 0;
}

std::vector faceVector现在包含文件中的值。

  

如果我有多个面部向量,如何在一个变量中读取它们   并将其与传入的面孔进行比较?

您可以通过编写将矢量作为参数并返回有意义值的函数来比较矢量。例如,此函数计算两点之间的距离:

double distance(std::vector<double> &a, std::vector<double> &b) {
    double result = 0.0;
    for (int i = 0; i < a.size(); i++) result += (a[i] - b[i]) * (a[i] - b[i]);
    return sqrt(result);
}

您可以像这样使用它:

std::vector<double> a = { 1, 2, 3 };
std::vector<double> b = { 4, 5, 6 };
printf("distance: %f", distance(a, b));