天天看点

给labelimg源代码增加快捷键,加快图像标注的速度

这里先上我改后的代码网址,在源代码的基础上,我增加了一些1~9这9个快捷键,选中矩形框后,按下快捷键就可以直接给图片标注前9个类别中对应的类别(按1自动标注dog),用以加快数据标注的速度

https://github.com/pengjianqiang/labelImg

下面介绍一下增加快捷键的方法

我直接修改了labelImg.py文件

首先看到212行的#action部分,里面直接定义了很多labelImg现有的快捷键,因此我照着现有快捷键定义的方式,直接写了几个,下面重点来看一下代码修改的部分

edit = action(getStr('editLabel'), self.editLabel,
                      'Ctrl+E', 'edit', getStr('editLabelDetail'),
                      enabled=False)

        edit1 = action(getStr('editLabel'), self.editLabel1,
                      '1', 'edit', getStr('editLabelDetail'),
                      enabled=False)

        edit2 = action(getStr('editLabel'), self.editLabel2,
                      '2', 'edit', getStr('editLabelDetail'),
                      enabled=False)

        edit3 = action(getStr('editLabel'), self.editLabel3,
                      '3', 'edit', getStr('editLabelDetail'),
                      enabled=False)

        edit4 = action(getStr('editLabel'), self.editLabel4,
                       '4', 'edit', getStr('editLabelDetail'),
                       enabled=False)

        edit5 = action(getStr('editLabel'), self.editLabel5,
                       '5', 'edit', getStr('editLabelDetail'),
                       enabled=False)

        edit6 = action(getStr('editLabel'), self.editLabel6,
                       '6', 'edit', getStr('editLabelDetail'),
                       enabled=False)

        edit7 = action(getStr('editLabel'), self.editLabel7,
                       '7', 'edit', getStr('editLabelDetail'),
                       enabled=False)

        edit8 = action(getStr('editLabel'), self.editLabel8,
                       '8', 'edit', getStr('editLabelDetail'),
                       enabled=False)

        edit9 = action(getStr('editLabel'), self.editLabel9,
                       '9', 'edit', getStr('editLabelDetail'),
                       enabled=False)
           

edit是已有的给图片进行标注的快捷键,但是不能直接给图片标注为哪一个类别,这里我们照着写了edit1到edit9,需要改动的部分有2个,第一个是快捷键的键位,改成1到9,还有一个就是self引用的函数,这里需要后面自己来定义,先改成editLabel1到editLabel9,这里的enabled是使能端,平时设置为False(关闭),只有在框了矩形框之后,才把它打开

self.editButton.setDefaultAction(edit)

        self.editButton.setDefaultAction(edit1)

        self.editButton.setDefaultAction(edit2)

        self.editButton.setDefaultAction(edit3)

        self.editButton.setDefaultAction(edit4)

        self.editButton.setDefaultAction(edit5)

        self.editButton.setDefaultAction(edit6)

        self.editButton.setDefaultAction(edit7)

        self.editButton.setDefaultAction(edit8)

        self.editButton.setDefaultAction(edit9)
           

这里应该是设置按键,照着edit写就行

addActions(labelMenu, (edit, delete))

        addActions(labelMenu, (edit1, delete))

        addActions(labelMenu, (edit2, delete))

        addActions(labelMenu, (edit3, delete))

        addActions(labelMenu, (edit4, delete))

        addActions(labelMenu, (edit5, delete))

        addActions(labelMenu, (edit6, delete))

        addActions(labelMenu, (edit7, delete))

        addActions(labelMenu, (edit8, delete))

        addActions(labelMenu, (edit9, delete))
           

这里将按键加到菜单中,直接照着写

self.actions = struct(save=save, save_format=save_format, saveAs=saveAs, open=open, close=close, resetAll = resetAll,
                              lineColor=color1, create=create, delete=delete, edit=edit, edit1=edit1, edit2=edit2, edit3=edit3, edit4=edit4, edit5=edit5, edit6=edit6, edit7=edit7, edit8=edit8, edit9=edit9, copy=copy,



                              createMode=createMode, editMode=editMode, advancedMode=advancedMode,
                              shapeLineColor=shapeLineColor, shapeFillColor=shapeFillColor,
                              zoom=zoom, zoomIn=zoomIn, zoomOut=zoomOut, zoomOrg=zoomOrg,
                              fitWindow=fitWindow, fitWidth=fitWidth,
                              zoomActions=zoomActions,
                              fileMenuActions=(
                                  open, opendir, save, saveAs, close, resetAll, quit),
                              beginner=(), advanced=(),





                              editMenu=(edit, edit1, edit2, edit3, edit4, edit5, edit6, edit7, edit8, edit9, copy, delete,
                                        None, color1, self.drawSquaresOption),
                              beginnerContext=(create, edit, edit1, edit2, edit3, edit4, edit5, edit6, edit7, edit8, edit9, copy, delete),
                              advancedContext=(createMode, editMode, edit, edit1, edit2, edit3, edit4, edit5, edit6, edit7, edit8, edit9, copy,
                                               delete, shapeLineColor, shapeFillColor),




                              onLoadActive=(
                                  close, create, createMode, editMode),
                              onShapesPresent=(saveAs, hideAll, showAll))
           

将对应的edit1到edit9照着edit添进去

def editLabel(self):
        if not self.canvas.editing():
            return
        item = self.currentItem()
        if not item:
            return
        text = self.labelDialog.popUp(item.text())

        #text = '1'
        if text is not None:
            item.setText(text)
            item.setBackground(generateColorByText(text))
            self.setDirty()







    def editLabel1(self):
        if not self.canvas.editing():
            return
        item = self.currentItem()
        if not item:
            return

        if len(self.labelHist) >= 1:
            text = self.labelHist[0]


        if text is not None:
            item.setText(text)
            item.setBackground(generateColorByText(text))
            self.setDirty()
           

这里的editlabel就是edit快捷键所执行的操作,text = self.labelDialog.popUp(item.text())这一句指标注的内容为你输入进的内容,我们要新增一个快捷键,让其自动标注为已有的类别,因此改掉这一句话,改为text = self.labelHist[0],就代表直接将列表内的第一个类别作为对该图片的标注,不需要手动输入,接下来的几个按键也这样改。

self.actions.edit.setEnabled(selected)

        self.actions.edit1.setEnabled(selected)

        self.actions.edit2.setEnabled(selected)

        self.actions.edit3.setEnabled(selected)

        self.actions.edit4.setEnabled(selected)

        self.actions.edit5.setEnabled(selected)

        self.actions.edit6.setEnabled(selected)

        self.actions.edit7.setEnabled(selected)

        self.actions.edit8.setEnabled(selected)

        self.actions.edit9.setEnabled(selected)

           

最后我们要激活一下刚刚写的几个按键,当我们鼠标点中所选框时,快捷键被激活,写法如上所示。

新人发帖,如有错误的地方,请多多指教!

继续阅读