如何用C++重写Dlib的Python代码?

How to rewrite Dlib's Python code in C++?

我已经使用 dlib 编写了 python 代码,但由于项目规范,我需要用 C++ 重写相同的代码。几乎都完成了,但最重要的是我在 C++ 中找不到完全相同的东西。

python版本是:

[boxes, confidences, detector_idxs] = dlib.fhog_object_detector.run_multiple(detectors, image, upsample_num_times=1, adjust_threshold=0.0)

我尝试过的 C++ 是:

vector<rectangle> detection = evaluate_detectors(detectors, img, adjust_threshold);

我仍然没有 运行 代码,但我不确定我在 C++ 中使用的这个函数是否会 return 三个信息(框、置信度、detector_idxs) 就像在 python 中一样,据我所见,我认为它 return 只有框。

你知道我的做法是否正确吗?我怎样才能得到我需要的这三个信息?

编辑 01: 使用函数错误:

tuple<std::vector<dlib::rectangle>, list<T> confidences>, list<T> detector_idxs> = run_multiple_rect_detectors(detectores, img, upsampling_amount, adjust_threshold);

error C2065: 'T': undeclared identifier

error C2923: 'std::list': 'T' is not a valid template type argument for parameter '_Ty'

error C2903: 'allocator': symbol is neither a class template nor a function template

error C3203: 'allocator': unspecialized class template can't be used as a template argument for template parameter '_Alloc', expected a real type

error C2146: syntax error: missing '>' before identifier 'confidences'

error C2059: syntax error: ','

编辑 01-1:

error C2872: 'rectangle': ambiguous symbol
note: could be 'dlib::rectangle'
note: or       'rectangle'
error C2146: syntax error: missing '>' before identifier 'rectangles'
error C2653: 'pybind11': is not a class or namespace name
error C3861: 'run_multiple_rect_detectors': identifier not found

修复 VS 显示的语法错误后:

error C3861: 'run_multiple_rect_detectors': identifier not found

编辑 02:

Error   C2027   use of undefined type 'dlib::image_traits<image_type>'
Error   C2146   syntax error: missing ';' before identifier 'pixel_type'
Error   C4430   missing type specifier - int assumed. Note: C++ does not support default-int

run_multiple(...) 看起来像它的调用 run_multiple_rect_detectors(...), 假设是,您应该可以调用:

std::tuple<std::vector<rectangle> rectangles, std::vector<double> confidences, std::vector<unsigned long> detector_idxs> detection = dlib::run_multiple_rect_detectors(detectors, img, 1, 0.0);

1是上采样量,0.0是阈值。

因为 pybind 在 C++11 和 Python 元组之间自动转换。

然后您可以使用 std::vector 矩形 = detection.first() 将元组分成不同的向量,对于 detection.second() 和 detection.third() 依此类推.