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

问题描述 投票:1回答:1

我使用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 ++中使用的这个函数是否会返回三个信息(box,confidences,detector_idxs),就像我在python中看到的那样,我认为它会只返回盒子。

你知道我是不是以正确的方式做到了?我怎样才能获得我需要的这三个信息?

编辑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
python c++ dlib
1个回答
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 rectangles = detection.first()将元组分隔为不同的向量,依此类推,用于detection.second()和detection.third()。

© www.soinside.com 2019 - 2024. All rights reserved.