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

时间:2019-04-13 18:41:24

标签: python c++ dlib

我已经使用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 ++中使用的此函数是否会像python中那样返回三个信息(框,置信度,detector_idxs),从我所看到的,我认为它只会返回盒子。

您知道我是否做对了吗?如何获得我需要的这三个信息?

编辑01: 使用功能Erros:

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

1 个答案:

答案 0 :(得分:0)

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()。