gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:39:00 30 4
gpt4 key购买 nike

我已经使用 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 中一样返回三个信息(boxes、confidences、detector_idxs),据我所知,我认为它只会返回盒子。

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

编辑 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 rectangles = detection.first() 将元组分成不同的 vector ,对于 detection.second() 和 detection.third() 依此类推。

关于python - 如何用C++重写Dlib的Python代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55668760/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com