如何用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() 依此类推.
我已经使用 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() 依此类推.