功能添加

This commit is contained in:
yatenglg 2023-04-24 21:45:38 +08:00
parent ab122e91a5
commit 42096a19d9
20 changed files with 2054 additions and 1693 deletions

View File

@ -3,6 +3,10 @@
集成[segment anything](https://github.com/facebookresearch/segment-anything),实现图片分割快速标注。 集成[segment anything](https://github.com/facebookresearch/segment-anything),实现图片分割快速标注。
**项目持续更新中,[更新日志](./UpdateLog.md),欢迎大家提出建议**
演示视频https://www.bilibili.com/video/BV1Lk4y1J7uB/
[中文](README.md) [English](README-en.md) [中文](README.md) [English](README-en.md)
## 特点 ## 特点
1. 集成segment anything快速进行图像分割标注 1. 集成segment anything快速进行图像分割标注

10
UpdateLog.md Normal file
View File

@ -0,0 +1,10 @@
# 20240424
- 添加了对labelme格式json的支持只支持标注的多边形
**在进行修改之前,先备份一份!!!**
现在可以打开并编辑之前用labeme生成的标注文件了记得通过图层高低调整遮挡关系。
但最终保存还会以ISAT格式的json保存。
- 添加了显示/隐藏按钮快捷键V用于显示或隐藏所有多边形
- 添加了

View File

@ -38,24 +38,46 @@ class Annotation:
with open(self.label_path, 'r') as f: with open(self.label_path, 'r') as f:
dataset = load(f) dataset = load(f)
info = dataset.get('info', {}) info = dataset.get('info', {})
objects = dataset.get('objects', []) description = info.get('description', '')
if description == 'ISAT':
self.img_name = info.get('name', '') # ISAT格式json
self.width = info.get('width', 0) objects = dataset.get('objects', [])
self.height = info.get('height', 0) self.img_name = info.get('name', '')
self.depth = info.get('depth', 0) self.width = info.get('width', 0)
self.note = info.get('note', '') self.height = info.get('height', 0)
for obj in objects: self.depth = info.get('depth', 0)
category = obj.get('category', 'unknow') self.note = info.get('note', '')
group = obj.get('group', '') for obj in objects:
segmentation = obj.get('segmentation', []) category = obj.get('category', 'unknow')
iscrowd = obj.get('iscrowd', 0) group = obj.get('group', 0)
note = obj.get('note', '') if group is None: group = 0
area = obj.get('area', 0) segmentation = obj.get('segmentation', [])
layer = obj.get('layer', 1) iscrowd = obj.get('iscrowd', 0)
bbox = obj.get('bbox', []) note = obj.get('note', '')
obj = Object(category, group, segmentation, area, layer, bbox, iscrowd, note) area = obj.get('area', 0)
self.objects.append(obj) 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): def save_annotation(self):
dataset = {} dataset = {}

View File

@ -1,5 +1,6 @@
<RCC> <RCC>
<qresource prefix="icon"> <qresource prefix="icon">
<file>icons/眼睛_eyes.svg</file>
<file>icons/semantic.png</file> <file>icons/semantic.png</file>
<file>icons/M_Favicon.ico</file> <file>icons/M_Favicon.ico</file>
<file>icons/instance.png</file> <file>icons/instance.png</file>

File diff suppressed because it is too large Load Diff

View File

@ -19,4 +19,4 @@ label:
name: cake name: cake
- color: '#5c3566' - color: '#5c3566'
name: fence name: fence
language: zh language: en

View 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

View File

@ -17,18 +17,20 @@ class SegAny:
else: else:
raise ValueError('The checkpoint named {} is not supported.'.format(checkpoint)) 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 = sam_model_registry[model_type](checkpoint=checkpoint)
sam.to(device=device) sam.to(device=self.device)
self.predictor = SamPredictor(sam) self.predictor = SamPredictor(sam)
self.image = None self.image = None
def set_image(self, image): def set_image(self, image):
self.predictor.set_image(image) self.predictor.set_image(image)
def reset_image(self): def reset_image(self):
self.predictor.reset_image() self.predictor.reset_image()
self.image = None self.image = None
torch.cuda.empty_cache()
def predict(self, input_point, input_label): def predict(self, input_point, input_label):
input_point = np.array(input_point) input_point = np.array(input_point)
@ -46,5 +48,5 @@ class SegAny:
mask_input=mask_input[None, :, :], mask_input=mask_input[None, :, :],
multimask_output=False, multimask_output=False,
) )
print('masks: {}'.format(masks)) torch.cuda.empty_cache()
return masks return masks

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- 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 # Created by: PyQt5 UI code generator 5.15.7
# #
@ -32,7 +32,7 @@ class Ui_MainWindow(object):
MainWindow.setCentralWidget(self.centralwidget) MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setEnabled(True) 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 = QtGui.QFont()
font.setFamily("Times New Roman") font.setFamily("Times New Roman")
font.setPointSize(12) font.setPointSize(12)
@ -93,7 +93,7 @@ class Ui_MainWindow(object):
self.toolBar.setObjectName("toolBar") self.toolBar.setObjectName("toolBar")
MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar) MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
self.info_dock = QtWidgets.QDockWidget(MainWindow) 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.setFeatures(QtWidgets.QDockWidget.AllDockWidgetFeatures)
self.info_dock.setObjectName("info_dock") self.info_dock.setObjectName("info_dock")
self.dockWidgetContents_2 = QtWidgets.QWidget() self.dockWidgetContents_2 = QtWidgets.QWidget()
@ -101,7 +101,7 @@ class Ui_MainWindow(object):
self.info_dock.setWidget(self.dockWidgetContents_2) self.info_dock.setWidget(self.dockWidgetContents_2)
MainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.info_dock) MainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.info_dock)
self.labels_dock = QtWidgets.QDockWidget(MainWindow) 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.setFeatures(QtWidgets.QDockWidget.AllDockWidgetFeatures)
self.labels_dock.setObjectName("labels_dock") self.labels_dock.setObjectName("labels_dock")
self.dockWidgetContents_3 = QtWidgets.QWidget() 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) icon23.addPixmap(QtGui.QPixmap(":/icon/icons/锚点_anchor.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.actionPolygon.setIcon(icon23) self.actionPolygon.setIcon(icon23)
self.actionPolygon.setObjectName("actionPolygon") 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.actionOpen_dir)
self.menuFile.addAction(self.actionSave_dir) self.menuFile.addAction(self.actionSave_dir)
self.menuFile.addSeparator() self.menuFile.addSeparator()
@ -308,6 +313,7 @@ class Ui_MainWindow(object):
self.toolBar.addAction(self.actionZoom_out) self.toolBar.addAction(self.actionZoom_out)
self.toolBar.addAction(self.actionFit_wiondow) self.toolBar.addAction(self.actionFit_wiondow)
self.toolBar.addAction(self.actionBit_map) self.toolBar.addAction(self.actionBit_map)
self.toolBar.addAction(self.actionVisible)
self.retranslateUi(MainWindow) self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow)
@ -397,4 +403,7 @@ class Ui_MainWindow(object):
self.actionPolygon.setToolTip(_translate("MainWindow", "Draw polygon")) self.actionPolygon.setToolTip(_translate("MainWindow", "Draw polygon"))
self.actionPolygon.setStatusTip(_translate("MainWindow", "Accurately annotate by drawing polygon. ")) self.actionPolygon.setStatusTip(_translate("MainWindow", "Accurately annotate by drawing polygon. "))
self.actionPolygon.setShortcut(_translate("MainWindow", "C")) 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 import icons_rc

View File

@ -57,7 +57,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>1280</width> <width>1280</width>
<height>24</height> <height>25</height>
</rect> </rect>
</property> </property>
<property name="font"> <property name="font">
@ -234,12 +234,13 @@
<addaction name="actionZoom_out"/> <addaction name="actionZoom_out"/>
<addaction name="actionFit_wiondow"/> <addaction name="actionFit_wiondow"/>
<addaction name="actionBit_map"/> <addaction name="actionBit_map"/>
<addaction name="actionVisible"/>
</widget> </widget>
<widget class="QDockWidget" name="info_dock"> <widget class="QDockWidget" name="info_dock">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>80</width> <width>85</width>
<height>38</height> <height>43</height>
</size> </size>
</property> </property>
<property name="features"> <property name="features">
@ -256,8 +257,8 @@
<widget class="QDockWidget" name="labels_dock"> <widget class="QDockWidget" name="labels_dock">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>80</width> <width>85</width>
<height>38</height> <height>43</height>
</size> </size>
</property> </property>
<property name="features"> <property name="features">
@ -683,6 +684,21 @@
<string>C</string> <string>C</string>
</property> </property>
</action> </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> </widget>
<resources> <resources>
<include location="../icons.qrc"/> <include location="../icons.qrc"/>

238
ui/en.ts
View File

@ -94,72 +94,72 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="242"/> <location filename="shortcut_dialog.py" line="262"/>
<source>help</source> <source>help</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="265"/> <location filename="shortcut_dialog.py" line="285"/>
<source>E</source> <source>E</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="260"/> <location filename="shortcut_dialog.py" line="280"/>
<source>Del</source> <source>Del</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="245"/> <location filename="shortcut_dialog.py" line="265"/>
<source>S</source> <source>S</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="250"/> <location filename="shortcut_dialog.py" line="270"/>
<source>Save annotation</source> <source>Save annotation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="247"/> <location filename="shortcut_dialog.py" line="267"/>
<source>T</source> <source>T</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="259"/> <location filename="shortcut_dialog.py" line="279"/>
<source>Delete polygon</source> <source>Delete polygon</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="244"/> <location filename="shortcut_dialog.py" line="264"/>
<source>B</source> <source>B</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="262"/> <location filename="shortcut_dialog.py" line="282"/>
<source>Next image</source> <source>Next image</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="246"/> <location filename="shortcut_dialog.py" line="266"/>
<source>D</source> <source>D</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="248"/> <location filename="shortcut_dialog.py" line="268"/>
<source>A</source> <source>A</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="253"/> <location filename="shortcut_dialog.py" line="273"/>
<source>Bit map</source> <source>Bit map</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="254"/> <location filename="shortcut_dialog.py" line="274"/>
<source>Space</source> <source>Space</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="256"/> <location filename="shortcut_dialog.py" line="276"/>
<source>F</source> <source>F</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -225,75 +225,90 @@ http://www.yatenglg.cn/isat</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="243"/> <location filename="shortcut_dialog.py" line="263"/>
<source>Shortcut</source> <source>Shortcut</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="249"/> <location filename="shortcut_dialog.py" line="269"/>
<source>Prior image</source> <source>Prior image</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="269"/> <location filename="shortcut_dialog.py" line="289"/>
<source>To top</source> <source>To top</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="258"/> <location filename="shortcut_dialog.py" line="278"/>
<source>To bottom</source> <source>To bottom</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="255"/> <location filename="shortcut_dialog.py" line="275"/>
<source>Zoom fit</source> <source>Zoom fit</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="252"/> <location filename="shortcut_dialog.py" line="272"/>
<source>Draw polygon</source> <source>Draw polygon</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="257"/> <location filename="shortcut_dialog.py" line="277"/>
<source>Segment anything</source> <source>Segment anything</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="261"/> <location filename="shortcut_dialog.py" line="281"/>
<source>Q</source> <source>Q</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="263"/> <location filename="shortcut_dialog.py" line="283"/>
<source>Backspace</source> <source>Backspace</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="264"/> <location filename="shortcut_dialog.py" line="284"/>
<source>Z</source> <source>Z</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="266"/> <location filename="shortcut_dialog.py" line="286"/>
<source>Annotate finish</source> <source>Annotate finish</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="267"/> <location filename="shortcut_dialog.py" line="287"/>
<source>Annotate cancel</source> <source>Annotate cancel</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="268"/> <location filename="shortcut_dialog.py" line="288"/>
<source>Esc</source> <source>Esc</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </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>
<context> <context>
<name>Form</name> <name>Form</name>
<message> <message>
<location filename="label_dock.py" line="31"/> <location filename="label_dock.py" line="40"/>
<source>Form</source> <source>Form</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -337,388 +352,403 @@ http://www.yatenglg.cn/isat</source>
<source>Jump to the image.</source> <source>Jump to the image.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="label_dock.py" line="41"/>
<source>Visible</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="MainWindow.py" line="317"/> <location filename="MainWindow.py" line="320"/>
<source>ISAT</source> <source>ISAT</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="318"/> <location filename="MainWindow.py" line="321"/>
<source>File</source> <source>File</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="319"/> <location filename="MainWindow.py" line="322"/>
<source>View</source> <source>View</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="320"/> <location filename="MainWindow.py" line="323"/>
<source>Help</source> <source>Help</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="322"/> <location filename="MainWindow.py" line="325"/>
<source>Tools</source> <source>Tools</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="369"/> <location filename="MainWindow.py" line="372"/>
<source>Edit</source> <source>Edit</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="324"/> <location filename="MainWindow.py" line="327"/>
<source>toolBar</source> <source>toolBar</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="325"/> <location filename="MainWindow.py" line="328"/>
<source>Info</source> <source>Info</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="326"/> <location filename="MainWindow.py" line="329"/>
<source>Labels</source> <source>Labels</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="327"/> <location filename="MainWindow.py" line="330"/>
<source>Files</source> <source>Files</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="330"/> <location filename="MainWindow.py" line="333"/>
<source>Zoom in</source> <source>Zoom in</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="332"/> <location filename="MainWindow.py" line="335"/>
<source>Zoom out</source> <source>Zoom out</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="335"/> <location filename="MainWindow.py" line="338"/>
<source>Fit window</source> <source>Fit window</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="337"/> <location filename="MainWindow.py" line="340"/>
<source>F</source> <source>F</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="338"/> <location filename="MainWindow.py" line="341"/>
<source>Setting</source> <source>Setting</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="341"/> <location filename="MainWindow.py" line="344"/>
<source>Exit</source> <source>Exit</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="345"/> <location filename="MainWindow.py" line="348"/>
<source>Save</source> <source>Save</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="347"/> <location filename="MainWindow.py" line="350"/>
<source>S</source> <source>S</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="349"/> <location filename="MainWindow.py" line="352"/>
<source>Prev image</source> <source>Prev image</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="351"/> <location filename="MainWindow.py" line="354"/>
<source>A</source> <source>A</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="353"/> <location filename="MainWindow.py" line="356"/>
<source>Next image</source> <source>Next image</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="355"/> <location filename="MainWindow.py" line="358"/>
<source>D</source> <source>D</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="357"/> <location filename="MainWindow.py" line="360"/>
<source>About</source> <source>About</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="399"/> <location filename="MainWindow.py" line="402"/>
<source>C</source> <source>C</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="362"/> <location filename="MainWindow.py" line="365"/>
<source>Delete</source> <source>Delete</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="363"/> <location filename="MainWindow.py" line="366"/>
<source>Delete polygon</source> <source>Delete polygon</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="365"/> <location filename="MainWindow.py" line="368"/>
<source>Del</source> <source>Del</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="366"/> <location filename="MainWindow.py" line="369"/>
<source>Bit map</source> <source>Bit map</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="368"/> <location filename="MainWindow.py" line="371"/>
<source>Space</source> <source>Space</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="370"/> <location filename="MainWindow.py" line="373"/>
<source>Edit polygon</source> <source>Edit polygon</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="395"/> <location filename="MainWindow.py" line="398"/>
<source>E</source> <source>E</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="372"/> <location filename="MainWindow.py" line="375"/>
<source>To top</source> <source>To top</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="373"/> <location filename="MainWindow.py" line="376"/>
<source>Move polygon to top layer</source> <source>Move polygon to top layer</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="375"/> <location filename="MainWindow.py" line="378"/>
<source>T</source> <source>T</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="376"/> <location filename="MainWindow.py" line="379"/>
<source>To bottom</source> <source>To bottom</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="377"/> <location filename="MainWindow.py" line="380"/>
<source>Move polygon to bottom layer</source> <source>Move polygon to bottom layer</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="379"/> <location filename="MainWindow.py" line="382"/>
<source>B</source> <source>B</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="380"/> <location filename="MainWindow.py" line="383"/>
<source>Label converter</source> <source>Label converter</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="381"/> <location filename="MainWindow.py" line="384"/>
<source>Convert annotations to png image.</source> <source>Convert annotations to png image.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="321"/> <location filename="MainWindow.py" line="324"/>
<source>Laguage</source> <source>Laguage</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="328"/> <location filename="MainWindow.py" line="331"/>
<source>Images dir</source> <source>Images dir</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="329"/> <location filename="MainWindow.py" line="332"/>
<source>Open images dir.</source> <source>Open images dir.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="331"/> <location filename="MainWindow.py" line="334"/>
<source>Zoom in.</source> <source>Zoom in.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="333"/> <location filename="MainWindow.py" line="336"/>
<source>Zoom out.</source> <source>Zoom out.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="336"/> <location filename="MainWindow.py" line="339"/>
<source>Fit window.</source> <source>Fit window.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="339"/> <location filename="MainWindow.py" line="342"/>
<source>Setting.</source> <source>Setting.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="342"/> <location filename="MainWindow.py" line="345"/>
<source>Exit.</source> <source>Exit.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="343"/> <location filename="MainWindow.py" line="346"/>
<source>Label dir</source> <source>Label dir</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="344"/> <location filename="MainWindow.py" line="347"/>
<source>Open label dir.</source> <source>Open label dir.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="346"/> <location filename="MainWindow.py" line="349"/>
<source>Save annotation.</source> <source>Save annotation.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="350"/> <location filename="MainWindow.py" line="353"/>
<source>Prev image.</source> <source>Prev image.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="354"/> <location filename="MainWindow.py" line="357"/>
<source>Next image.</source> <source>Next image.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="356"/> <location filename="MainWindow.py" line="359"/>
<source>Shortcut</source> <source>Shortcut</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="359"/> <location filename="MainWindow.py" line="362"/>
<source>Segment anything</source> <source>Segment anything</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="360"/> <location filename="MainWindow.py" line="363"/>
<source>Quick annotate using Segment anything.</source> <source>Quick annotate using Segment anything.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="361"/> <location filename="MainWindow.py" line="364"/>
<source>Q</source> <source>Q</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="364"/> <location filename="MainWindow.py" line="367"/>
<source>Delete polygon.</source> <source>Delete polygon.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="367"/> <location filename="MainWindow.py" line="370"/>
<source>Show instance or segmeent state.</source> <source>Show instance or segmeent state.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="371"/> <location filename="MainWindow.py" line="374"/>
<source>Edit polygon attribute.</source> <source>Edit polygon attribute.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="374"/> <location filename="MainWindow.py" line="377"/>
<source>Move polygon to top layer.</source> <source>Move polygon to top layer.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="378"/> <location filename="MainWindow.py" line="381"/>
<source>Move polygon to bottom layer.</source> <source>Move polygon to bottom layer.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="382"/> <location filename="MainWindow.py" line="385"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="383"/> <location filename="MainWindow.py" line="386"/>
<source>English</source> <source>English</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="385"/> <location filename="MainWindow.py" line="388"/>
<source>Backspace</source> <source>Backspace</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="386"/> <location filename="MainWindow.py" line="389"/>
<source>Backspace.</source> <source>Backspace.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="387"/> <location filename="MainWindow.py" line="390"/>
<source>Z</source> <source>Z</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="388"/> <location filename="MainWindow.py" line="391"/>
<source>Cancel</source> <source>Cancel</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="389"/> <location filename="MainWindow.py" line="392"/>
<source>Annotate canceled</source> <source>Annotate canceled</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="390"/> <location filename="MainWindow.py" line="393"/>
<source>Annotate canceled.</source> <source>Annotate canceled.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="391"/> <location filename="MainWindow.py" line="394"/>
<source>Esc</source> <source>Esc</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="392"/> <location filename="MainWindow.py" line="395"/>
<source>Finish</source> <source>Finish</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="393"/> <location filename="MainWindow.py" line="396"/>
<source>Annotate finished</source> <source>Annotate finished</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="394"/> <location filename="MainWindow.py" line="397"/>
<source>Annotate finished.</source> <source>Annotate finished.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="396"/> <location filename="MainWindow.py" line="399"/>
<source>Polygon</source> <source>Polygon</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="397"/> <location filename="MainWindow.py" line="400"/>
<source>Draw polygon</source> <source>Draw polygon</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="398"/> <location filename="MainWindow.py" line="401"/>
<source>Accurately annotate by drawing polygon. </source> <source>Accurately annotate by drawing polygon. </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </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> </context>
</TS> </TS>

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- 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 # Created by: PyQt5 UI code generator 5.15.7
# #
@ -14,11 +14,20 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object): class Ui_Form(object):
def setupUi(self, Form): def setupUi(self, Form):
Form.setObjectName("Form") Form.setObjectName("Form")
Form.resize(250, 304) Form.resize(250, 302)
self.verticalLayout = QtWidgets.QVBoxLayout(Form) self.verticalLayout = QtWidgets.QVBoxLayout(Form)
self.verticalLayout.setContentsMargins(2, 2, 2, 2) self.verticalLayout.setContentsMargins(2, 2, 2, 2)
self.verticalLayout.setSpacing(0) self.verticalLayout.setSpacing(0)
self.verticalLayout.setObjectName("verticalLayout") 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 = QtWidgets.QListWidget(Form)
self.listWidget.setObjectName("listWidget") self.listWidget.setObjectName("listWidget")
self.verticalLayout.addWidget(self.listWidget) self.verticalLayout.addWidget(self.listWidget)
@ -29,3 +38,4 @@ class Ui_Form(object):
def retranslateUi(self, Form): def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate _translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form")) Form.setWindowTitle(_translate("Form", "Form"))
self.checkBox_visible.setText(_translate("Form", "Visible"))

View File

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>250</width> <width>250</width>
<height>304</height> <height>302</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -29,6 +29,22 @@
<property name="bottomMargin"> <property name="bottomMargin">
<number>2</number> <number>2</number>
</property> </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> <item>
<widget class="QListWidget" name="listWidget"/> <widget class="QListWidget" name="listWidget"/>
</item> </item>

View File

@ -56,6 +56,7 @@ class Ui_Dialog(object):
self.label_20 = QtWidgets.QLabel(self.widget_2) self.label_20 = QtWidgets.QLabel(self.widget_2)
self.label_20.setMaximumSize(QtCore.QSize(80, 16777215)) self.label_20.setMaximumSize(QtCore.QSize(80, 16777215))
font = QtGui.QFont() font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(12) font.setPointSize(12)
self.label_20.setFont(font) self.label_20.setFont(font)
self.label_20.setStyleSheet("color: rgb(133, 0, 0);") 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 = QtWidgets.QLabel(self.widget_2)
self.label_19.setMaximumSize(QtCore.QSize(80, 16777215)) self.label_19.setMaximumSize(QtCore.QSize(80, 16777215))
font = QtGui.QFont() font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(12) font.setPointSize(12)
self.label_19.setFont(font) self.label_19.setFont(font)
self.label_19.setStyleSheet("color: rgb(133, 0, 0);") 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 = QtWidgets.QLabel(self.widget_2)
self.label_17.setMaximumSize(QtCore.QSize(80, 16777215)) self.label_17.setMaximumSize(QtCore.QSize(80, 16777215))
font = QtGui.QFont() font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(12) font.setPointSize(12)
self.label_17.setFont(font) self.label_17.setFont(font)
self.label_17.setStyleSheet("color: rgb(133, 0, 0);") 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 = QtWidgets.QLabel(self.widget_2)
self.label_15.setMaximumSize(QtCore.QSize(80, 16777215)) self.label_15.setMaximumSize(QtCore.QSize(80, 16777215))
font = QtGui.QFont() font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(12) font.setPointSize(12)
self.label_15.setFont(font) self.label_15.setFont(font)
self.label_15.setStyleSheet("color: rgb(133, 0, 0);") 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 = QtWidgets.QLabel(self.widget_2)
self.label_7.setMaximumSize(QtCore.QSize(80, 16777215)) self.label_7.setMaximumSize(QtCore.QSize(80, 16777215))
font = QtGui.QFont() font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(12) font.setPointSize(12)
self.label_7.setFont(font) self.label_7.setFont(font)
self.label_7.setStyleSheet("color: rgb(133, 0, 0);") 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 = QtWidgets.QLabel(self.widget_2)
self.label_18.setMaximumSize(QtCore.QSize(80, 16777215)) self.label_18.setMaximumSize(QtCore.QSize(80, 16777215))
font = QtGui.QFont() font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(12) font.setPointSize(12)
self.label_18.setFont(font) self.label_18.setFont(font)
self.label_18.setStyleSheet("color: rgb(133, 0, 0);") 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 = QtWidgets.QLabel(self.widget_2)
self.label_16.setMaximumSize(QtCore.QSize(80, 16777215)) self.label_16.setMaximumSize(QtCore.QSize(80, 16777215))
font = QtGui.QFont() font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(12) font.setPointSize(12)
self.label_16.setFont(font) self.label_16.setFont(font)
self.label_16.setStyleSheet("color: rgb(133, 0, 0);") 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 = QtWidgets.QLabel(self.widget_2)
self.label_21.setMaximumSize(QtCore.QSize(80, 16777215)) self.label_21.setMaximumSize(QtCore.QSize(80, 16777215))
font = QtGui.QFont() font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(12) font.setPointSize(12)
self.label_21.setFont(font) self.label_21.setFont(font)
self.label_21.setStyleSheet("color: rgb(133, 0, 0);") 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 = QtWidgets.QLabel(self.widget_2)
self.label_13.setMaximumSize(QtCore.QSize(80, 16777215)) self.label_13.setMaximumSize(QtCore.QSize(80, 16777215))
font = QtGui.QFont() font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(12) font.setPointSize(12)
self.label_13.setFont(font) self.label_13.setFont(font)
self.label_13.setStyleSheet("color: rgb(133, 0, 0);") 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 = QtWidgets.QLabel(self.widget_2)
self.label_12.setMaximumSize(QtCore.QSize(80, 16777215)) self.label_12.setMaximumSize(QtCore.QSize(80, 16777215))
font = QtGui.QFont() font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(12) font.setPointSize(12)
self.label_12.setFont(font) self.label_12.setFont(font)
self.label_12.setStyleSheet("color: rgb(133, 0, 0);") 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.gridLayout.addWidget(self.label_22, 2, 0, 1, 1)
self.label_23 = QtWidgets.QLabel(self.widget_2) self.label_23 = QtWidgets.QLabel(self.widget_2)
font = QtGui.QFont() font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(12) font.setPointSize(12)
self.label_23.setFont(font) self.label_23.setFont(font)
self.label_23.setStyleSheet("color: rgb(133, 0, 0);") 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.gridLayout.addWidget(self.label_23, 2, 1, 1, 1)
self.label_25 = QtWidgets.QLabel(self.widget_2) self.label_25 = QtWidgets.QLabel(self.widget_2)
font = QtGui.QFont() font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(12) font.setPointSize(12)
self.label_25.setFont(font) self.label_25.setFont(font)
self.label_25.setStyleSheet("color: rgb(133, 0, 0);") 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.gridLayout.addWidget(self.label_26, 3, 0, 1, 1)
self.label_27 = QtWidgets.QLabel(self.widget_2) self.label_27 = QtWidgets.QLabel(self.widget_2)
font = QtGui.QFont() font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(12) font.setPointSize(12)
self.label_27.setFont(font) self.label_27.setFont(font)
self.label_27.setStyleSheet("color: rgb(133, 0, 0);") 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.setFont(font)
self.label_8.setObjectName("label_8") self.label_8.setObjectName("label_8")
self.gridLayout.addWidget(self.label_8, 5, 0, 1, 1) 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.verticalLayout.addWidget(self.widget_2)
self.retranslateUi(Dialog) self.retranslateUi(Dialog)
@ -248,7 +268,7 @@ class Ui_Dialog(object):
self.label_7.setText(_translate("Dialog", "A")) self.label_7.setText(_translate("Dialog", "A"))
self.label_2.setText(_translate("Dialog", "Prior image")) self.label_2.setText(_translate("Dialog", "Prior image"))
self.label_10.setText(_translate("Dialog", "Save annotation")) 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_5.setText(_translate("Dialog", "Draw polygon"))
self.label_14.setText(_translate("Dialog", "Bit map")) self.label_14.setText(_translate("Dialog", "Bit map"))
self.label_16.setText(_translate("Dialog", "Space")) 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_26.setText(_translate("Dialog", "Annotate cancel"))
self.label_27.setText(_translate("Dialog", "Esc")) self.label_27.setText(_translate("Dialog", "Esc"))
self.label_8.setText(_translate("Dialog", "To top")) 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 import icons_rc

View File

@ -93,6 +93,7 @@
</property> </property>
<property name="font"> <property name="font">
<font> <font>
<family>Times New Roman</family>
<pointsize>12</pointsize> <pointsize>12</pointsize>
</font> </font>
</property> </property>
@ -114,6 +115,7 @@
</property> </property>
<property name="font"> <property name="font">
<font> <font>
<family>Times New Roman</family>
<pointsize>12</pointsize> <pointsize>12</pointsize>
</font> </font>
</property> </property>
@ -135,6 +137,7 @@
</property> </property>
<property name="font"> <property name="font">
<font> <font>
<family>Times New Roman</family>
<pointsize>12</pointsize> <pointsize>12</pointsize>
</font> </font>
</property> </property>
@ -156,6 +159,7 @@
</property> </property>
<property name="font"> <property name="font">
<font> <font>
<family>Times New Roman</family>
<pointsize>12</pointsize> <pointsize>12</pointsize>
</font> </font>
</property> </property>
@ -177,6 +181,7 @@
</property> </property>
<property name="font"> <property name="font">
<font> <font>
<family>Times New Roman</family>
<pointsize>12</pointsize> <pointsize>12</pointsize>
</font> </font>
</property> </property>
@ -222,6 +227,7 @@
</property> </property>
<property name="font"> <property name="font">
<font> <font>
<family>Times New Roman</family>
<pointsize>12</pointsize> <pointsize>12</pointsize>
</font> </font>
</property> </property>
@ -229,7 +235,7 @@
<string notr="true">color: rgb(133, 0, 0);</string> <string notr="true">color: rgb(133, 0, 0);</string>
</property> </property>
<property name="text"> <property name="text">
<string>E</string> <string>C</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -267,6 +273,7 @@
</property> </property>
<property name="font"> <property name="font">
<font> <font>
<family>Times New Roman</family>
<pointsize>12</pointsize> <pointsize>12</pointsize>
</font> </font>
</property> </property>
@ -300,6 +307,7 @@
</property> </property>
<property name="font"> <property name="font">
<font> <font>
<family>Times New Roman</family>
<pointsize>12</pointsize> <pointsize>12</pointsize>
</font> </font>
</property> </property>
@ -357,6 +365,7 @@
</property> </property>
<property name="font"> <property name="font">
<font> <font>
<family>Times New Roman</family>
<pointsize>12</pointsize> <pointsize>12</pointsize>
</font> </font>
</property> </property>
@ -378,6 +387,7 @@
</property> </property>
<property name="font"> <property name="font">
<font> <font>
<family>Times New Roman</family>
<pointsize>12</pointsize> <pointsize>12</pointsize>
</font> </font>
</property> </property>
@ -417,6 +427,7 @@
<widget class="QLabel" name="label_23"> <widget class="QLabel" name="label_23">
<property name="font"> <property name="font">
<font> <font>
<family>Times New Roman</family>
<pointsize>12</pointsize> <pointsize>12</pointsize>
</font> </font>
</property> </property>
@ -432,6 +443,7 @@
<widget class="QLabel" name="label_25"> <widget class="QLabel" name="label_25">
<property name="font"> <property name="font">
<font> <font>
<family>Times New Roman</family>
<pointsize>12</pointsize> <pointsize>12</pointsize>
</font> </font>
</property> </property>
@ -471,6 +483,7 @@
<widget class="QLabel" name="label_27"> <widget class="QLabel" name="label_27">
<property name="font"> <property name="font">
<font> <font>
<family>Times New Roman</family>
<pointsize>12</pointsize> <pointsize>12</pointsize>
</font> </font>
</property> </property>
@ -494,6 +507,23 @@
</property> </property>
</widget> </widget>
</item> </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> </layout>
</widget> </widget>
</item> </item>

Binary file not shown.

View File

@ -99,7 +99,7 @@
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="242"/> <location filename="shortcut_dialog.py" line="262"/>
<source>help</source> <source>help</source>
<translation></translation> <translation></translation>
</message> </message>
@ -119,7 +119,7 @@
<translation type="obsolete"></translation> <translation type="obsolete"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="265"/> <location filename="shortcut_dialog.py" line="285"/>
<source>E</source> <source>E</source>
<translation></translation> <translation></translation>
</message> </message>
@ -134,27 +134,27 @@
<translation type="obsolete"></translation> <translation type="obsolete"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="260"/> <location filename="shortcut_dialog.py" line="280"/>
<source>Del</source> <source>Del</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="245"/> <location filename="shortcut_dialog.py" line="265"/>
<source>S</source> <source>S</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="250"/> <location filename="shortcut_dialog.py" line="270"/>
<source>Save annotation</source> <source>Save annotation</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="247"/> <location filename="shortcut_dialog.py" line="267"/>
<source>T</source> <source>T</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="259"/> <location filename="shortcut_dialog.py" line="279"/>
<source>Delete polygon</source> <source>Delete polygon</source>
<translation></translation> <translation></translation>
</message> </message>
@ -164,7 +164,7 @@
<translation type="obsolete"></translation> <translation type="obsolete"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="244"/> <location filename="shortcut_dialog.py" line="264"/>
<source>B</source> <source>B</source>
<translation></translation> <translation></translation>
</message> </message>
@ -174,12 +174,12 @@
<translation type="obsolete"></translation> <translation type="obsolete"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="262"/> <location filename="shortcut_dialog.py" line="282"/>
<source>Next image</source> <source>Next image</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="246"/> <location filename="shortcut_dialog.py" line="266"/>
<source>D</source> <source>D</source>
<translation></translation> <translation></translation>
</message> </message>
@ -189,7 +189,7 @@
<translation type="obsolete"></translation> <translation type="obsolete"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="248"/> <location filename="shortcut_dialog.py" line="268"/>
<source>A</source> <source>A</source>
<translation></translation> <translation></translation>
</message> </message>
@ -214,17 +214,17 @@
<translation type="obsolete"></translation> <translation type="obsolete"></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="253"/> <location filename="shortcut_dialog.py" line="273"/>
<source>Bit map</source> <source>Bit map</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="254"/> <location filename="shortcut_dialog.py" line="274"/>
<source>Space</source> <source>Space</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="256"/> <location filename="shortcut_dialog.py" line="276"/>
<source>F</source> <source>F</source>
<translation></translation> <translation></translation>
</message> </message>
@ -336,7 +336,7 @@
<message> <message>
<location filename="about_dialog.py" line="74"/> <location filename="about_dialog.py" line="74"/>
<source>ISAT with Segment anything.</source> <source>ISAT with Segment anything.</source>
<translation type="unfinished">ISAT集成Segment anything.</translation> <translation>ISAT集成Segment anything.</translation>
</message> </message>
<message> <message>
<location filename="about_dialog.py" line="75"/> <location filename="about_dialog.py" line="75"/>
@ -350,75 +350,90 @@ http://www.yatenglg.cn/isat</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="243"/> <location filename="shortcut_dialog.py" line="263"/>
<source>Shortcut</source> <source>Shortcut</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="249"/> <location filename="shortcut_dialog.py" line="269"/>
<source>Prior image</source> <source>Prior image</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="269"/> <location filename="shortcut_dialog.py" line="289"/>
<source>To top</source> <source>To top</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="258"/> <location filename="shortcut_dialog.py" line="278"/>
<source>To bottom</source> <source>To bottom</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="255"/> <location filename="shortcut_dialog.py" line="275"/>
<source>Zoom fit</source> <source>Zoom fit</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="252"/> <location filename="shortcut_dialog.py" line="272"/>
<source>Draw polygon</source> <source>Draw polygon</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="257"/> <location filename="shortcut_dialog.py" line="277"/>
<source>Segment anything</source> <source>Segment anything</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="261"/> <location filename="shortcut_dialog.py" line="281"/>
<source>Q</source> <source>Q</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="263"/> <location filename="shortcut_dialog.py" line="283"/>
<source>Backspace</source> <source>Backspace</source>
<translation>退</translation> <translation>退</translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="264"/> <location filename="shortcut_dialog.py" line="284"/>
<source>Z</source> <source>Z</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="266"/> <location filename="shortcut_dialog.py" line="286"/>
<source>Annotate finish</source> <source>Annotate finish</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="267"/> <location filename="shortcut_dialog.py" line="287"/>
<source>Annotate cancel</source> <source>Annotate cancel</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="shortcut_dialog.py" line="268"/> <location filename="shortcut_dialog.py" line="288"/>
<source>Esc</source> <source>Esc</source>
<translation></translation> <translation></translation>
</message> </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>
<context> <context>
<name>Form</name> <name>Form</name>
<message> <message>
<location filename="label_dock.py" line="31"/> <location filename="label_dock.py" line="40"/>
<source>Form</source> <source>Form</source>
<translation></translation> <translation></translation>
</message> </message>
@ -462,56 +477,61 @@ http://www.yatenglg.cn/isat</source>
<source>Jump to the image.</source> <source>Jump to the image.</source>
<translation>.</translation> <translation>.</translation>
</message> </message>
<message>
<location filename="label_dock.py" line="41"/>
<source>Visible</source>
<translation>/</translation>
</message>
</context> </context>
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="MainWindow.py" line="317"/> <location filename="MainWindow.py" line="320"/>
<source>ISAT</source> <source>ISAT</source>
<translation>ISAT </translation> <translation>ISAT </translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="318"/> <location filename="MainWindow.py" line="321"/>
<source>File</source> <source>File</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="319"/> <location filename="MainWindow.py" line="322"/>
<source>View</source> <source>View</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="320"/> <location filename="MainWindow.py" line="323"/>
<source>Help</source> <source>Help</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="322"/> <location filename="MainWindow.py" line="325"/>
<source>Tools</source> <source>Tools</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="369"/> <location filename="MainWindow.py" line="372"/>
<source>Edit</source> <source>Edit</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="324"/> <location filename="MainWindow.py" line="327"/>
<source>toolBar</source> <source>toolBar</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="325"/> <location filename="MainWindow.py" line="328"/>
<source>Info</source> <source>Info</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="326"/> <location filename="MainWindow.py" line="329"/>
<source>Labels</source> <source>Labels</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="327"/> <location filename="MainWindow.py" line="330"/>
<source>Files</source> <source>Files</source>
<translation></translation> <translation></translation>
</message> </message>
@ -526,32 +546,32 @@ http://www.yatenglg.cn/isat</source>
<translation type="obsolete"></translation> <translation type="obsolete"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="330"/> <location filename="MainWindow.py" line="333"/>
<source>Zoom in</source> <source>Zoom in</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="332"/> <location filename="MainWindow.py" line="335"/>
<source>Zoom out</source> <source>Zoom out</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="335"/> <location filename="MainWindow.py" line="338"/>
<source>Fit window</source> <source>Fit window</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="337"/> <location filename="MainWindow.py" line="340"/>
<source>F</source> <source>F</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="338"/> <location filename="MainWindow.py" line="341"/>
<source>Setting</source> <source>Setting</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="341"/> <location filename="MainWindow.py" line="344"/>
<source>Exit</source> <source>Exit</source>
<translation>退</translation> <translation>退</translation>
</message> </message>
@ -561,12 +581,12 @@ http://www.yatenglg.cn/isat</source>
<translation type="obsolete"></translation> <translation type="obsolete"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="345"/> <location filename="MainWindow.py" line="348"/>
<source>Save</source> <source>Save</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="347"/> <location filename="MainWindow.py" line="350"/>
<source>S</source> <source>S</source>
<translation></translation> <translation></translation>
</message> </message>
@ -576,12 +596,12 @@ http://www.yatenglg.cn/isat</source>
<translation type="obsolete"></translation> <translation type="obsolete"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="349"/> <location filename="MainWindow.py" line="352"/>
<source>Prev image</source> <source>Prev image</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="351"/> <location filename="MainWindow.py" line="354"/>
<source>A</source> <source>A</source>
<translation></translation> <translation></translation>
</message> </message>
@ -591,17 +611,17 @@ http://www.yatenglg.cn/isat</source>
<translation type="obsolete"></translation> <translation type="obsolete"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="353"/> <location filename="MainWindow.py" line="356"/>
<source>Next image</source> <source>Next image</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="355"/> <location filename="MainWindow.py" line="358"/>
<source>D</source> <source>D</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="357"/> <location filename="MainWindow.py" line="360"/>
<source>About</source> <source>About</source>
<translation></translation> <translation></translation>
</message> </message>
@ -616,92 +636,92 @@ http://www.yatenglg.cn/isat</source>
<translation type="obsolete"></translation> <translation type="obsolete"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="399"/> <location filename="MainWindow.py" line="402"/>
<source>C</source> <source>C</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="362"/> <location filename="MainWindow.py" line="365"/>
<source>Delete</source> <source>Delete</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="363"/> <location filename="MainWindow.py" line="366"/>
<source>Delete polygon</source> <source>Delete polygon</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="365"/> <location filename="MainWindow.py" line="368"/>
<source>Del</source> <source>Del</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="366"/> <location filename="MainWindow.py" line="369"/>
<source>Bit map</source> <source>Bit map</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="368"/> <location filename="MainWindow.py" line="371"/>
<source>Space</source> <source>Space</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="370"/> <location filename="MainWindow.py" line="373"/>
<source>Edit polygon</source> <source>Edit polygon</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="395"/> <location filename="MainWindow.py" line="398"/>
<source>E</source> <source>E</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="372"/> <location filename="MainWindow.py" line="375"/>
<source>To top</source> <source>To top</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="373"/> <location filename="MainWindow.py" line="376"/>
<source>Move polygon to top layer</source> <source>Move polygon to top layer</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="375"/> <location filename="MainWindow.py" line="378"/>
<source>T</source> <source>T</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="376"/> <location filename="MainWindow.py" line="379"/>
<source>To bottom</source> <source>To bottom</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="377"/> <location filename="MainWindow.py" line="380"/>
<source>Move polygon to bottom layer</source> <source>Move polygon to bottom layer</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="379"/> <location filename="MainWindow.py" line="382"/>
<source>B</source> <source>B</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="380"/> <location filename="MainWindow.py" line="383"/>
<source>Label converter</source> <source>Label converter</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="381"/> <location filename="MainWindow.py" line="384"/>
<source>Convert annotations to png image.</source> <source>Convert annotations to png image.</source>
<translation>ISAT标注文件转换为png图片.</translation> <translation>ISAT标注文件转换为png图片.</translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="321"/> <location filename="MainWindow.py" line="324"/>
<source>Laguage</source> <source>Laguage</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="356"/> <location filename="MainWindow.py" line="359"/>
<source>Shortcut</source> <source>Shortcut</source>
<translation></translation> <translation></translation>
</message> </message>
@ -711,52 +731,52 @@ http://www.yatenglg.cn/isat</source>
<translation type="obsolete"></translation> <translation type="obsolete"></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="383"/> <location filename="MainWindow.py" line="386"/>
<source>English</source> <source>English</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="382"/> <location filename="MainWindow.py" line="385"/>
<source></source> <source></source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="328"/> <location filename="MainWindow.py" line="331"/>
<source>Images dir</source> <source>Images dir</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="329"/> <location filename="MainWindow.py" line="332"/>
<source>Open images dir.</source> <source>Open images dir.</source>
<translation>.</translation> <translation>.</translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="331"/> <location filename="MainWindow.py" line="334"/>
<source>Zoom in.</source> <source>Zoom in.</source>
<translation>.</translation> <translation>.</translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="333"/> <location filename="MainWindow.py" line="336"/>
<source>Zoom out.</source> <source>Zoom out.</source>
<translation>.</translation> <translation>.</translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="336"/> <location filename="MainWindow.py" line="339"/>
<source>Fit window.</source> <source>Fit window.</source>
<translation>.</translation> <translation>.</translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="343"/> <location filename="MainWindow.py" line="346"/>
<source>Label dir</source> <source>Label dir</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="344"/> <location filename="MainWindow.py" line="347"/>
<source>Open label dir.</source> <source>Open label dir.</source>
<translation>.</translation> <translation>.</translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="346"/> <location filename="MainWindow.py" line="349"/>
<source>Save annotation.</source> <source>Save annotation.</source>
<translation>.</translation> <translation>.</translation>
</message> </message>
@ -771,7 +791,7 @@ http://www.yatenglg.cn/isat</source>
<translation type="obsolete">.</translation> <translation type="obsolete">.</translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="354"/> <location filename="MainWindow.py" line="357"/>
<source>Next image.</source> <source>Next image.</source>
<translation>.</translation> <translation>.</translation>
</message> </message>
@ -781,124 +801,134 @@ http://www.yatenglg.cn/isat</source>
<translation type="obsolete">.</translation> <translation type="obsolete">.</translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="364"/> <location filename="MainWindow.py" line="367"/>
<source>Delete polygon.</source> <source>Delete polygon.</source>
<translation>.</translation> <translation>.</translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="367"/> <location filename="MainWindow.py" line="370"/>
<source>Show instance or segmeent state.</source> <source>Show instance or segmeent state.</source>
<translation>.</translation> <translation>.</translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="371"/> <location filename="MainWindow.py" line="374"/>
<source>Edit polygon attribute.</source> <source>Edit polygon attribute.</source>
<translation>.</translation> <translation>.</translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="374"/> <location filename="MainWindow.py" line="377"/>
<source>Move polygon to top layer.</source> <source>Move polygon to top layer.</source>
<translation>.</translation> <translation>.</translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="378"/> <location filename="MainWindow.py" line="381"/>
<source>Move polygon to bottom layer.</source> <source>Move polygon to bottom layer.</source>
<translation>.</translation> <translation>.</translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="339"/> <location filename="MainWindow.py" line="342"/>
<source>Setting.</source> <source>Setting.</source>
<translation>.</translation> <translation>.</translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="342"/> <location filename="MainWindow.py" line="345"/>
<source>Exit.</source> <source>Exit.</source>
<translation>退.</translation> <translation>退.</translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="350"/> <location filename="MainWindow.py" line="353"/>
<source>Prev image.</source> <source>Prev image.</source>
<translation>.</translation> <translation>.</translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="359"/> <location filename="MainWindow.py" line="362"/>
<source>Segment anything</source> <source>Segment anything</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="360"/> <location filename="MainWindow.py" line="363"/>
<source>Quick annotate using Segment anything.</source> <source>Quick annotate using Segment anything.</source>
<translation>使Segment anything进行快速标注.</translation> <translation>使Segment anything进行快速标注.</translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="361"/> <location filename="MainWindow.py" line="364"/>
<source>Q</source> <source>Q</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="385"/> <location filename="MainWindow.py" line="388"/>
<source>Backspace</source> <source>Backspace</source>
<translation>退</translation> <translation>退</translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="386"/> <location filename="MainWindow.py" line="389"/>
<source>Backspace.</source> <source>Backspace.</source>
<translation>退.</translation> <translation>退.</translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="387"/> <location filename="MainWindow.py" line="390"/>
<source>Z</source> <source>Z</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="388"/> <location filename="MainWindow.py" line="391"/>
<source>Cancel</source> <source>Cancel</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="389"/> <location filename="MainWindow.py" line="392"/>
<source>Annotate canceled</source> <source>Annotate canceled</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="390"/> <location filename="MainWindow.py" line="393"/>
<source>Annotate canceled.</source> <source>Annotate canceled.</source>
<translation>.</translation> <translation>.</translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="391"/> <location filename="MainWindow.py" line="394"/>
<source>Esc</source> <source>Esc</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="392"/> <location filename="MainWindow.py" line="395"/>
<source>Finish</source> <source>Finish</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="393"/> <location filename="MainWindow.py" line="396"/>
<source>Annotate finished</source> <source>Annotate finished</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="394"/> <location filename="MainWindow.py" line="397"/>
<source>Annotate finished.</source> <source>Annotate finished.</source>
<translation>.</translation> <translation>.</translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="396"/> <location filename="MainWindow.py" line="399"/>
<source>Polygon</source> <source>Polygon</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="397"/> <location filename="MainWindow.py" line="400"/>
<source>Draw polygon</source> <source>Draw polygon</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="MainWindow.py" line="398"/> <location filename="MainWindow.py" line="401"/>
<source>Accurately annotate by drawing polygon. </source> <source>Accurately annotate by drawing polygon. </source>
<translation>,. </translation> <translation>,. </translation>
</message> </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> </context>
</TS> </TS>

View File

@ -342,7 +342,17 @@ class AnnotationScene(QtWidgets.QGraphicsScene):
# 状态栏,显示当前坐标 # 状态栏,显示当前坐标
if self.image_data is not None: if self.image_data is not None:
x, y = round(pos.x()), round(pos.y()) 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) super(AnnotationScene, self).mouseMoveEvent(event)
def update_mask(self): def update_mask(self):

View File

@ -14,6 +14,7 @@ class LabelsDockWidget(QtWidgets.QWidget, Ui_Form):
self.polygon_item_dict = {} self.polygon_item_dict = {}
self.listWidget.itemSelectionChanged.connect(self.set_polygon_selected) 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.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.CustomContextMenu)
self.listWidget.customContextMenuRequested.connect( self.listWidget.customContextMenuRequested.connect(
@ -32,6 +33,7 @@ class LabelsDockWidget(QtWidgets.QWidget, Ui_Form):
check_box = QtWidgets.QCheckBox() check_box = QtWidgets.QCheckBox()
check_box.setFixedWidth(20) check_box.setFixedWidth(20)
check_box.setChecked(polygon.isVisible()) check_box.setChecked(polygon.isVisible())
check_box.setObjectName('check_box')
check_box.stateChanged.connect(functools.partial(self.set_polygon_show, polygon)) check_box.stateChanged.connect(functools.partial(self.set_polygon_show, polygon))
layout.addWidget(check_box) layout.addWidget(check_box)
@ -62,6 +64,7 @@ class LabelsDockWidget(QtWidgets.QWidget, Ui_Form):
def update_listwidget(self): def update_listwidget(self):
self.listWidget.clear() self.listWidget.clear()
self.polygon_item_dict.clear() self.polygon_item_dict.clear()
self.checkBox_visible.setChecked(True)
for polygon in self.mainwindow.polygons: for polygon in self.mainwindow.polygons:
item, item_widget = self.generate_item_and_itemwidget(polygon) item, item_widget = self.generate_item_and_itemwidget(polygon)
@ -102,3 +105,12 @@ class LabelsDockWidget(QtWidgets.QWidget, Ui_Form):
for vertex in polygon.vertexs: for vertex in polygon.vertexs:
vertex.setVisible(self.sender().checkState()) vertex.setVisible(self.sender().checkState())
polygon.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)

View File

@ -19,6 +19,7 @@ from annotation import Object, Annotation
from widgets.polygon import Polygon from widgets.polygon import Polygon
import os import os
from PIL import Image from PIL import Image
import functools
import imgviz import imgviz
from segment_any.segment_any import SegAny from segment_any.segment_any import SegAny
import icons_rc 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')) 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 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): def init_ui(self):
self.setting_dialog = SettingDialog(parent=self, mainwindow=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.shortcut_dialog = ShortcutDialog(self)
self.about_dialog = AboutDialog(self) self.about_dialog = AboutDialog(self)
self.labelCoordinates = QtWidgets.QLabel('') self.labelGPUResource = QtWidgets.QLabel('')
self.statusbar.addPermanentWidget(self.labelCoordinates) 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() self.trans = QtCore.QTranslator()
@ -347,6 +371,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
del self.current_label.objects[index] del self.current_label.objects[index]
def change_bit_map(self): def change_bit_map(self):
self.set_labels_visible(True)
if self.scene.mode == STATUSMode.CREATE: if self.scene.mode == STATUSMode.CREATE:
self.scene.cancel_draw() self.scene.cancel_draw()
if self.map_mode == MAPMode.LABEL: if self.map_mode == MAPMode.LABEL:
@ -359,8 +384,10 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
polygon.color.setAlpha(255) polygon.color.setAlpha(255)
polygon.setBrush(polygon.color) polygon.setBrush(polygon.color)
self.labels_dock_widget.listWidget.setEnabled(False) self.labels_dock_widget.listWidget.setEnabled(False)
self.labels_dock_widget.checkBox_visible.setEnabled(False)
self.actionSegment_anything.setEnabled(False) self.actionSegment_anything.setEnabled(False)
self.actionPolygon.setEnabled(False) self.actionPolygon.setEnabled(False)
self.actionVisible.setEnabled(False)
self.map_mode = MAPMode.SEMANTIC self.map_mode = MAPMode.SEMANTIC
semantic_icon = QtGui.QIcon() semantic_icon = QtGui.QIcon()
semantic_icon.addPixmap(QtGui.QPixmap(":/icon/icons/semantic.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) 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.color.setAlpha(255)
polygon.setBrush(polygon.color) polygon.setBrush(polygon.color)
self.labels_dock_widget.listWidget.setEnabled(False) self.labels_dock_widget.listWidget.setEnabled(False)
self.labels_dock_widget.checkBox_visible.setEnabled(False)
self.actionSegment_anything.setEnabled(False) self.actionSegment_anything.setEnabled(False)
self.actionPolygon.setEnabled(False) self.actionPolygon.setEnabled(False)
self.actionVisible.setEnabled(False)
self.map_mode = MAPMode.INSTANCE self.map_mode = MAPMode.INSTANCE
instance_icon = QtGui.QIcon() instance_icon = QtGui.QIcon()
instance_icon.addPixmap(QtGui.QPixmap(":/icon/icons/instance.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) 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.color.setAlpha(polygon.nohover_alpha)
polygon.setBrush(polygon.color) polygon.setBrush(polygon.color)
self.labels_dock_widget.listWidget.setEnabled(True) self.labels_dock_widget.listWidget.setEnabled(True)
self.labels_dock_widget.checkBox_visible.setEnabled(True)
self.actionSegment_anything.setEnabled(self.use_segment_anything) self.actionSegment_anything.setEnabled(self.use_segment_anything)
self.actionPolygon.setEnabled(True) self.actionPolygon.setEnabled(True)
self.actionVisible.setEnabled(True)
self.map_mode = MAPMode.LABEL self.map_mode = MAPMode.LABEL
label_icon = QtGui.QIcon() label_icon = QtGui.QIcon()
label_icon.addPixmap(QtGui.QPixmap(":/icon/icons/照片_pic.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off) 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: else:
pass 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): def label_converter(self):
self.convert_dialog.reset_gui() self.convert_dialog.reset_gui()
self.convert_dialog.show() self.convert_dialog.show()
@ -450,6 +487,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
self.actionZoom_out.triggered.connect(self.view.zoom_out) self.actionZoom_out.triggered.connect(self.view.zoom_out)
self.actionFit_wiondow.triggered.connect(self.view.zoomfit) self.actionFit_wiondow.triggered.connect(self.view.zoomfit)
self.actionBit_map.triggered.connect(self.change_bit_map) 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) self.actionConverter.triggered.connect(self.label_converter)