这几天要用到openpose,网上的安装教程已经比较详细了。
在安装过程中主要花费时间的问题就是这个openpose的dll文件找不到。
但对于找不到dll文件这个错误,网上的解决方案大部分都是将bin文件夹下的文件以及x64/release下的文件复制到python/openpose。
按照这个方案也可以运行,但是我比较好奇到底为什那么会这样,并且这种解决方案可以解决。
网上他人方案
bin文件夹:
x64/release文件夹:
python/openpose/release文件夹:
debug过程以及根本原因
花了好长时间调试后发现根本原因在于系统的环境变量出现了冲突。
具体部分在代码中的这一句:
这一句
os.environ['PATH'] = os.environ['PATH'] + dir_path + '/../../x64/Release;' + dir_path + '/../../bin;'
的作用是将这两个路径临时添加到系统环境变量中。
发现错误在此处的方法是,
我分别尝试了将x64/release,bin中的文件分别复制到python/openpose/release中,这样发现只要将bin中的文件复制到后者中就可以正常运行,这就证明
os.environ['PATH'] = os.environ['PATH'] + dir_path + '/../../x64/Release;' + dir_path + '/../../bin;'
这句代码可以成功找到x64/release文件夹,但不能找到bin。从此我怀疑到正点上:bin的环境路径有冲突。
然后我将bin路径直接添加到系统的环境变量中:
然后将刚才代码中那句话注释调还是不能正常运行,还是找不到DLL。
然后我将这个bin路径逐个上移。最终在这个位置,代码终于成功运行!
由此得到证明,是因为openpose生成的解决方案中bin路径于anaconda的bin路径存在某些冲突,导致代码运行过程中无法进入openpose的bin文件夹(个人猜测可能是存在某些文件重名,找到anaconda中的之后就不再找了)
根本解决办法
为了再次验证这一结论,将代码中:
os.environ['PATH'] = os.environ['PATH'] + dir_path + '/../../x64/Release;' + dir_path + '/../../bin;'
修改为:
os.environ['PATH'] = dir_path + '/../../x64/Release;' + dir_path + '/../../bin;' + os.environ['PATH']
即将这两个路径临时添加到系统本身的环境变量之前,也可以成功运行!
到这问题终于得到解决,写篇博客记录一下,同时希望能帮你节省时间。