這裡先上我改後的代碼網址,在源代碼的基礎上,我增加了一些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)
最後我們要激活一下剛剛寫的幾個按鍵,當我們滑鼠點中所選框時,快捷鍵被激活,寫法如上所示。
新人發帖,如有錯誤的地方,請多多指教!