注意:这篇文章的解决方案中,笔者用的只是把opencv-python的版本换掉了,治标不治本,如果涉及cv2更复杂的用法,可能存在版本不兼容的问题!
这几天学习CenterNet的源代码,按照getting start、install、model zoo几个md文件把环境配好后,运行代码,结果import部分就报错:
可见是cv2模块引用的时候除了问题。看其他博主写道:undefined symbol: FT_Done_MM_Var 错误的原因,libfontconfig.so.1造成。opencv 的 Python版本是按照系统库编译的,而在调用时,使用了anaconda/lib中的库(原文链接)。
于是对比了一下虚拟环境和系统里opencv-python版本,发现确实虚拟环境中版本更高(下面第一张图):
该文章中作者给出两种方案,一是更改连接,二是用系统里的libfontconfig.so.1替换anaconda目录下的对应文件。
笔者采取的方式是:在虚拟环境中重新安装和系统版本一致的opencv-python库(可能会出问题,因为centernet代码里主要只用到了cv2的imread函数,就可以采取这种办法)。
中途还对pip进行了升级。故完整指令如下:
pip uninstall opencv-python
pip install --upgrade pip --trusted-host pypi.tuna.tsinghua.edu.cn
pip install opencv-python==4.5.3.56 --trusted-host pypi.tuna.tsinghua.edu.cn
最后在虚拟环境中运行python,可以正常导入cv2。