Как оказалось (большое спасибо @ Scheff ), причина, по которой объект был null
, заключалась в том, что исключение происходило внутри конструктора и, таким образом, приводило к тому, что объект был нулевым. Причиной исключения был неправильный путь и проблематичные c (неправильные) аргументы.
в основном я установил аргументы так:
auto model_name = "r189";
auto model_checkpoint_path = PyUnicode_DecodeFSDefault("L:\\test_procs\\trained_models\BEST_checkpoint_r189.tar");
auto align_fn = Py_None;
auto img_bank_folder_root = PyUnicode_DecodeFSDefault("L:\\test_procs\\data\\facebank_2");
auto cache_folder = Py_None;
auto postfix = Py_None;
auto rebuild_cache = Py_False;
auto use_jit = Py_False;
auto threshold = 65;
auto device = "cpu";
и аргументы, таким образом, были такими:
auto args = Py_BuildValue("sOOOOONNiN", model_name, model_checkpoint_path, align_fn,
img_bank_folder_root, cache_folder, postfix,
rebuild_cache, use_jit, threshold, device);
что было не так. Я изменил их на это:
auto model_name = "r189";
auto model_checkpoint_path = "L:\\test_procs\\trained_models\BEST_checkpoint_r189.tar";
auto align_fn = "";
auto img_bank_folder_root = "L:\\test_procs\\data\\facebank_2";
auto cache_folder = "";
auto postfix = "";
auto rebuild_cache = 0;
auto use_jit = 0;
auto threshold = 65;
auto device = "cpu";
и упростил аргументы следующим образом:
auto args = Py_BuildValue("ssssssiiis", model_name, model_checkpoint_path, align_fn,
img_bank_folder_root, cache_folder, postfix,
rebuild_cache, use_jit, threshold, device);
после всего этого я все еще столкнулся с исключением и обнаружил: model_checkpoint_path
необходимо фиксированный, поскольку на его пути отсутствовал единственный \
на своем пути:
auto model_checkpoint_path = "L:\\test_procs\\trained_models\BEST_checkpoint_r189.tar";
исправлял его:
auto model_checkpoint_path = "L:\\test_procs\\trained_models\\BEST_checkpoint_r189.tar";
, таким образом, все решено.