我已经安装了gqcnn、Pyrep和autolab_core。之后,我执行了我同事编写的代码,并且在他的计算机上运行良好。
但是,我无法运行代码。发生的错误是
python3.7/site-packages/cv2/qt/plugins/platforms" ...
QFactoryLoader::QFactoryLoader() looking at "/home/bak/anaconda3/envs/pyrep/lib/python3.7/site-packages/cv2/qt/plugins/platforms/libqxcb.so"
Found metadata in lib /home/bak/anaconda3/envs/pyrep/lib/python3.7/site-packages/cv2/qt/plugins/platforms/libqxcb.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"xcb"
]
},
"archreq": 0,
"className": "QXcbIntegrationPlugin",
"debug": false,
"version": 331520
}
In /home/bak/anaconda3/envs/pyrep/lib/python3.7/site-packages/cv2/qt/plugins/platforms/libqxcb.so:
Plugin uses incompatible Qt library (5.15.0) [release]
"The plugin '/home/bak/anaconda3/envs/pyrep/lib/python3.7/site-packages/cv2/qt/plugins/platforms/libqxcb.so' uses incompatible Qt library. (5.15.0) [release]"
not a plugin
QFactoryLoader::QFactoryLoader() checking directory path "/home/bak/anaconda3/envs/pyrep/plugins/platforms" ...
QFactoryLoader::QFactoryLoader() looking at "/home/bak/anaconda3/envs/pyrep/plugins/platforms/libqeglfs.so"
Found metadata in lib /home/bak/anaconda3/envs/pyrep/plugins/platforms/libqeglfs.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"eglfs"
]
},
"className": "QEglFSIntegrationPlugin",
"debug": false,
"version": 329991
}
Got keys from plugin meta data ("eglfs")
QFactoryLoader::QFactoryLoader() looking at "/home/bak/anaconda3/envs/pyrep/plugins/platforms/libqminimal.so"
Found metadata in lib /home/bak/anaconda3/envs/pyrep/plugins/platforms/libqminimal.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"minimal"
]
},
"className": "QMinimalIntegrationPlugin",
"debug": false,
"version": 329991
}
Got keys from plugin meta data ("minimal")
QFactoryLoader::QFactoryLoader() looking at "/home/bak/anaconda3/envs/pyrep/plugins/platforms/libqminimalegl.so"
Found metadata in lib /home/bak/anaconda3/envs/pyrep/plugins/platforms/libqminimalegl.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"minimalegl"
]
},
"className": "QMinimalEglIntegrationPlugin",
"debug": false,
"version": 329991
}
Got keys from plugin meta data ("minimalegl")
QFactoryLoader::QFactoryLoader() looking at "/home/bak/anaconda3/envs/pyrep/plugins/platforms/libqoffscreen.so"
Found metadata in lib /home/bak/anaconda3/envs/pyrep/plugins/platforms/libqoffscreen.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"offscreen"
]
},
"className": "QOffscreenIntegrationPlugin",
"debug": false,
"version": 329991
}
Got keys from plugin meta data ("offscreen")
QFactoryLoader::QFactoryLoader() looking at "/home/bak/anaconda3/envs/pyrep/plugins/platforms/libqvnc.so"
Found metadata in lib /home/bak/anaconda3/envs/pyrep/plugins/platforms/libqvnc.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"vnc"
]
},
"className": "QVncIntegrationPlugin",
"debug": false,
"version": 329991
}
Got keys from plugin meta data ("vnc")
QFactoryLoader::QFactoryLoader() looking at "/home/bak/anaconda3/envs/pyrep/plugins/platforms/libqxcb.so"
Found metadata in lib /home/bak/anaconda3/envs/pyrep/plugins/platforms/libqxcb.so, metadata=
{
"IID": "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.3",
"MetaData": {
"Keys": [
"xcb"
]
},
"className": "QXcbIntegrationPlugin",
"debug": false,
"version": 329991
}
Got keys from plugin meta data ("xcb")
QFactoryLoader::QFactoryLoader() checking directory path "/home/bak/anaconda3/envs/pyrep/bin/platforms" ...
Cannot load library /home/bak/anaconda3/envs/pyrep/plugins/platforms/libqxcb.so: (/home/bak/anaconda3/envs/pyrep/plugins/platforms/../../lib/libQt5XcbQpa.so.5: symbol _ZN11QFontEngine14bitmapForGlyphEj6QFixedRK10QTransform version Qt_5_PRIVATE_API not defined in file libQt5Gui.so.5 with link time reference)
QLibraryPrivate::loadPlugin failed on "/home/bak/anaconda3/envs/pyrep/plugins/platforms/libqxcb.so" : "Cannot load library /home/bak/anaconda3/envs/pyrep/plugins/platforms/libqxcb.so: (/home/bak/anaconda3/envs/pyrep/plugins/platforms/../../lib/libQt5XcbQpa.so.5: symbol _ZN11QFontEngine14bitmapForGlyphEj6QFixedRK10QTransform version Qt_5_PRIVATE_API not defined in file libQt5Gui.so.5 with link time reference)"
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/home/bak/anaconda3/envs/pyrep/lib/python3.7/site-packages/cv2/qt/plugins" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Available platform plugins are: eglfs, minimal, minimalegl, offscreen, vnc, xcb.
如果您想详细查看完整的错误,请参阅此处。 上面的 '/pyrep/' 是我的 anaconda 环境名称。
看来是qt引起的。但我无法解决这个问题。
我应该怎么做才能解决这个问题?
当您将
opencv
与 pyqt5
一起使用时,会出现此问题。看起来opencv
内部使用的qt插件与pyqt5
不兼容。只需在 QT_QPA_PLATFORM_PLUGIN_PATH
语句之后取消设置环境变量 import cv2
即可。
import os
os.environ.pop("QT_QPA_PLATFORM_PLUGIN_PATH")
您还可以在导入后更新平台插件路径
opencv
import os
os.environ.update({"QT_QPA_PLATFORM_PLUGIN_PATH": "/home/udara/anaconda3/envs/research-headless/lib/python3.8/site-packages/PyQt5/Qt5/plugins/xcbglintegrations/libqxcb-glx-integration.so"})
请注意,这将使
opencv
窗口函数无法使用。如果您想使用它们,则必须从源代码构建 opencv
,而不使用 qt
插件。您可以使用 opencv
插件而不是 gtk
来构建 qt
。
终于找到解决办法了! https://github.com/stepjam/PyRep/issues/76
问题是在conda环境中加载Qt。
当我输入
qmake -version
时,终端窗口向我显示了 anaconda 中的 qt。
在我遵循上述网址的第一个答案后,我可以解决问题。
我想在这里补充一些东西。
我遇到了这个问题,但是在 debian10 上,并且提到的解决方案都没有帮助。真正有帮助的是,我意识到,就我而言,pip 默认安装了 pyqt5 的 5.15.2 版本。不过,这里(https://repology.org/project/python:pyqt5/versions)说明debian10推荐的pyqt5版本是5.11.3。
当我用该版本重新安装 pyqt5 时:
$ pip3 安装 PyQt5==5.11.3
问题已解决。 重点是,检查一下可能是个好主意:
通过https://github.com/NVlabs/instant-ngp/discussions/300解决了我的问题
pip uninstall opencv-python
pip install opencv-python-headless
这似乎是 cv2 Python 包及其在 Qt 中循环方式的问题
这可能与类似的错误消息有关。
我刚刚在 Ubuntu 20.04、Python 3.8 中尝试使用 matplotlib_backend_qtquick 时遇到了这个问题。
提到的线程中的这个答案为我解决了这个问题:https://askubuntu.com/a/1069502
如果您在没有显示/图形输出的计算机(例如服务器)上运行此程序,请确保您的脚本不会调用任何用于图形输出的 cv2 函数,例如
cv2.namedWindow
或 cv2.imshow
。
conda list | grep 'qt'
对于每个找到的条目执行以下操作:
conda remove --force package_name
其中 package_name
是上一个命令返回的名称
这是
opencv
与 pyQt5
的依赖问题。 pyQt5
不完全支持opencv-contrib-python
。我正在构建一个带有 mediapipe
、opencv
和 pyQt5
模块的应用程序,并与问题斗争了好几天。我发现这个依赖问题仅仅通过卸载opencv-contrib-python
并安装opencv-python-headless
并不能完全解决。这个以及我发现的有关此问题的所有其他解决方案只是临时修复,如果您想在新计算机上部署应用程序或脚本,效果不会很好。
我发现最好的解决方案是使用 pyQt6。 pyQt6 完全支持 opencv-contrib-python。因此,只需卸载
pyQt5
的所有内容并安装 pyQt6
。
这将卸载每个
pyQt5
模块:
pip freeze | grep -E '^PyQt5' | awk -F'==' '{print $1}' | xargs pip uninstall -y
然后安装
pyqt6
:
pip install pyqt6