Mac labelme安装及运行时崩溃bug解决

labelme安装 on mac+python3

最近开始标注一些自己的数据集(自然图像),那不得首选labelme。本文记录一下安装过程以及运行labelme时遇到的bug(TypeError: arguments did not match any overloaded call: QPoint(): too many arguments)及解决方案。
平台:Mac+Anaconda(python3)

1、安装labelme

# python3
conda create --name=labelme python=3
source activate labelme
conda install -c conda-forge pyside2
conda install pyqt
conda install labelme -c conda-forge

运行labelme,直接在终端输入labelme即可

2、运行labelme时遇到的bug及解决方案

虽然我可以成功打开labelme的QT界面,但当我进行图片缩放以及标注时出现了程序崩溃,网上一查搞清楚了原因。

我遇到了以下错误:

Traceback (most recent call last):
  File "/Users/xiaopi/opt/anaconda3/envs/labelme_py3/lib/python3.10/site-packages/labelme/widgets/canvas.py", line 213, in mouseMoveEvent
    pos = self.intersectionPoint(self.current[-1], pos)
  File "/Users/xiaopi/opt/anaconda3/envs/labelme_py3/lib/python3.10/site-packages/labelme/widgets/canvas.py", line 706, in intersectionPoint
    return QtCore.QPoint(x, y)
TypeError: arguments did not match any overloaded call:
  QPoint(): too many arguments
  QPoint(int, int): argument 1 has unexpected type 'float'
  QPoint(QPoint): argument 1 has unexpected type 'float'
/Users/xiaopi/opt/anaconda3/envs/labelme_py3/bin/pythonw: line 3: 61298 Abort trap: 6           /Users/xiaopi/opt/anaconda3/envs/labelme_py3/python.app/Contents/MacOS/python "$@"*

这些bug出现的原因是由于labelme的版本问题导致的,labelme代码中的会用到QPoint(float,float) or QSize(float,float) 这些函数,但QT并不支持float类型的参数,所以我们需要对labelme包中这些函数的参数进行强制转化,以适配QT。

那我们根据报错的信息来修改一下QPoint()函数的传入参数类型

根据报错信息,打开函数所在文件:

vim /Users/xiaopi/opt/anaconda3/envs/labelme_py3/lib/python3.10/site-packages/labelme/widgets/canvas.py

找到QPoint()函数所在的第706行,将输入参数强制转换为int

return QtCore.QPoint(int(x), int(y))

如果报错的不是QPoint函数参数类型不匹配,而是其他函数,可以参考下面的链接,对代码进行修改:

labelme crash problems under python 3.10 qt 5.14/5.15 and opencv-python 4.5.4

补充:看网上也有一种说法是,出现以上错误是因为我的python版本是3.10,如果是python3.8或者3.7就不会出现这些bug,不过我也没有去验证啦。

猜你喜欢

转载自blog.csdn.net/qq_40924873/article/details/127560538