功能添加
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,8 +38,10 @@ class Annotation:
|
||||
with open(self.label_path, 'r') as f:
|
||||
dataset = load(f)
|
||||
info = dataset.get('info', {})
|
||||
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)
|
||||
@ -47,15 +49,35 @@ class Annotation:
|
||||
self.note = info.get('note', '')
|
||||
for obj in objects:
|
||||
category = obj.get('category', 'unknow')
|
||||
group = obj.get('group', '')
|
||||
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', 1)
|
||||
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