功能添加
This commit is contained in:
		
							parent
							
								
									ab122e91a5
								
							
						
					
					
						commit
						42096a19d9
					
				@ -3,6 +3,10 @@
 | 
			
		||||
 | 
			
		||||
集成[segment anything](https://github.com/facebookresearch/segment-anything),实现图片分割快速标注。
 | 
			
		||||
 | 
			
		||||
**项目持续更新中,[更新日志](./UpdateLog.md),欢迎大家提出建议**
 | 
			
		||||
 | 
			
		||||
演示视频:https://www.bilibili.com/video/BV1Lk4y1J7uB/
 | 
			
		||||
 | 
			
		||||
[中文](README.md)         [English](README-en.md)
 | 
			
		||||
## 特点
 | 
			
		||||
1. 集成segment anything,快速进行图像分割标注
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										10
									
								
								UpdateLog.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								UpdateLog.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
			
		||||
# 20240424
 | 
			
		||||
 | 
			
		||||
- 添加了对labelme格式json的支持(只支持标注的多边形)
 | 
			
		||||
 | 
			
		||||
    **在进行修改之前,先备份一份!!!**
 | 
			
		||||
    现在可以打开并编辑之前用labeme生成的标注文件了,记得通过图层高低调整遮挡关系。
 | 
			
		||||
    但最终保存还会以ISAT格式的json保存。
 | 
			
		||||
 | 
			
		||||
- 添加了显示/隐藏按钮(快捷键V),用于显示或隐藏所有多边形
 | 
			
		||||
- 添加了
 | 
			
		||||
@ -38,24 +38,46 @@ class Annotation:
 | 
			
		||||
            with open(self.label_path, 'r') as f:
 | 
			
		||||
                dataset = load(f)
 | 
			
		||||
                info = dataset.get('info', {})
 | 
			
		||||
                objects = dataset.get('objects', [])
 | 
			
		||||
 | 
			
		||||
                self.img_name = info.get('name', '')
 | 
			
		||||
                self.width = info.get('width', 0)
 | 
			
		||||
                self.height = info.get('height', 0)
 | 
			
		||||
                self.depth = info.get('depth', 0)
 | 
			
		||||
                self.note = info.get('note', '')
 | 
			
		||||
                for obj in objects:
 | 
			
		||||
                    category = obj.get('category', 'unknow')
 | 
			
		||||
                    group = obj.get('group', '')
 | 
			
		||||
                    segmentation = obj.get('segmentation', [])
 | 
			
		||||
                    iscrowd = obj.get('iscrowd', 0)
 | 
			
		||||
                    note = obj.get('note', '')
 | 
			
		||||
                    area = obj.get('area', 0)
 | 
			
		||||
                    layer = obj.get('layer', 1)
 | 
			
		||||
                    bbox = obj.get('bbox', [])
 | 
			
		||||
                    obj = Object(category, group, segmentation, area, layer, bbox, iscrowd, note)
 | 
			
		||||
                    self.objects.append(obj)
 | 
			
		||||
                description = info.get('description', '')
 | 
			
		||||
                if description == 'ISAT':
 | 
			
		||||
                    # ISAT格式json
 | 
			
		||||
                    objects = dataset.get('objects', [])
 | 
			
		||||
                    self.img_name = info.get('name', '')
 | 
			
		||||
                    self.width = info.get('width', 0)
 | 
			
		||||
                    self.height = info.get('height', 0)
 | 
			
		||||
                    self.depth = info.get('depth', 0)
 | 
			
		||||
                    self.note = info.get('note', '')
 | 
			
		||||
                    for obj in objects:
 | 
			
		||||
                        category = obj.get('category', 'unknow')
 | 
			
		||||
                        group = obj.get('group', 0)
 | 
			
		||||
                        if group is None: group = 0
 | 
			
		||||
                        segmentation = obj.get('segmentation', [])
 | 
			
		||||
                        iscrowd = obj.get('iscrowd', 0)
 | 
			
		||||
                        note = obj.get('note', '')
 | 
			
		||||
                        area = obj.get('area', 0)
 | 
			
		||||
                        layer = obj.get('layer', 2)
 | 
			
		||||
                        bbox = obj.get('bbox', [])
 | 
			
		||||
                        obj = Object(category, group, segmentation, area, layer, bbox, iscrowd, note)
 | 
			
		||||
                        self.objects.append(obj)
 | 
			
		||||
                else:
 | 
			
		||||
                    # labelme格式json
 | 
			
		||||
                    shapes = dataset.get('shapes', {})
 | 
			
		||||
                    for shape in shapes:
 | 
			
		||||
                        # 只加载多边形
 | 
			
		||||
                        is_polygon = shape.get('shape_type', '') == 'polygon'
 | 
			
		||||
                        if not is_polygon:
 | 
			
		||||
                            continue
 | 
			
		||||
                        category = shape.get('label', 'unknow')
 | 
			
		||||
                        group = shape.get('group_id', 0)
 | 
			
		||||
                        if group is None: group = 0
 | 
			
		||||
                        segmentation = shape.get('points', [])
 | 
			
		||||
                        iscrowd = shape.get('iscrowd', 0)
 | 
			
		||||
                        note = shape.get('note', '')
 | 
			
		||||
                        area = shape.get('area', 0)
 | 
			
		||||
                        layer = shape.get('layer', 2)
 | 
			
		||||
                        bbox = shape.get('bbox', [])
 | 
			
		||||
                        obj = Object(category, group, segmentation, area, layer, bbox, iscrowd, note)
 | 
			
		||||
                        self.objects.append(obj)
 | 
			
		||||
 | 
			
		||||
    def save_annotation(self):
 | 
			
		||||
        dataset = {}
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,6 @@
 | 
			
		||||
<RCC>
 | 
			
		||||
  <qresource prefix="icon">
 | 
			
		||||
    <file>icons/眼睛_eyes.svg</file>
 | 
			
		||||
    <file>icons/semantic.png</file>
 | 
			
		||||
    <file>icons/M_Favicon.ico</file>
 | 
			
		||||
    <file>icons/instance.png</file>
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2953
									
								
								icons_rc.py
									
									
									
									
									
								
							
							
						
						
									
										2953
									
								
								icons_rc.py
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -19,4 +19,4 @@ label:
 | 
			
		||||
  name: cake
 | 
			
		||||
- color: '#5c3566'
 | 
			
		||||
  name: fence
 | 
			
		||||
language: zh
 | 
			
		||||
language: en
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										36
									
								
								segment_any/gpu_resource.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								segment_any/gpu_resource.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,36 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
# @Author  : LG
 | 
			
		||||
 | 
			
		||||
from PyQt5.QtCore import QThread, pyqtSignal
 | 
			
		||||
import os
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class GPUResource_Thread(QThread):
 | 
			
		||||
    message = pyqtSignal(str)
 | 
			
		||||
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        super(GPUResource_Thread, self).__init__()
 | 
			
		||||
        self.gpu_id = None
 | 
			
		||||
        self.callback = None
 | 
			
		||||
 | 
			
		||||
        self.keep = True
 | 
			
		||||
        try:
 | 
			
		||||
            r = os.popen('nvidia-smi -q -d MEMORY -i 0 | grep Total').readline()
 | 
			
		||||
            self.total = r.split(':')[-1].strip().split(' ')[0]
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(e)
 | 
			
		||||
            self.total = 'none'
 | 
			
		||||
 | 
			
		||||
    def run(self):
 | 
			
		||||
        while True:
 | 
			
		||||
            r = os.popen('nvidia-smi -q -d MEMORY -i 0 | grep Used').readline()
 | 
			
		||||
            used = r.split(':')[-1].strip().split(' ')[0]
 | 
			
		||||
            self.message.emit("cuda: {}/{}MiB".format(used, self.total))
 | 
			
		||||
 | 
			
		||||
    def __del__(self):
 | 
			
		||||
        self.message.emit("Ground filter thread | Wait for thread to exit.")
 | 
			
		||||
        self.wait()
 | 
			
		||||
        self.message.emit("Ground filter thread | Thread exited.")
 | 
			
		||||
 | 
			
		||||
    def set_callback(self, callback):
 | 
			
		||||
        self.callback = callback
 | 
			
		||||
@ -17,18 +17,20 @@ class SegAny:
 | 
			
		||||
        else:
 | 
			
		||||
            raise ValueError('The checkpoint named {} is not supported.'.format(checkpoint))
 | 
			
		||||
 | 
			
		||||
        device = 'cuda' if torch.cuda.is_available() else 'cpu'
 | 
			
		||||
        self.device = 'cuda' if torch.cuda.is_available() else 'cpu'
 | 
			
		||||
        sam = sam_model_registry[model_type](checkpoint=checkpoint)
 | 
			
		||||
        sam.to(device=device)
 | 
			
		||||
        sam.to(device=self.device)
 | 
			
		||||
        self.predictor = SamPredictor(sam)
 | 
			
		||||
        self.image = None
 | 
			
		||||
 | 
			
		||||
    def set_image(self, image):
 | 
			
		||||
 | 
			
		||||
        self.predictor.set_image(image)
 | 
			
		||||
 | 
			
		||||
    def reset_image(self):
 | 
			
		||||
        self.predictor.reset_image()
 | 
			
		||||
        self.image = None
 | 
			
		||||
        torch.cuda.empty_cache()
 | 
			
		||||
 | 
			
		||||
    def predict(self, input_point, input_label):
 | 
			
		||||
        input_point = np.array(input_point)
 | 
			
		||||
@ -46,5 +48,5 @@ class SegAny:
 | 
			
		||||
            mask_input=mask_input[None, :, :],
 | 
			
		||||
            multimask_output=False,
 | 
			
		||||
        )
 | 
			
		||||
        print('masks: {}'.format(masks))
 | 
			
		||||
        torch.cuda.empty_cache()
 | 
			
		||||
        return masks
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
# Form implementation generated from reading ui file '/home/super/PycharmProjects/ISAT_with_segment_anything/ui/MainWindow.ui'
 | 
			
		||||
# Form implementation generated from reading ui file 'MainWindow.ui'
 | 
			
		||||
#
 | 
			
		||||
# Created by: PyQt5 UI code generator 5.15.7
 | 
			
		||||
#
 | 
			
		||||
@ -32,7 +32,7 @@ class Ui_MainWindow(object):
 | 
			
		||||
        MainWindow.setCentralWidget(self.centralwidget)
 | 
			
		||||
        self.menubar = QtWidgets.QMenuBar(MainWindow)
 | 
			
		||||
        self.menubar.setEnabled(True)
 | 
			
		||||
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1280, 24))
 | 
			
		||||
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1280, 25))
 | 
			
		||||
        font = QtGui.QFont()
 | 
			
		||||
        font.setFamily("Times New Roman")
 | 
			
		||||
        font.setPointSize(12)
 | 
			
		||||
@ -93,7 +93,7 @@ class Ui_MainWindow(object):
 | 
			
		||||
        self.toolBar.setObjectName("toolBar")
 | 
			
		||||
        MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
 | 
			
		||||
        self.info_dock = QtWidgets.QDockWidget(MainWindow)
 | 
			
		||||
        self.info_dock.setMinimumSize(QtCore.QSize(80, 38))
 | 
			
		||||
        self.info_dock.setMinimumSize(QtCore.QSize(85, 43))
 | 
			
		||||
        self.info_dock.setFeatures(QtWidgets.QDockWidget.AllDockWidgetFeatures)
 | 
			
		||||
        self.info_dock.setObjectName("info_dock")
 | 
			
		||||
        self.dockWidgetContents_2 = QtWidgets.QWidget()
 | 
			
		||||
@ -101,7 +101,7 @@ class Ui_MainWindow(object):
 | 
			
		||||
        self.info_dock.setWidget(self.dockWidgetContents_2)
 | 
			
		||||
        MainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.info_dock)
 | 
			
		||||
        self.labels_dock = QtWidgets.QDockWidget(MainWindow)
 | 
			
		||||
        self.labels_dock.setMinimumSize(QtCore.QSize(80, 38))
 | 
			
		||||
        self.labels_dock.setMinimumSize(QtCore.QSize(85, 43))
 | 
			
		||||
        self.labels_dock.setFeatures(QtWidgets.QDockWidget.AllDockWidgetFeatures)
 | 
			
		||||
        self.labels_dock.setObjectName("labels_dock")
 | 
			
		||||
        self.dockWidgetContents_3 = QtWidgets.QWidget()
 | 
			
		||||
@ -250,6 +250,11 @@ class Ui_MainWindow(object):
 | 
			
		||||
        icon23.addPixmap(QtGui.QPixmap(":/icon/icons/锚点_anchor.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
 | 
			
		||||
        self.actionPolygon.setIcon(icon23)
 | 
			
		||||
        self.actionPolygon.setObjectName("actionPolygon")
 | 
			
		||||
        self.actionVisible = QtWidgets.QAction(MainWindow)
 | 
			
		||||
        icon24 = QtGui.QIcon()
 | 
			
		||||
        icon24.addPixmap(QtGui.QPixmap(":/icon/icons/眼睛_eyes.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
 | 
			
		||||
        self.actionVisible.setIcon(icon24)
 | 
			
		||||
        self.actionVisible.setObjectName("actionVisible")
 | 
			
		||||
        self.menuFile.addAction(self.actionOpen_dir)
 | 
			
		||||
        self.menuFile.addAction(self.actionSave_dir)
 | 
			
		||||
        self.menuFile.addSeparator()
 | 
			
		||||
@ -308,6 +313,7 @@ class Ui_MainWindow(object):
 | 
			
		||||
        self.toolBar.addAction(self.actionZoom_out)
 | 
			
		||||
        self.toolBar.addAction(self.actionFit_wiondow)
 | 
			
		||||
        self.toolBar.addAction(self.actionBit_map)
 | 
			
		||||
        self.toolBar.addAction(self.actionVisible)
 | 
			
		||||
 | 
			
		||||
        self.retranslateUi(MainWindow)
 | 
			
		||||
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
 | 
			
		||||
@ -397,4 +403,7 @@ class Ui_MainWindow(object):
 | 
			
		||||
        self.actionPolygon.setToolTip(_translate("MainWindow", "Draw polygon"))
 | 
			
		||||
        self.actionPolygon.setStatusTip(_translate("MainWindow", "Accurately annotate by drawing polygon. "))
 | 
			
		||||
        self.actionPolygon.setShortcut(_translate("MainWindow", "C"))
 | 
			
		||||
        self.actionVisible.setText(_translate("MainWindow", "Visible"))
 | 
			
		||||
        self.actionVisible.setStatusTip(_translate("MainWindow", "Visible"))
 | 
			
		||||
        self.actionVisible.setShortcut(_translate("MainWindow", "V"))
 | 
			
		||||
import icons_rc
 | 
			
		||||
 | 
			
		||||
@ -57,7 +57,7 @@
 | 
			
		||||
     <x>0</x>
 | 
			
		||||
     <y>0</y>
 | 
			
		||||
     <width>1280</width>
 | 
			
		||||
     <height>24</height>
 | 
			
		||||
     <height>25</height>
 | 
			
		||||
    </rect>
 | 
			
		||||
   </property>
 | 
			
		||||
   <property name="font">
 | 
			
		||||
@ -234,12 +234,13 @@
 | 
			
		||||
   <addaction name="actionZoom_out"/>
 | 
			
		||||
   <addaction name="actionFit_wiondow"/>
 | 
			
		||||
   <addaction name="actionBit_map"/>
 | 
			
		||||
   <addaction name="actionVisible"/>
 | 
			
		||||
  </widget>
 | 
			
		||||
  <widget class="QDockWidget" name="info_dock">
 | 
			
		||||
   <property name="minimumSize">
 | 
			
		||||
    <size>
 | 
			
		||||
     <width>80</width>
 | 
			
		||||
     <height>38</height>
 | 
			
		||||
     <width>85</width>
 | 
			
		||||
     <height>43</height>
 | 
			
		||||
    </size>
 | 
			
		||||
   </property>
 | 
			
		||||
   <property name="features">
 | 
			
		||||
@ -256,8 +257,8 @@
 | 
			
		||||
  <widget class="QDockWidget" name="labels_dock">
 | 
			
		||||
   <property name="minimumSize">
 | 
			
		||||
    <size>
 | 
			
		||||
     <width>80</width>
 | 
			
		||||
     <height>38</height>
 | 
			
		||||
     <width>85</width>
 | 
			
		||||
     <height>43</height>
 | 
			
		||||
    </size>
 | 
			
		||||
   </property>
 | 
			
		||||
   <property name="features">
 | 
			
		||||
@ -683,6 +684,21 @@
 | 
			
		||||
    <string>C</string>
 | 
			
		||||
   </property>
 | 
			
		||||
  </action>
 | 
			
		||||
  <action name="actionVisible">
 | 
			
		||||
   <property name="icon">
 | 
			
		||||
    <iconset resource="../icons.qrc">
 | 
			
		||||
     <normaloff>:/icon/icons/眼睛_eyes.svg</normaloff>:/icon/icons/眼睛_eyes.svg</iconset>
 | 
			
		||||
   </property>
 | 
			
		||||
   <property name="text">
 | 
			
		||||
    <string>Visible</string>
 | 
			
		||||
   </property>
 | 
			
		||||
   <property name="statusTip">
 | 
			
		||||
    <string>Visible</string>
 | 
			
		||||
   </property>
 | 
			
		||||
   <property name="shortcut">
 | 
			
		||||
    <string>V</string>
 | 
			
		||||
   </property>
 | 
			
		||||
  </action>
 | 
			
		||||
 </widget>
 | 
			
		||||
 <resources>
 | 
			
		||||
  <include location="../icons.qrc"/>
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										238
									
								
								ui/en.ts
									
									
									
									
									
								
							
							
						
						
									
										238
									
								
								ui/en.ts
									
									
									
									
									
								
							@ -94,72 +94,72 @@
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="242"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="262"/>
 | 
			
		||||
        <source>help</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="265"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="285"/>
 | 
			
		||||
        <source>E</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="260"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="280"/>
 | 
			
		||||
        <source>Del</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="245"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="265"/>
 | 
			
		||||
        <source>S</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="250"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="270"/>
 | 
			
		||||
        <source>Save annotation</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="247"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="267"/>
 | 
			
		||||
        <source>T</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="259"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="279"/>
 | 
			
		||||
        <source>Delete polygon</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="244"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="264"/>
 | 
			
		||||
        <source>B</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="262"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="282"/>
 | 
			
		||||
        <source>Next image</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="246"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="266"/>
 | 
			
		||||
        <source>D</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="248"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="268"/>
 | 
			
		||||
        <source>A</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="253"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="273"/>
 | 
			
		||||
        <source>Bit map</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="254"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="274"/>
 | 
			
		||||
        <source>Space</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="256"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="276"/>
 | 
			
		||||
        <source>F</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -225,75 +225,90 @@ http://www.yatenglg.cn/isat</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="243"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="263"/>
 | 
			
		||||
        <source>Shortcut</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="249"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="269"/>
 | 
			
		||||
        <source>Prior image</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="269"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="289"/>
 | 
			
		||||
        <source>To top</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="258"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="278"/>
 | 
			
		||||
        <source>To bottom</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="255"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="275"/>
 | 
			
		||||
        <source>Zoom fit</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="252"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="272"/>
 | 
			
		||||
        <source>Draw polygon</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="257"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="277"/>
 | 
			
		||||
        <source>Segment anything</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="261"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="281"/>
 | 
			
		||||
        <source>Q</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="263"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="283"/>
 | 
			
		||||
        <source>Backspace</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="264"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="284"/>
 | 
			
		||||
        <source>Z</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="266"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="286"/>
 | 
			
		||||
        <source>Annotate finish</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="267"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="287"/>
 | 
			
		||||
        <source>Annotate cancel</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="268"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="288"/>
 | 
			
		||||
        <source>Esc</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="271"/>
 | 
			
		||||
        <source>C</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="290"/>
 | 
			
		||||
        <source>Polygons Visible</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="291"/>
 | 
			
		||||
        <source>V</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>Form</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="label_dock.py" line="31"/>
 | 
			
		||||
        <location filename="label_dock.py" line="40"/>
 | 
			
		||||
        <source>Form</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -337,388 +352,403 @@ http://www.yatenglg.cn/isat</source>
 | 
			
		||||
        <source>Jump to the image.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="label_dock.py" line="41"/>
 | 
			
		||||
        <source>Visible</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MainWindow</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="317"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="320"/>
 | 
			
		||||
        <source>ISAT</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="318"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="321"/>
 | 
			
		||||
        <source>File</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="319"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="322"/>
 | 
			
		||||
        <source>View</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="320"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="323"/>
 | 
			
		||||
        <source>Help</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="322"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="325"/>
 | 
			
		||||
        <source>Tools</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="369"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="372"/>
 | 
			
		||||
        <source>Edit</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="324"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="327"/>
 | 
			
		||||
        <source>toolBar</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="325"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="328"/>
 | 
			
		||||
        <source>Info</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="326"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="329"/>
 | 
			
		||||
        <source>Labels</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="327"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="330"/>
 | 
			
		||||
        <source>Files</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="330"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="333"/>
 | 
			
		||||
        <source>Zoom in</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="332"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="335"/>
 | 
			
		||||
        <source>Zoom out</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="335"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="338"/>
 | 
			
		||||
        <source>Fit window</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="337"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="340"/>
 | 
			
		||||
        <source>F</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="338"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="341"/>
 | 
			
		||||
        <source>Setting</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="341"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="344"/>
 | 
			
		||||
        <source>Exit</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="345"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="348"/>
 | 
			
		||||
        <source>Save</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="347"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="350"/>
 | 
			
		||||
        <source>S</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="349"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="352"/>
 | 
			
		||||
        <source>Prev image</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="351"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="354"/>
 | 
			
		||||
        <source>A</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="353"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="356"/>
 | 
			
		||||
        <source>Next image</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="355"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="358"/>
 | 
			
		||||
        <source>D</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="357"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="360"/>
 | 
			
		||||
        <source>About</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="399"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="402"/>
 | 
			
		||||
        <source>C</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="362"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="365"/>
 | 
			
		||||
        <source>Delete</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="363"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="366"/>
 | 
			
		||||
        <source>Delete polygon</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="365"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="368"/>
 | 
			
		||||
        <source>Del</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="366"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="369"/>
 | 
			
		||||
        <source>Bit map</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="368"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="371"/>
 | 
			
		||||
        <source>Space</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="370"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="373"/>
 | 
			
		||||
        <source>Edit polygon</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="395"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="398"/>
 | 
			
		||||
        <source>E</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="372"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="375"/>
 | 
			
		||||
        <source>To top</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="373"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="376"/>
 | 
			
		||||
        <source>Move polygon to top layer</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="375"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="378"/>
 | 
			
		||||
        <source>T</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="376"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="379"/>
 | 
			
		||||
        <source>To bottom</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="377"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="380"/>
 | 
			
		||||
        <source>Move polygon to bottom layer</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="379"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="382"/>
 | 
			
		||||
        <source>B</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="380"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="383"/>
 | 
			
		||||
        <source>Label converter</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="381"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="384"/>
 | 
			
		||||
        <source>Convert annotations to png image.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="321"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="324"/>
 | 
			
		||||
        <source>Laguage</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="328"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="331"/>
 | 
			
		||||
        <source>Images dir</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="329"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="332"/>
 | 
			
		||||
        <source>Open images dir.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="331"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="334"/>
 | 
			
		||||
        <source>Zoom in.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="333"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="336"/>
 | 
			
		||||
        <source>Zoom out.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="336"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="339"/>
 | 
			
		||||
        <source>Fit window.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="339"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="342"/>
 | 
			
		||||
        <source>Setting.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="342"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="345"/>
 | 
			
		||||
        <source>Exit.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="343"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="346"/>
 | 
			
		||||
        <source>Label dir</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="344"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="347"/>
 | 
			
		||||
        <source>Open label dir.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="346"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="349"/>
 | 
			
		||||
        <source>Save annotation.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="350"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="353"/>
 | 
			
		||||
        <source>Prev image.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="354"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="357"/>
 | 
			
		||||
        <source>Next image.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="356"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="359"/>
 | 
			
		||||
        <source>Shortcut</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="359"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="362"/>
 | 
			
		||||
        <source>Segment anything</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="360"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="363"/>
 | 
			
		||||
        <source>Quick annotate using Segment anything.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="361"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="364"/>
 | 
			
		||||
        <source>Q</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="364"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="367"/>
 | 
			
		||||
        <source>Delete polygon.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="367"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="370"/>
 | 
			
		||||
        <source>Show instance or segmeent state.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="371"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="374"/>
 | 
			
		||||
        <source>Edit polygon attribute.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="374"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="377"/>
 | 
			
		||||
        <source>Move polygon to top layer.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="378"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="381"/>
 | 
			
		||||
        <source>Move polygon to bottom layer.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="382"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="385"/>
 | 
			
		||||
        <source>中文</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="383"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="386"/>
 | 
			
		||||
        <source>English</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="385"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="388"/>
 | 
			
		||||
        <source>Backspace</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="386"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="389"/>
 | 
			
		||||
        <source>Backspace.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="387"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="390"/>
 | 
			
		||||
        <source>Z</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="388"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="391"/>
 | 
			
		||||
        <source>Cancel</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="389"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="392"/>
 | 
			
		||||
        <source>Annotate canceled</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="390"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="393"/>
 | 
			
		||||
        <source>Annotate canceled.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="391"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="394"/>
 | 
			
		||||
        <source>Esc</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="392"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="395"/>
 | 
			
		||||
        <source>Finish</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="393"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="396"/>
 | 
			
		||||
        <source>Annotate finished</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="394"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="397"/>
 | 
			
		||||
        <source>Annotate finished.</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="396"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="399"/>
 | 
			
		||||
        <source>Polygon</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="397"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="400"/>
 | 
			
		||||
        <source>Draw polygon</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="398"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="401"/>
 | 
			
		||||
        <source>Accurately annotate by drawing polygon. </source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="403"/>
 | 
			
		||||
        <source>Visible</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="404"/>
 | 
			
		||||
        <source>V</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
</TS>
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
# Form implementation generated from reading ui file '/home/super/PycharmProjects/ISAT/ui/label_dock.ui'
 | 
			
		||||
# Form implementation generated from reading ui file '/home/super/PycharmProjects/ISAT_with_segment_anything/ui/label_dock.ui'
 | 
			
		||||
#
 | 
			
		||||
# Created by: PyQt5 UI code generator 5.15.7
 | 
			
		||||
#
 | 
			
		||||
@ -14,11 +14,20 @@ from PyQt5 import QtCore, QtGui, QtWidgets
 | 
			
		||||
class Ui_Form(object):
 | 
			
		||||
    def setupUi(self, Form):
 | 
			
		||||
        Form.setObjectName("Form")
 | 
			
		||||
        Form.resize(250, 304)
 | 
			
		||||
        Form.resize(250, 302)
 | 
			
		||||
        self.verticalLayout = QtWidgets.QVBoxLayout(Form)
 | 
			
		||||
        self.verticalLayout.setContentsMargins(2, 2, 2, 2)
 | 
			
		||||
        self.verticalLayout.setSpacing(0)
 | 
			
		||||
        self.verticalLayout.setObjectName("verticalLayout")
 | 
			
		||||
        self.widget = QtWidgets.QWidget(Form)
 | 
			
		||||
        self.widget.setObjectName("widget")
 | 
			
		||||
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)
 | 
			
		||||
        self.horizontalLayout.setContentsMargins(-1, -1, -1, 0)
 | 
			
		||||
        self.horizontalLayout.setObjectName("horizontalLayout")
 | 
			
		||||
        self.checkBox_visible = QtWidgets.QCheckBox(self.widget)
 | 
			
		||||
        self.checkBox_visible.setObjectName("checkBox_visible")
 | 
			
		||||
        self.horizontalLayout.addWidget(self.checkBox_visible)
 | 
			
		||||
        self.verticalLayout.addWidget(self.widget)
 | 
			
		||||
        self.listWidget = QtWidgets.QListWidget(Form)
 | 
			
		||||
        self.listWidget.setObjectName("listWidget")
 | 
			
		||||
        self.verticalLayout.addWidget(self.listWidget)
 | 
			
		||||
@ -29,3 +38,4 @@ class Ui_Form(object):
 | 
			
		||||
    def retranslateUi(self, Form):
 | 
			
		||||
        _translate = QtCore.QCoreApplication.translate
 | 
			
		||||
        Form.setWindowTitle(_translate("Form", "Form"))
 | 
			
		||||
        self.checkBox_visible.setText(_translate("Form", "Visible"))
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,7 @@
 | 
			
		||||
    <x>0</x>
 | 
			
		||||
    <y>0</y>
 | 
			
		||||
    <width>250</width>
 | 
			
		||||
    <height>304</height>
 | 
			
		||||
    <height>302</height>
 | 
			
		||||
   </rect>
 | 
			
		||||
  </property>
 | 
			
		||||
  <property name="windowTitle">
 | 
			
		||||
@ -29,6 +29,22 @@
 | 
			
		||||
   <property name="bottomMargin">
 | 
			
		||||
    <number>2</number>
 | 
			
		||||
   </property>
 | 
			
		||||
   <item>
 | 
			
		||||
    <widget class="QWidget" name="widget" native="true">
 | 
			
		||||
     <layout class="QHBoxLayout" name="horizontalLayout">
 | 
			
		||||
      <property name="bottomMargin">
 | 
			
		||||
       <number>0</number>
 | 
			
		||||
      </property>
 | 
			
		||||
      <item>
 | 
			
		||||
       <widget class="QCheckBox" name="checkBox_visible">
 | 
			
		||||
        <property name="text">
 | 
			
		||||
         <string>Visible</string>
 | 
			
		||||
        </property>
 | 
			
		||||
       </widget>
 | 
			
		||||
      </item>
 | 
			
		||||
     </layout>
 | 
			
		||||
    </widget>
 | 
			
		||||
   </item>
 | 
			
		||||
   <item>
 | 
			
		||||
    <widget class="QListWidget" name="listWidget"/>
 | 
			
		||||
   </item>
 | 
			
		||||
 | 
			
		||||
@ -56,6 +56,7 @@ class Ui_Dialog(object):
 | 
			
		||||
        self.label_20 = QtWidgets.QLabel(self.widget_2)
 | 
			
		||||
        self.label_20.setMaximumSize(QtCore.QSize(80, 16777215))
 | 
			
		||||
        font = QtGui.QFont()
 | 
			
		||||
        font.setFamily("Times New Roman")
 | 
			
		||||
        font.setPointSize(12)
 | 
			
		||||
        self.label_20.setFont(font)
 | 
			
		||||
        self.label_20.setStyleSheet("color: rgb(133, 0, 0);")
 | 
			
		||||
@ -64,6 +65,7 @@ class Ui_Dialog(object):
 | 
			
		||||
        self.label_19 = QtWidgets.QLabel(self.widget_2)
 | 
			
		||||
        self.label_19.setMaximumSize(QtCore.QSize(80, 16777215))
 | 
			
		||||
        font = QtGui.QFont()
 | 
			
		||||
        font.setFamily("Times New Roman")
 | 
			
		||||
        font.setPointSize(12)
 | 
			
		||||
        self.label_19.setFont(font)
 | 
			
		||||
        self.label_19.setStyleSheet("color: rgb(133, 0, 0);")
 | 
			
		||||
@ -72,6 +74,7 @@ class Ui_Dialog(object):
 | 
			
		||||
        self.label_17 = QtWidgets.QLabel(self.widget_2)
 | 
			
		||||
        self.label_17.setMaximumSize(QtCore.QSize(80, 16777215))
 | 
			
		||||
        font = QtGui.QFont()
 | 
			
		||||
        font.setFamily("Times New Roman")
 | 
			
		||||
        font.setPointSize(12)
 | 
			
		||||
        self.label_17.setFont(font)
 | 
			
		||||
        self.label_17.setStyleSheet("color: rgb(133, 0, 0);")
 | 
			
		||||
@ -80,6 +83,7 @@ class Ui_Dialog(object):
 | 
			
		||||
        self.label_15 = QtWidgets.QLabel(self.widget_2)
 | 
			
		||||
        self.label_15.setMaximumSize(QtCore.QSize(80, 16777215))
 | 
			
		||||
        font = QtGui.QFont()
 | 
			
		||||
        font.setFamily("Times New Roman")
 | 
			
		||||
        font.setPointSize(12)
 | 
			
		||||
        self.label_15.setFont(font)
 | 
			
		||||
        self.label_15.setStyleSheet("color: rgb(133, 0, 0);")
 | 
			
		||||
@ -88,6 +92,7 @@ class Ui_Dialog(object):
 | 
			
		||||
        self.label_7 = QtWidgets.QLabel(self.widget_2)
 | 
			
		||||
        self.label_7.setMaximumSize(QtCore.QSize(80, 16777215))
 | 
			
		||||
        font = QtGui.QFont()
 | 
			
		||||
        font.setFamily("Times New Roman")
 | 
			
		||||
        font.setPointSize(12)
 | 
			
		||||
        self.label_7.setFont(font)
 | 
			
		||||
        self.label_7.setStyleSheet("color: rgb(133, 0, 0);")
 | 
			
		||||
@ -108,6 +113,7 @@ class Ui_Dialog(object):
 | 
			
		||||
        self.label_18 = QtWidgets.QLabel(self.widget_2)
 | 
			
		||||
        self.label_18.setMaximumSize(QtCore.QSize(80, 16777215))
 | 
			
		||||
        font = QtGui.QFont()
 | 
			
		||||
        font.setFamily("Times New Roman")
 | 
			
		||||
        font.setPointSize(12)
 | 
			
		||||
        self.label_18.setFont(font)
 | 
			
		||||
        self.label_18.setStyleSheet("color: rgb(133, 0, 0);")
 | 
			
		||||
@ -128,6 +134,7 @@ class Ui_Dialog(object):
 | 
			
		||||
        self.label_16 = QtWidgets.QLabel(self.widget_2)
 | 
			
		||||
        self.label_16.setMaximumSize(QtCore.QSize(80, 16777215))
 | 
			
		||||
        font = QtGui.QFont()
 | 
			
		||||
        font.setFamily("Times New Roman")
 | 
			
		||||
        font.setPointSize(12)
 | 
			
		||||
        self.label_16.setFont(font)
 | 
			
		||||
        self.label_16.setStyleSheet("color: rgb(133, 0, 0);")
 | 
			
		||||
@ -142,6 +149,7 @@ class Ui_Dialog(object):
 | 
			
		||||
        self.label_21 = QtWidgets.QLabel(self.widget_2)
 | 
			
		||||
        self.label_21.setMaximumSize(QtCore.QSize(80, 16777215))
 | 
			
		||||
        font = QtGui.QFont()
 | 
			
		||||
        font.setFamily("Times New Roman")
 | 
			
		||||
        font.setPointSize(12)
 | 
			
		||||
        self.label_21.setFont(font)
 | 
			
		||||
        self.label_21.setStyleSheet("color: rgb(133, 0, 0);")
 | 
			
		||||
@ -168,6 +176,7 @@ class Ui_Dialog(object):
 | 
			
		||||
        self.label_13 = QtWidgets.QLabel(self.widget_2)
 | 
			
		||||
        self.label_13.setMaximumSize(QtCore.QSize(80, 16777215))
 | 
			
		||||
        font = QtGui.QFont()
 | 
			
		||||
        font.setFamily("Times New Roman")
 | 
			
		||||
        font.setPointSize(12)
 | 
			
		||||
        self.label_13.setFont(font)
 | 
			
		||||
        self.label_13.setStyleSheet("color: rgb(133, 0, 0);")
 | 
			
		||||
@ -176,6 +185,7 @@ class Ui_Dialog(object):
 | 
			
		||||
        self.label_12 = QtWidgets.QLabel(self.widget_2)
 | 
			
		||||
        self.label_12.setMaximumSize(QtCore.QSize(80, 16777215))
 | 
			
		||||
        font = QtGui.QFont()
 | 
			
		||||
        font.setFamily("Times New Roman")
 | 
			
		||||
        font.setPointSize(12)
 | 
			
		||||
        self.label_12.setFont(font)
 | 
			
		||||
        self.label_12.setStyleSheet("color: rgb(133, 0, 0);")
 | 
			
		||||
@ -195,6 +205,7 @@ class Ui_Dialog(object):
 | 
			
		||||
        self.gridLayout.addWidget(self.label_22, 2, 0, 1, 1)
 | 
			
		||||
        self.label_23 = QtWidgets.QLabel(self.widget_2)
 | 
			
		||||
        font = QtGui.QFont()
 | 
			
		||||
        font.setFamily("Times New Roman")
 | 
			
		||||
        font.setPointSize(12)
 | 
			
		||||
        self.label_23.setFont(font)
 | 
			
		||||
        self.label_23.setStyleSheet("color: rgb(133, 0, 0);")
 | 
			
		||||
@ -202,6 +213,7 @@ class Ui_Dialog(object):
 | 
			
		||||
        self.gridLayout.addWidget(self.label_23, 2, 1, 1, 1)
 | 
			
		||||
        self.label_25 = QtWidgets.QLabel(self.widget_2)
 | 
			
		||||
        font = QtGui.QFont()
 | 
			
		||||
        font.setFamily("Times New Roman")
 | 
			
		||||
        font.setPointSize(12)
 | 
			
		||||
        self.label_25.setFont(font)
 | 
			
		||||
        self.label_25.setStyleSheet("color: rgb(133, 0, 0);")
 | 
			
		||||
@ -221,6 +233,7 @@ class Ui_Dialog(object):
 | 
			
		||||
        self.gridLayout.addWidget(self.label_26, 3, 0, 1, 1)
 | 
			
		||||
        self.label_27 = QtWidgets.QLabel(self.widget_2)
 | 
			
		||||
        font = QtGui.QFont()
 | 
			
		||||
        font.setFamily("Times New Roman")
 | 
			
		||||
        font.setPointSize(12)
 | 
			
		||||
        self.label_27.setFont(font)
 | 
			
		||||
        self.label_27.setStyleSheet("color: rgb(133, 0, 0);")
 | 
			
		||||
@ -232,6 +245,13 @@ class Ui_Dialog(object):
 | 
			
		||||
        self.label_8.setFont(font)
 | 
			
		||||
        self.label_8.setObjectName("label_8")
 | 
			
		||||
        self.gridLayout.addWidget(self.label_8, 5, 0, 1, 1)
 | 
			
		||||
        self.label_28 = QtWidgets.QLabel(self.widget_2)
 | 
			
		||||
        self.label_28.setObjectName("label_28")
 | 
			
		||||
        self.gridLayout.addWidget(self.label_28, 3, 2, 1, 1)
 | 
			
		||||
        self.label_29 = QtWidgets.QLabel(self.widget_2)
 | 
			
		||||
        self.label_29.setStyleSheet("color: rgb(133, 0, 0);")
 | 
			
		||||
        self.label_29.setObjectName("label_29")
 | 
			
		||||
        self.gridLayout.addWidget(self.label_29, 3, 3, 1, 1)
 | 
			
		||||
        self.verticalLayout.addWidget(self.widget_2)
 | 
			
		||||
 | 
			
		||||
        self.retranslateUi(Dialog)
 | 
			
		||||
@ -248,7 +268,7 @@ class Ui_Dialog(object):
 | 
			
		||||
        self.label_7.setText(_translate("Dialog", "A"))
 | 
			
		||||
        self.label_2.setText(_translate("Dialog", "Prior image"))
 | 
			
		||||
        self.label_10.setText(_translate("Dialog", "Save annotation"))
 | 
			
		||||
        self.label_18.setText(_translate("Dialog", "E"))
 | 
			
		||||
        self.label_18.setText(_translate("Dialog", "C"))
 | 
			
		||||
        self.label_5.setText(_translate("Dialog", "Draw polygon"))
 | 
			
		||||
        self.label_14.setText(_translate("Dialog", "Bit map"))
 | 
			
		||||
        self.label_16.setText(_translate("Dialog", "Space"))
 | 
			
		||||
@ -267,4 +287,6 @@ class Ui_Dialog(object):
 | 
			
		||||
        self.label_26.setText(_translate("Dialog", "Annotate cancel"))
 | 
			
		||||
        self.label_27.setText(_translate("Dialog", "Esc"))
 | 
			
		||||
        self.label_8.setText(_translate("Dialog", "To top"))
 | 
			
		||||
        self.label_28.setText(_translate("Dialog", "Polygons Visible"))
 | 
			
		||||
        self.label_29.setText(_translate("Dialog", "V"))
 | 
			
		||||
import icons_rc
 | 
			
		||||
 | 
			
		||||
@ -93,6 +93,7 @@
 | 
			
		||||
        </property>
 | 
			
		||||
        <property name="font">
 | 
			
		||||
         <font>
 | 
			
		||||
          <family>Times New Roman</family>
 | 
			
		||||
          <pointsize>12</pointsize>
 | 
			
		||||
         </font>
 | 
			
		||||
        </property>
 | 
			
		||||
@ -114,6 +115,7 @@
 | 
			
		||||
        </property>
 | 
			
		||||
        <property name="font">
 | 
			
		||||
         <font>
 | 
			
		||||
          <family>Times New Roman</family>
 | 
			
		||||
          <pointsize>12</pointsize>
 | 
			
		||||
         </font>
 | 
			
		||||
        </property>
 | 
			
		||||
@ -135,6 +137,7 @@
 | 
			
		||||
        </property>
 | 
			
		||||
        <property name="font">
 | 
			
		||||
         <font>
 | 
			
		||||
          <family>Times New Roman</family>
 | 
			
		||||
          <pointsize>12</pointsize>
 | 
			
		||||
         </font>
 | 
			
		||||
        </property>
 | 
			
		||||
@ -156,6 +159,7 @@
 | 
			
		||||
        </property>
 | 
			
		||||
        <property name="font">
 | 
			
		||||
         <font>
 | 
			
		||||
          <family>Times New Roman</family>
 | 
			
		||||
          <pointsize>12</pointsize>
 | 
			
		||||
         </font>
 | 
			
		||||
        </property>
 | 
			
		||||
@ -177,6 +181,7 @@
 | 
			
		||||
        </property>
 | 
			
		||||
        <property name="font">
 | 
			
		||||
         <font>
 | 
			
		||||
          <family>Times New Roman</family>
 | 
			
		||||
          <pointsize>12</pointsize>
 | 
			
		||||
         </font>
 | 
			
		||||
        </property>
 | 
			
		||||
@ -222,6 +227,7 @@
 | 
			
		||||
        </property>
 | 
			
		||||
        <property name="font">
 | 
			
		||||
         <font>
 | 
			
		||||
          <family>Times New Roman</family>
 | 
			
		||||
          <pointsize>12</pointsize>
 | 
			
		||||
         </font>
 | 
			
		||||
        </property>
 | 
			
		||||
@ -229,7 +235,7 @@
 | 
			
		||||
         <string notr="true">color: rgb(133, 0, 0);</string>
 | 
			
		||||
        </property>
 | 
			
		||||
        <property name="text">
 | 
			
		||||
         <string>E</string>
 | 
			
		||||
         <string>C</string>
 | 
			
		||||
        </property>
 | 
			
		||||
       </widget>
 | 
			
		||||
      </item>
 | 
			
		||||
@ -267,6 +273,7 @@
 | 
			
		||||
        </property>
 | 
			
		||||
        <property name="font">
 | 
			
		||||
         <font>
 | 
			
		||||
          <family>Times New Roman</family>
 | 
			
		||||
          <pointsize>12</pointsize>
 | 
			
		||||
         </font>
 | 
			
		||||
        </property>
 | 
			
		||||
@ -300,6 +307,7 @@
 | 
			
		||||
        </property>
 | 
			
		||||
        <property name="font">
 | 
			
		||||
         <font>
 | 
			
		||||
          <family>Times New Roman</family>
 | 
			
		||||
          <pointsize>12</pointsize>
 | 
			
		||||
         </font>
 | 
			
		||||
        </property>
 | 
			
		||||
@ -357,6 +365,7 @@
 | 
			
		||||
        </property>
 | 
			
		||||
        <property name="font">
 | 
			
		||||
         <font>
 | 
			
		||||
          <family>Times New Roman</family>
 | 
			
		||||
          <pointsize>12</pointsize>
 | 
			
		||||
         </font>
 | 
			
		||||
        </property>
 | 
			
		||||
@ -378,6 +387,7 @@
 | 
			
		||||
        </property>
 | 
			
		||||
        <property name="font">
 | 
			
		||||
         <font>
 | 
			
		||||
          <family>Times New Roman</family>
 | 
			
		||||
          <pointsize>12</pointsize>
 | 
			
		||||
         </font>
 | 
			
		||||
        </property>
 | 
			
		||||
@ -417,6 +427,7 @@
 | 
			
		||||
       <widget class="QLabel" name="label_23">
 | 
			
		||||
        <property name="font">
 | 
			
		||||
         <font>
 | 
			
		||||
          <family>Times New Roman</family>
 | 
			
		||||
          <pointsize>12</pointsize>
 | 
			
		||||
         </font>
 | 
			
		||||
        </property>
 | 
			
		||||
@ -432,6 +443,7 @@
 | 
			
		||||
       <widget class="QLabel" name="label_25">
 | 
			
		||||
        <property name="font">
 | 
			
		||||
         <font>
 | 
			
		||||
          <family>Times New Roman</family>
 | 
			
		||||
          <pointsize>12</pointsize>
 | 
			
		||||
         </font>
 | 
			
		||||
        </property>
 | 
			
		||||
@ -471,6 +483,7 @@
 | 
			
		||||
       <widget class="QLabel" name="label_27">
 | 
			
		||||
        <property name="font">
 | 
			
		||||
         <font>
 | 
			
		||||
          <family>Times New Roman</family>
 | 
			
		||||
          <pointsize>12</pointsize>
 | 
			
		||||
         </font>
 | 
			
		||||
        </property>
 | 
			
		||||
@ -494,6 +507,23 @@
 | 
			
		||||
        </property>
 | 
			
		||||
       </widget>
 | 
			
		||||
      </item>
 | 
			
		||||
      <item row="3" column="2">
 | 
			
		||||
       <widget class="QLabel" name="label_28">
 | 
			
		||||
        <property name="text">
 | 
			
		||||
         <string>Polygons Visible</string>
 | 
			
		||||
        </property>
 | 
			
		||||
       </widget>
 | 
			
		||||
      </item>
 | 
			
		||||
      <item row="3" column="3">
 | 
			
		||||
       <widget class="QLabel" name="label_29">
 | 
			
		||||
        <property name="styleSheet">
 | 
			
		||||
         <string notr="true">color: rgb(133, 0, 0);</string>
 | 
			
		||||
        </property>
 | 
			
		||||
        <property name="text">
 | 
			
		||||
         <string>V</string>
 | 
			
		||||
        </property>
 | 
			
		||||
       </widget>
 | 
			
		||||
      </item>
 | 
			
		||||
     </layout>
 | 
			
		||||
    </widget>
 | 
			
		||||
   </item>
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								ui/zh_CN.qm
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								ui/zh_CN.qm
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										240
									
								
								ui/zh_CN.ts
									
									
									
									
									
								
							
							
						
						
									
										240
									
								
								ui/zh_CN.ts
									
									
									
									
									
								
							@ -99,7 +99,7 @@
 | 
			
		||||
        <translation>转换</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="242"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="262"/>
 | 
			
		||||
        <source>help</source>
 | 
			
		||||
        <translation>帮助</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -119,7 +119,7 @@
 | 
			
		||||
        <translation type="obsolete">多边形置于底层</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="265"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="285"/>
 | 
			
		||||
        <source>E</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -134,27 +134,27 @@
 | 
			
		||||
        <translation type="obsolete">多边形置于顶层</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="260"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="280"/>
 | 
			
		||||
        <source>Del</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="245"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="265"/>
 | 
			
		||||
        <source>S</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="250"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="270"/>
 | 
			
		||||
        <source>Save annotation</source>
 | 
			
		||||
        <translation>保存标注文件</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="247"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="267"/>
 | 
			
		||||
        <source>T</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="259"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="279"/>
 | 
			
		||||
        <source>Delete polygon</source>
 | 
			
		||||
        <translation>删除多边形</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -164,7 +164,7 @@
 | 
			
		||||
        <translation type="obsolete">编辑多边形</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="244"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="264"/>
 | 
			
		||||
        <source>B</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -174,12 +174,12 @@
 | 
			
		||||
        <translation type="obsolete">文件</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="262"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="282"/>
 | 
			
		||||
        <source>Next image</source>
 | 
			
		||||
        <translation>下一张图片</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="246"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="266"/>
 | 
			
		||||
        <source>D</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -189,7 +189,7 @@
 | 
			
		||||
        <translation type="obsolete">上一张图片</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="248"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="268"/>
 | 
			
		||||
        <source>A</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -214,17 +214,17 @@
 | 
			
		||||
        <translation type="obsolete">视图</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="253"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="273"/>
 | 
			
		||||
        <source>Bit map</source>
 | 
			
		||||
        <translation>位图</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="254"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="274"/>
 | 
			
		||||
        <source>Space</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="256"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="276"/>
 | 
			
		||||
        <source>F</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -336,7 +336,7 @@
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="about_dialog.py" line="74"/>
 | 
			
		||||
        <source>ISAT with Segment anything.</source>
 | 
			
		||||
        <translation type="unfinished">ISAT集成Segment anything.</translation>
 | 
			
		||||
        <translation>ISAT集成Segment anything.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="about_dialog.py" line="75"/>
 | 
			
		||||
@ -350,75 +350,90 @@ http://www.yatenglg.cn/isat</source>
 | 
			
		||||
        <translation>添加新类别</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="243"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="263"/>
 | 
			
		||||
        <source>Shortcut</source>
 | 
			
		||||
        <translation>快捷键</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="249"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="269"/>
 | 
			
		||||
        <source>Prior image</source>
 | 
			
		||||
        <translation>上一张图片</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="269"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="289"/>
 | 
			
		||||
        <source>To top</source>
 | 
			
		||||
        <translation>置顶</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="258"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="278"/>
 | 
			
		||||
        <source>To bottom</source>
 | 
			
		||||
        <translation>置底</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="255"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="275"/>
 | 
			
		||||
        <source>Zoom fit</source>
 | 
			
		||||
        <translation>适应窗口</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="252"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="272"/>
 | 
			
		||||
        <source>Draw polygon</source>
 | 
			
		||||
        <translation>绘制多边形</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="257"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="277"/>
 | 
			
		||||
        <source>Segment anything</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="261"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="281"/>
 | 
			
		||||
        <source>Q</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="263"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="283"/>
 | 
			
		||||
        <source>Backspace</source>
 | 
			
		||||
        <translation>回退</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="264"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="284"/>
 | 
			
		||||
        <source>Z</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="266"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="286"/>
 | 
			
		||||
        <source>Annotate finish</source>
 | 
			
		||||
        <translation>标注完成</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="267"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="287"/>
 | 
			
		||||
        <source>Annotate cancel</source>
 | 
			
		||||
        <translation>标注取消</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="268"/>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="288"/>
 | 
			
		||||
        <source>Esc</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="271"/>
 | 
			
		||||
        <source>C</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="290"/>
 | 
			
		||||
        <source>Polygons Visible</source>
 | 
			
		||||
        <translation>多边形显示/隐藏</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="shortcut_dialog.py" line="291"/>
 | 
			
		||||
        <source>V</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>Form</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="label_dock.py" line="31"/>
 | 
			
		||||
        <location filename="label_dock.py" line="40"/>
 | 
			
		||||
        <source>Form</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -462,56 +477,61 @@ http://www.yatenglg.cn/isat</source>
 | 
			
		||||
        <source>Jump to the image.</source>
 | 
			
		||||
        <translation>跳转到指定图片.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="label_dock.py" line="41"/>
 | 
			
		||||
        <source>Visible</source>
 | 
			
		||||
        <translation>显示/隐藏</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
<context>
 | 
			
		||||
    <name>MainWindow</name>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="317"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="320"/>
 | 
			
		||||
        <source>ISAT</source>
 | 
			
		||||
        <translation>ISAT 图片分割标注工具</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="318"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="321"/>
 | 
			
		||||
        <source>File</source>
 | 
			
		||||
        <translation>文件</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="319"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="322"/>
 | 
			
		||||
        <source>View</source>
 | 
			
		||||
        <translation>视图</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="320"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="323"/>
 | 
			
		||||
        <source>Help</source>
 | 
			
		||||
        <translation>帮助</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="322"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="325"/>
 | 
			
		||||
        <source>Tools</source>
 | 
			
		||||
        <translation>工具</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="369"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="372"/>
 | 
			
		||||
        <source>Edit</source>
 | 
			
		||||
        <translation>编辑</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="324"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="327"/>
 | 
			
		||||
        <source>toolBar</source>
 | 
			
		||||
        <translation>工具栏</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="325"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="328"/>
 | 
			
		||||
        <source>Info</source>
 | 
			
		||||
        <translation>图片信息</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="326"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="329"/>
 | 
			
		||||
        <source>Labels</source>
 | 
			
		||||
        <translation>标签列表</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="327"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="330"/>
 | 
			
		||||
        <source>Files</source>
 | 
			
		||||
        <translation>文件列表</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -526,32 +546,32 @@ http://www.yatenglg.cn/isat</source>
 | 
			
		||||
        <translation type="obsolete">打开图片文件夹</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="330"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="333"/>
 | 
			
		||||
        <source>Zoom in</source>
 | 
			
		||||
        <translation>放大</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="332"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="335"/>
 | 
			
		||||
        <source>Zoom out</source>
 | 
			
		||||
        <translation>缩小</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="335"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="338"/>
 | 
			
		||||
        <source>Fit window</source>
 | 
			
		||||
        <translation>适应窗口</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="337"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="340"/>
 | 
			
		||||
        <source>F</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="338"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="341"/>
 | 
			
		||||
        <source>Setting</source>
 | 
			
		||||
        <translation>设置</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="341"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="344"/>
 | 
			
		||||
        <source>Exit</source>
 | 
			
		||||
        <translation>退出</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -561,12 +581,12 @@ http://www.yatenglg.cn/isat</source>
 | 
			
		||||
        <translation type="obsolete">标签保存位置</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="345"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="348"/>
 | 
			
		||||
        <source>Save</source>
 | 
			
		||||
        <translation>保存</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="347"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="350"/>
 | 
			
		||||
        <source>S</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -576,12 +596,12 @@ http://www.yatenglg.cn/isat</source>
 | 
			
		||||
        <translation type="obsolete">上一张</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="349"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="352"/>
 | 
			
		||||
        <source>Prev image</source>
 | 
			
		||||
        <translation>上一张图片</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="351"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="354"/>
 | 
			
		||||
        <source>A</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -591,17 +611,17 @@ http://www.yatenglg.cn/isat</source>
 | 
			
		||||
        <translation type="obsolete">下一张</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="353"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="356"/>
 | 
			
		||||
        <source>Next image</source>
 | 
			
		||||
        <translation>下一张图片</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="355"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="358"/>
 | 
			
		||||
        <source>D</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="357"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="360"/>
 | 
			
		||||
        <source>About</source>
 | 
			
		||||
        <translation>关于</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -616,92 +636,92 @@ http://www.yatenglg.cn/isat</source>
 | 
			
		||||
        <translation type="obsolete">创建多边形</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="399"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="402"/>
 | 
			
		||||
        <source>C</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="362"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="365"/>
 | 
			
		||||
        <source>Delete</source>
 | 
			
		||||
        <translation>删除</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="363"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="366"/>
 | 
			
		||||
        <source>Delete polygon</source>
 | 
			
		||||
        <translation>删除多边形</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="365"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="368"/>
 | 
			
		||||
        <source>Del</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="366"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="369"/>
 | 
			
		||||
        <source>Bit map</source>
 | 
			
		||||
        <translation>位图</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="368"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="371"/>
 | 
			
		||||
        <source>Space</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="370"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="373"/>
 | 
			
		||||
        <source>Edit polygon</source>
 | 
			
		||||
        <translation>编辑多边形</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="395"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="398"/>
 | 
			
		||||
        <source>E</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="372"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="375"/>
 | 
			
		||||
        <source>To top</source>
 | 
			
		||||
        <translation>置顶</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="373"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="376"/>
 | 
			
		||||
        <source>Move polygon to top layer</source>
 | 
			
		||||
        <translation>移动多边形到顶层</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="375"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="378"/>
 | 
			
		||||
        <source>T</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="376"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="379"/>
 | 
			
		||||
        <source>To bottom</source>
 | 
			
		||||
        <translation>置底</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="377"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="380"/>
 | 
			
		||||
        <source>Move polygon to bottom layer</source>
 | 
			
		||||
        <translation>移动多边形到底层</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="379"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="382"/>
 | 
			
		||||
        <source>B</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="380"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="383"/>
 | 
			
		||||
        <source>Label converter</source>
 | 
			
		||||
        <translation>标注文件转换器</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="381"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="384"/>
 | 
			
		||||
        <source>Convert annotations to png image.</source>
 | 
			
		||||
        <translation>将ISAT标注文件转换为png图片.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="321"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="324"/>
 | 
			
		||||
        <source>Laguage</source>
 | 
			
		||||
        <translation>语言</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="356"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="359"/>
 | 
			
		||||
        <source>Shortcut</source>
 | 
			
		||||
        <translation>快捷键</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -711,52 +731,52 @@ http://www.yatenglg.cn/isat</source>
 | 
			
		||||
        <translation type="obsolete">中文</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="383"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="386"/>
 | 
			
		||||
        <source>English</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="382"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="385"/>
 | 
			
		||||
        <source>中文</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="328"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="331"/>
 | 
			
		||||
        <source>Images dir</source>
 | 
			
		||||
        <translation>图片文件夹</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="329"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="332"/>
 | 
			
		||||
        <source>Open images dir.</source>
 | 
			
		||||
        <translation>打开图片文件夹.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="331"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="334"/>
 | 
			
		||||
        <source>Zoom in.</source>
 | 
			
		||||
        <translation>放大.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="333"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="336"/>
 | 
			
		||||
        <source>Zoom out.</source>
 | 
			
		||||
        <translation>缩小.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="336"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="339"/>
 | 
			
		||||
        <source>Fit window.</source>
 | 
			
		||||
        <translation>适应窗口.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="343"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="346"/>
 | 
			
		||||
        <source>Label dir</source>
 | 
			
		||||
        <translation>标签文件夹</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="344"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="347"/>
 | 
			
		||||
        <source>Open label dir.</source>
 | 
			
		||||
        <translation>打开标签文件夹.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="346"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="349"/>
 | 
			
		||||
        <source>Save annotation.</source>
 | 
			
		||||
        <translation>保存.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -771,7 +791,7 @@ http://www.yatenglg.cn/isat</source>
 | 
			
		||||
        <translation type="obsolete">打开上一张图片.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="354"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="357"/>
 | 
			
		||||
        <source>Next image.</source>
 | 
			
		||||
        <translation>下一张图片.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
@ -781,124 +801,134 @@ http://www.yatenglg.cn/isat</source>
 | 
			
		||||
        <translation type="obsolete">打开下一张图片.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="364"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="367"/>
 | 
			
		||||
        <source>Delete polygon.</source>
 | 
			
		||||
        <translation>删除多边形.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="367"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="370"/>
 | 
			
		||||
        <source>Show instance or segmeent state.</source>
 | 
			
		||||
        <translation>显示语义与实例结果.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="371"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="374"/>
 | 
			
		||||
        <source>Edit polygon attribute.</source>
 | 
			
		||||
        <translation>编辑多边形属性.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="374"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="377"/>
 | 
			
		||||
        <source>Move polygon to top layer.</source>
 | 
			
		||||
        <translation>将多边形移动到最上层.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="378"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="381"/>
 | 
			
		||||
        <source>Move polygon to bottom layer.</source>
 | 
			
		||||
        <translation>将多边形移动到最下层.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="339"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="342"/>
 | 
			
		||||
        <source>Setting.</source>
 | 
			
		||||
        <translation>设置.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="342"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="345"/>
 | 
			
		||||
        <source>Exit.</source>
 | 
			
		||||
        <translation>退出.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="350"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="353"/>
 | 
			
		||||
        <source>Prev image.</source>
 | 
			
		||||
        <translation>前一张图片.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="359"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="362"/>
 | 
			
		||||
        <source>Segment anything</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="360"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="363"/>
 | 
			
		||||
        <source>Quick annotate using Segment anything.</source>
 | 
			
		||||
        <translation>使用Segment anything进行快速标注.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="361"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="364"/>
 | 
			
		||||
        <source>Q</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="385"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="388"/>
 | 
			
		||||
        <source>Backspace</source>
 | 
			
		||||
        <translation>回退</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="386"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="389"/>
 | 
			
		||||
        <source>Backspace.</source>
 | 
			
		||||
        <translation>回退.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="387"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="390"/>
 | 
			
		||||
        <source>Z</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="388"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="391"/>
 | 
			
		||||
        <source>Cancel</source>
 | 
			
		||||
        <translation>取消</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="389"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="392"/>
 | 
			
		||||
        <source>Annotate canceled</source>
 | 
			
		||||
        <translation>标注取消</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="390"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="393"/>
 | 
			
		||||
        <source>Annotate canceled.</source>
 | 
			
		||||
        <translation>标注取消.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="391"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="394"/>
 | 
			
		||||
        <source>Esc</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="392"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="395"/>
 | 
			
		||||
        <source>Finish</source>
 | 
			
		||||
        <translation>完成</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="393"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="396"/>
 | 
			
		||||
        <source>Annotate finished</source>
 | 
			
		||||
        <translation>标注完成</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="394"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="397"/>
 | 
			
		||||
        <source>Annotate finished.</source>
 | 
			
		||||
        <translation>标注完成.</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="396"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="399"/>
 | 
			
		||||
        <source>Polygon</source>
 | 
			
		||||
        <translation>多边形</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="397"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="400"/>
 | 
			
		||||
        <source>Draw polygon</source>
 | 
			
		||||
        <translation>绘制多边形</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="398"/>
 | 
			
		||||
        <location filename="MainWindow.py" line="401"/>
 | 
			
		||||
        <source>Accurately annotate by drawing polygon. </source>
 | 
			
		||||
        <translation>通过手动绘制多边形,进行精细标注. </translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="403"/>
 | 
			
		||||
        <source>Visible</source>
 | 
			
		||||
        <translation>显示/隐藏</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="MainWindow.py" line="404"/>
 | 
			
		||||
        <source>V</source>
 | 
			
		||||
        <translation></translation>
 | 
			
		||||
    </message>
 | 
			
		||||
</context>
 | 
			
		||||
</TS>
 | 
			
		||||
 | 
			
		||||
@ -342,7 +342,17 @@ class AnnotationScene(QtWidgets.QGraphicsScene):
 | 
			
		||||
        # 状态栏,显示当前坐标
 | 
			
		||||
        if self.image_data is not None:
 | 
			
		||||
            x, y = round(pos.x()), round(pos.y())
 | 
			
		||||
            self.mainwindow.labelCoordinates.setText('({}, {}) [{}]'.format(x, y, self.image_data[y-1][x-1]))
 | 
			
		||||
            self.mainwindow.labelCoord.setText('xy: ({:>4d},{:>4d})'.format(x, y))
 | 
			
		||||
 | 
			
		||||
            data = self.image_data[y-1][x-1]
 | 
			
		||||
            if self.image_data.ndim == 2:
 | 
			
		||||
                self.mainwindow.labelData.setText('pix: [{:^3d}]'.format(data))
 | 
			
		||||
            elif self.image_data.ndim == 3:
 | 
			
		||||
                if len(data) == 3:
 | 
			
		||||
                    self.mainwindow.labelData.setText('rgb: [{:>3d},{:>3d},{:>3d}]'.format(data[0], data[1], data[2]))
 | 
			
		||||
                else:
 | 
			
		||||
                    self.mainwindow.labelData.setText('pix: [{}]'.format(data))
 | 
			
		||||
 | 
			
		||||
        super(AnnotationScene, self).mouseMoveEvent(event)
 | 
			
		||||
 | 
			
		||||
    def update_mask(self):
 | 
			
		||||
 | 
			
		||||
@ -14,6 +14,7 @@ class LabelsDockWidget(QtWidgets.QWidget, Ui_Form):
 | 
			
		||||
        self.polygon_item_dict = {}
 | 
			
		||||
 | 
			
		||||
        self.listWidget.itemSelectionChanged.connect(self.set_polygon_selected)
 | 
			
		||||
        self.checkBox_visible.stateChanged.connect(self.set_all_polygon_visible)
 | 
			
		||||
 | 
			
		||||
        self.listWidget.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.CustomContextMenu)
 | 
			
		||||
        self.listWidget.customContextMenuRequested.connect(
 | 
			
		||||
@ -32,6 +33,7 @@ class LabelsDockWidget(QtWidgets.QWidget, Ui_Form):
 | 
			
		||||
        check_box = QtWidgets.QCheckBox()
 | 
			
		||||
        check_box.setFixedWidth(20)
 | 
			
		||||
        check_box.setChecked(polygon.isVisible())
 | 
			
		||||
        check_box.setObjectName('check_box')
 | 
			
		||||
        check_box.stateChanged.connect(functools.partial(self.set_polygon_show, polygon))
 | 
			
		||||
        layout.addWidget(check_box)
 | 
			
		||||
 | 
			
		||||
@ -62,6 +64,7 @@ class LabelsDockWidget(QtWidgets.QWidget, Ui_Form):
 | 
			
		||||
    def update_listwidget(self):
 | 
			
		||||
        self.listWidget.clear()
 | 
			
		||||
        self.polygon_item_dict.clear()
 | 
			
		||||
        self.checkBox_visible.setChecked(True)
 | 
			
		||||
 | 
			
		||||
        for polygon in self.mainwindow.polygons:
 | 
			
		||||
            item, item_widget = self.generate_item_and_itemwidget(polygon)
 | 
			
		||||
@ -102,3 +105,12 @@ class LabelsDockWidget(QtWidgets.QWidget, Ui_Form):
 | 
			
		||||
        for vertex in polygon.vertexs:
 | 
			
		||||
            vertex.setVisible(self.sender().checkState())
 | 
			
		||||
        polygon.setVisible(self.sender().checkState())
 | 
			
		||||
 | 
			
		||||
    def set_all_polygon_visible(self, visible:bool=None):
 | 
			
		||||
        visible = self.checkBox_visible.isChecked() if visible is None else visible
 | 
			
		||||
        for index in range(self.listWidget.count()):
 | 
			
		||||
            item = self.listWidget.item(index)
 | 
			
		||||
            widget = self.listWidget.itemWidget(item)
 | 
			
		||||
            check_box = widget.findChild(QtWidgets.QCheckBox, 'check_box')
 | 
			
		||||
            check_box.setChecked(visible)
 | 
			
		||||
        self.checkBox_visible.setChecked(visible)
 | 
			
		||||
 | 
			
		||||
@ -19,6 +19,7 @@ from annotation import Object, Annotation
 | 
			
		||||
from widgets.polygon import Polygon
 | 
			
		||||
import os
 | 
			
		||||
from PIL import Image
 | 
			
		||||
import functools
 | 
			
		||||
import imgviz
 | 
			
		||||
from segment_any.segment_any import SegAny
 | 
			
		||||
import icons_rc
 | 
			
		||||
@ -70,6 +71,17 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
 | 
			
		||||
            QtWidgets.QMessageBox.warning(self, 'Warning', 'The checkpoint of [Segment anything] not existed. If you want use quick annotate, please download from {}'.format('https://github.com/facebookresearch/segment-anything#model-checkpoints'))
 | 
			
		||||
            self.use_segment_anything = False
 | 
			
		||||
 | 
			
		||||
        if self.use_segment_anything:
 | 
			
		||||
            if self.segany.device != 'cpu':
 | 
			
		||||
                from segment_any.gpu_resource import GPUResource_Thread
 | 
			
		||||
                self.gpu_resource_thread = GPUResource_Thread()
 | 
			
		||||
                self.gpu_resource_thread.message.connect(self.labelGPUResource.setText)
 | 
			
		||||
                self.gpu_resource_thread.start()
 | 
			
		||||
            else:
 | 
			
		||||
                self.labelGPUResource.setText('cpu')
 | 
			
		||||
        else:
 | 
			
		||||
            self.labelGPUResource.setText('segment anything unused.')
 | 
			
		||||
 | 
			
		||||
    def init_ui(self):
 | 
			
		||||
        self.setting_dialog = SettingDialog(parent=self, mainwindow=self)
 | 
			
		||||
 | 
			
		||||
@ -100,8 +112,20 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
 | 
			
		||||
        self.shortcut_dialog = ShortcutDialog(self)
 | 
			
		||||
        self.about_dialog = AboutDialog(self)
 | 
			
		||||
 | 
			
		||||
        self.labelCoordinates = QtWidgets.QLabel('')
 | 
			
		||||
        self.statusbar.addPermanentWidget(self.labelCoordinates)
 | 
			
		||||
        self.labelGPUResource = QtWidgets.QLabel('')
 | 
			
		||||
        self.labelGPUResource.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight)
 | 
			
		||||
        self.labelGPUResource.setFixedWidth(180)
 | 
			
		||||
        self.statusbar.addPermanentWidget(self.labelGPUResource)
 | 
			
		||||
 | 
			
		||||
        self.labelCoord = QtWidgets.QLabel('')
 | 
			
		||||
        self.labelCoord.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight)
 | 
			
		||||
        self.labelCoord.setFixedWidth(150)
 | 
			
		||||
        self.statusbar.addPermanentWidget(self.labelCoord)
 | 
			
		||||
 | 
			
		||||
        self.labelData = QtWidgets.QLabel('')
 | 
			
		||||
        self.labelData.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight)
 | 
			
		||||
        self.labelData.setFixedWidth(150)
 | 
			
		||||
        self.statusbar.addPermanentWidget(self.labelData)
 | 
			
		||||
 | 
			
		||||
        self.trans = QtCore.QTranslator()
 | 
			
		||||
 | 
			
		||||
@ -347,6 +371,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
 | 
			
		||||
            del self.current_label.objects[index]
 | 
			
		||||
 | 
			
		||||
    def change_bit_map(self):
 | 
			
		||||
        self.set_labels_visible(True)
 | 
			
		||||
        if self.scene.mode == STATUSMode.CREATE:
 | 
			
		||||
            self.scene.cancel_draw()
 | 
			
		||||
        if self.map_mode == MAPMode.LABEL:
 | 
			
		||||
@ -359,8 +384,10 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
 | 
			
		||||
                polygon.color.setAlpha(255)
 | 
			
		||||
                polygon.setBrush(polygon.color)
 | 
			
		||||
            self.labels_dock_widget.listWidget.setEnabled(False)
 | 
			
		||||
            self.labels_dock_widget.checkBox_visible.setEnabled(False)
 | 
			
		||||
            self.actionSegment_anything.setEnabled(False)
 | 
			
		||||
            self.actionPolygon.setEnabled(False)
 | 
			
		||||
            self.actionVisible.setEnabled(False)
 | 
			
		||||
            self.map_mode = MAPMode.SEMANTIC
 | 
			
		||||
            semantic_icon = QtGui.QIcon()
 | 
			
		||||
            semantic_icon.addPixmap(QtGui.QPixmap(":/icon/icons/semantic.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
 | 
			
		||||
@ -380,8 +407,10 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
 | 
			
		||||
                polygon.color.setAlpha(255)
 | 
			
		||||
                polygon.setBrush(polygon.color)
 | 
			
		||||
            self.labels_dock_widget.listWidget.setEnabled(False)
 | 
			
		||||
            self.labels_dock_widget.checkBox_visible.setEnabled(False)
 | 
			
		||||
            self.actionSegment_anything.setEnabled(False)
 | 
			
		||||
            self.actionPolygon.setEnabled(False)
 | 
			
		||||
            self.actionVisible.setEnabled(False)
 | 
			
		||||
            self.map_mode = MAPMode.INSTANCE
 | 
			
		||||
            instance_icon = QtGui.QIcon()
 | 
			
		||||
            instance_icon.addPixmap(QtGui.QPixmap(":/icon/icons/instance.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
 | 
			
		||||
@ -398,8 +427,10 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
 | 
			
		||||
                polygon.color.setAlpha(polygon.nohover_alpha)
 | 
			
		||||
                polygon.setBrush(polygon.color)
 | 
			
		||||
            self.labels_dock_widget.listWidget.setEnabled(True)
 | 
			
		||||
            self.labels_dock_widget.checkBox_visible.setEnabled(True)
 | 
			
		||||
            self.actionSegment_anything.setEnabled(self.use_segment_anything)
 | 
			
		||||
            self.actionPolygon.setEnabled(True)
 | 
			
		||||
            self.actionVisible.setEnabled(True)
 | 
			
		||||
            self.map_mode = MAPMode.LABEL
 | 
			
		||||
            label_icon = QtGui.QIcon()
 | 
			
		||||
            label_icon.addPixmap(QtGui.QPixmap(":/icon/icons/照片_pic.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
 | 
			
		||||
@ -407,6 +438,12 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
 | 
			
		||||
        else:
 | 
			
		||||
            pass
 | 
			
		||||
 | 
			
		||||
    def set_labels_visible(self, visible=None):
 | 
			
		||||
        if visible is None:
 | 
			
		||||
            visible = not self.labels_dock_widget.checkBox_visible.isChecked()
 | 
			
		||||
        self.labels_dock_widget.checkBox_visible.setChecked(visible)
 | 
			
		||||
        self.labels_dock_widget.set_all_polygon_visible(visible)
 | 
			
		||||
 | 
			
		||||
    def label_converter(self):
 | 
			
		||||
        self.convert_dialog.reset_gui()
 | 
			
		||||
        self.convert_dialog.show()
 | 
			
		||||
@ -450,6 +487,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
 | 
			
		||||
        self.actionZoom_out.triggered.connect(self.view.zoom_out)
 | 
			
		||||
        self.actionFit_wiondow.triggered.connect(self.view.zoomfit)
 | 
			
		||||
        self.actionBit_map.triggered.connect(self.change_bit_map)
 | 
			
		||||
        self.actionVisible.triggered.connect(functools.partial(self.set_labels_visible, None))
 | 
			
		||||
 | 
			
		||||
        self.actionConverter.triggered.connect(self.label_converter)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user