使用 Dlib 进行地标检测期间的 Boost.Python.ArgumentError

Posted

技术标签:

【中文标题】使用 Dlib 进行地标检测期间的 Boost.Python.ArgumentError【英文标题】:Boost.Python.ArgumentError during landmarks detection using Dlib 【发布时间】:2016-12-25 01:49:45 【问题描述】:

我在使用shape_predictor 使用Dlib 进行面部标志检测时遇到问题。

我根据these issue和this one编译了dlib并验证了boost lib路径,但还是报同样的错误:

 Traceback (most recent call last):
  File "face_landmark_detection.py", line 66, in <module>
    predictor = dlib.shape_predictor(predictor_path)
Boost.Python.ArgumentError: Python argument types in
    shape_predictor.__init__(shape_predictor, str)
did not match C++ signature:
    __init__(boost::python::api::object, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)
    __init__(_object*)

有什么想法吗?

【问题讨论】:

【参考方案1】:

我能想到的一件事是您的 predictor_path 无法转换为 std::string。它可以是Unicode吗?您使用的是 Python 3.* 吗?

【讨论】:

我使用 python 2.7 和 anaconda。 OpenCV 3 我用 Unicode 格式的硬编码字符串替换了 predictor_path,但仍然遇到同样的问题 我的建议有点相反:尝试将您的字符串显式转换为 ascii。该提议基于这样一个假设,因为 boost.python 不支持 Unicode 字符串(开箱即用),并且您的路径可能是 Unicode,参数的转换可能会失败。【参考方案2】:

给定两个完全相同的 Ubuntu 16 版本,我遇到了同样的问题。 诀窍是用 g++-5.4 而不是 g++-4.9 编译。

sudo apt-get install g++-5
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 60

我猜你也可能只是更改 CMake-Flags。

【讨论】:

以上是关于使用 Dlib 进行地标检测期间的 Boost.Python.ArgumentError的主要内容,如果未能解决你的问题,请参考以下文章

使用 dlib 检测眼睛地标

使用 dlib 进行人脸地标检测

OpenCV,dlib 地标旋转

为啥 dlib 面部地标检测器会抛出 RuntimeError?

dlib的人脸地标检测程序中如何获取点坐标位置?

如何在 dlib 中保存结果人脸地标图像?