Boost.Python.ArgumentError при обнаружении ориентиров с использованием Dlib

У меня проблема с использованием shape_predictor для определения ориентиров лица с помощью Dlib.

Я скомпилировал dlib и проверил путь к библиотеке boost в соответствии с этой проблемой и этот, но все равно с той же ошибкой:

 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*)

Любые идеи?


person Amine Horseman    schedule 18.08.2016    source источник


Ответы (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.

person TobiasWeis    schedule 10.09.2016

Я могу думать о том, что ваш Predictor_path не может быть преобразован в std::string. Может быть в Юникоде? Вы используете Python 3.*?

person Alexandra B.    schedule 19.08.2016
comment
Я сказал, что использую python 2.7 и anaconda. OpenCV 3 - person Amine Horseman; 21.08.2016
comment
Я заменил Predictor_path на жестко запрограммированную строку в формате Unicode, но все еще имею ту же проблему. - person Amine Horseman; 21.08.2016
comment
Мое предложение немного противоположно: попробуйте явно преобразовать вашу строку в ascii. Предложение основано на предположении, что, поскольку boost.python не поддерживает строки Unicode (из коробки), и ваш путь мог быть в Unicode, преобразование аргументов может завершиться ошибкой. - person Alexandra B.; 22.08.2016