diff --git a/ui/designer/components/settings/resettableItem.ui b/ui/designer/components/settings/resettableItem.ui
new file mode 100644
index 0000000..40405dd
--- /dev/null
+++ b/ui/designer/components/settings/resettableItem.ui
@@ -0,0 +1,40 @@
+
+
+ ResettableItem
+
+
+
+ 0
+ 0
+ 559
+ 42
+
+
+
+ ResettableItem
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+ -
+
+
+ resetButton
+
+
+
+
+
+
+
+
diff --git a/ui/designer/components/settings/resettableItem_ui.py b/ui/designer/components/settings/resettableItem_ui.py
new file mode 100644
index 0000000..ed2e6db
--- /dev/null
+++ b/ui/designer/components/settings/resettableItem_ui.py
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+
+################################################################################
+## Form generated from reading UI file 'resettableItem.ui'
+##
+## Created by: Qt User Interface Compiler version 6.5.1
+##
+## WARNING! All changes made in this file will be lost when recompiling UI file!
+################################################################################
+
+from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
+ QMetaObject, QObject, QPoint, QRect,
+ QSize, QTime, QUrl, Qt)
+from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
+ QFont, QFontDatabase, QGradient, QIcon,
+ QImage, QKeySequence, QLinearGradient, QPainter,
+ QPalette, QPixmap, QRadialGradient, QTransform)
+from PySide6.QtWidgets import (QApplication, QHBoxLayout, QPushButton, QSizePolicy,
+ QWidget)
+
+class Ui_ResettableItem(object):
+ def setupUi(self, ResettableItem):
+ if not ResettableItem.objectName():
+ ResettableItem.setObjectName(u"ResettableItem")
+ ResettableItem.resize(559, 42)
+ ResettableItem.setWindowTitle(u"ResettableItem")
+ self.horizontalLayout = QHBoxLayout(ResettableItem)
+ self.horizontalLayout.setObjectName(u"horizontalLayout")
+ self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
+ self.resetButton = QPushButton(ResettableItem)
+ self.resetButton.setObjectName(u"resetButton")
+
+ self.horizontalLayout.addWidget(self.resetButton)
+
+
+ self.retranslateUi(ResettableItem)
+
+ QMetaObject.connectSlotsByName(ResettableItem)
+ # setupUi
+
+ def retranslateUi(self, ResettableItem):
+ self.resetButton.setText(QCoreApplication.translate("ResettableItem", u"resetButton", None))
+ pass
+ # retranslateUi
+
diff --git a/ui/designer/settings/settingsDefault.ui b/ui/designer/settings/settingsDefault.ui
index ca6355f..830ebc4 100644
--- a/ui/designer/settings/settingsDefault.ui
+++ b/ui/designer/settings/settingsDefault.ui
@@ -13,56 +13,17 @@
SettingsDefault
-
-
- QFormLayout::ExpandingFieldsGrow
-
-
- QFormLayout::DontWrapRows
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
- -
-
-
-
- 0
- 0
-
-
-
- devicesJsonFile
+
+
-
+
+
+
+ 200
+ 0
+
- -
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 200
- 0
-
-
-
-
- -
-
-
- devicesJsonPath.resetButton
-
-
-
-
-
-
@@ -74,36 +35,12 @@
deviceUuid
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
- -
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 200
- 0
-
-
-
-
- -
-
-
- defaultDevice.resetButton
-
-
-
-
-
- -
+
-
@@ -114,15 +51,15 @@
tesseractFile
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
- -
+
-
-
-
- 0
- 0
-
+
+ false
@@ -132,6 +69,53 @@
+ -
+
+
+
+ 200
+ 0
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ devicesJsonFile
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+ resetButton
+
+
+
+ -
+
+
+ knnModelFile
+
+
+
+ -
+
+
+ resetButton
+
+
+
-
@@ -148,6 +132,19 @@
+ -
+
+
+ siftDatabaseFile
+
+
+
+ -
+
+
+ -
+
+
diff --git a/ui/designer/settings/settingsDefault_ui.py b/ui/designer/settings/settingsDefault_ui.py
index 03c5952..cf5e8c1 100644
--- a/ui/designer/settings/settingsDefault_ui.py
+++ b/ui/designer/settings/settingsDefault_ui.py
@@ -15,8 +15,8 @@ from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
QFont, QFontDatabase, QGradient, QIcon,
QImage, QKeySequence, QLinearGradient, QPainter,
QPalette, QPixmap, QRadialGradient, QTransform)
-from PySide6.QtWidgets import (QApplication, QFormLayout, QHBoxLayout, QLabel,
- QPushButton, QSizePolicy, QSpacerItem, QWidget)
+from PySide6.QtWidgets import (QApplication, QGridLayout, QLabel, QPushButton,
+ QSizePolicy, QSpacerItem, QWidget)
from ui.implements.components.devicesComboBox import DevicesComboBox
from ui.implements.components.fileSelector import FileSelector
@@ -27,92 +27,89 @@ class Ui_SettingsDefault(object):
SettingsDefault.setObjectName(u"SettingsDefault")
SettingsDefault.resize(682, 493)
SettingsDefault.setWindowTitle(u"SettingsDefault")
- self.formLayout = QFormLayout(SettingsDefault)
- self.formLayout.setObjectName(u"formLayout")
- self.formLayout.setFieldGrowthPolicy(QFormLayout.ExpandingFieldsGrow)
- self.formLayout.setRowWrapPolicy(QFormLayout.DontWrapRows)
- self.formLayout.setLabelAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
- self.label_2 = QLabel(SettingsDefault)
- self.label_2.setObjectName(u"label_2")
- sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.MinimumExpanding)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.label_2.sizePolicy().hasHeightForWidth())
- self.label_2.setSizePolicy(sizePolicy)
+ self.gridLayout = QGridLayout(SettingsDefault)
+ self.gridLayout.setObjectName(u"gridLayout")
+ self.devicesComboBox = DevicesComboBox(SettingsDefault)
+ self.devicesComboBox.setObjectName(u"devicesComboBox")
+ self.devicesComboBox.setMinimumSize(QSize(200, 0))
- self.formLayout.setWidget(0, QFormLayout.LabelRole, self.label_2)
-
- self.horizontalLayout_2 = QHBoxLayout()
- self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
- self.devicesJsonFileSelector = FileSelector(SettingsDefault)
- self.devicesJsonFileSelector.setObjectName(u"devicesJsonFileSelector")
- sizePolicy1 = QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred)
- sizePolicy1.setHorizontalStretch(0)
- sizePolicy1.setVerticalStretch(0)
- sizePolicy1.setHeightForWidth(self.devicesJsonFileSelector.sizePolicy().hasHeightForWidth())
- self.devicesJsonFileSelector.setSizePolicy(sizePolicy1)
- self.devicesJsonFileSelector.setMinimumSize(QSize(200, 0))
-
- self.horizontalLayout_2.addWidget(self.devicesJsonFileSelector)
-
- self.devicesJsonFileResetButton = QPushButton(SettingsDefault)
- self.devicesJsonFileResetButton.setObjectName(u"devicesJsonFileResetButton")
-
- self.horizontalLayout_2.addWidget(self.devicesJsonFileResetButton)
-
-
- self.formLayout.setLayout(0, QFormLayout.FieldRole, self.horizontalLayout_2)
+ self.gridLayout.addWidget(self.devicesComboBox, 1, 1, 1, 1)
self.label_3 = QLabel(SettingsDefault)
self.label_3.setObjectName(u"label_3")
+ sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.MinimumExpanding)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_3.sizePolicy().hasHeightForWidth())
self.label_3.setSizePolicy(sizePolicy)
+ self.label_3.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
- self.formLayout.setWidget(1, QFormLayout.LabelRole, self.label_3)
-
- self.horizontalLayout = QHBoxLayout()
- self.horizontalLayout.setObjectName(u"horizontalLayout")
- self.devicesComboBox = DevicesComboBox(SettingsDefault)
- self.devicesComboBox.setObjectName(u"devicesComboBox")
- sizePolicy2 = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
- sizePolicy2.setHorizontalStretch(0)
- sizePolicy2.setVerticalStretch(0)
- sizePolicy2.setHeightForWidth(self.devicesComboBox.sizePolicy().hasHeightForWidth())
- self.devicesComboBox.setSizePolicy(sizePolicy2)
- self.devicesComboBox.setMinimumSize(QSize(200, 0))
-
- self.horizontalLayout.addWidget(self.devicesComboBox)
-
- self.deviceUuidResetButton = QPushButton(SettingsDefault)
- self.deviceUuidResetButton.setObjectName(u"deviceUuidResetButton")
-
- self.horizontalLayout.addWidget(self.deviceUuidResetButton)
-
-
- self.formLayout.setLayout(1, QFormLayout.FieldRole, self.horizontalLayout)
+ self.gridLayout.addWidget(self.label_3, 1, 0, 1, 1)
self.label_4 = QLabel(SettingsDefault)
self.label_4.setObjectName(u"label_4")
sizePolicy.setHeightForWidth(self.label_4.sizePolicy().hasHeightForWidth())
self.label_4.setSizePolicy(sizePolicy)
+ self.label_4.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
- self.formLayout.setWidget(3, QFormLayout.LabelRole, self.label_4)
+ self.gridLayout.addWidget(self.label_4, 2, 0, 1, 1)
self.tesseractFileSelector = FileSelector(SettingsDefault)
self.tesseractFileSelector.setObjectName(u"tesseractFileSelector")
- sizePolicy3 = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred)
- sizePolicy3.setHorizontalStretch(0)
- sizePolicy3.setVerticalStretch(0)
- sizePolicy3.setHeightForWidth(self.tesseractFileSelector.sizePolicy().hasHeightForWidth())
- self.tesseractFileSelector.setSizePolicy(sizePolicy3)
+ self.tesseractFileSelector.setEnabled(False)
self.tesseractFileSelector.setMinimumSize(QSize(200, 0))
- self.formLayout.setWidget(3, QFormLayout.FieldRole, self.tesseractFileSelector)
+ self.gridLayout.addWidget(self.tesseractFileSelector, 2, 1, 1, 1)
+
+ self.devicesJsonFileSelector = FileSelector(SettingsDefault)
+ self.devicesJsonFileSelector.setObjectName(u"devicesJsonFileSelector")
+ self.devicesJsonFileSelector.setMinimumSize(QSize(200, 0))
+
+ self.gridLayout.addWidget(self.devicesJsonFileSelector, 0, 1, 1, 1)
+
+ self.label_2 = QLabel(SettingsDefault)
+ self.label_2.setObjectName(u"label_2")
+ sizePolicy.setHeightForWidth(self.label_2.sizePolicy().hasHeightForWidth())
+ self.label_2.setSizePolicy(sizePolicy)
+ self.label_2.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
+
+ self.gridLayout.addWidget(self.label_2, 0, 0, 1, 1)
+
+ self.deviceUuidResetButton = QPushButton(SettingsDefault)
+ self.deviceUuidResetButton.setObjectName(u"deviceUuidResetButton")
+
+ self.gridLayout.addWidget(self.deviceUuidResetButton, 1, 2, 1, 1)
+
+ self.label = QLabel(SettingsDefault)
+ self.label.setObjectName(u"label")
+
+ self.gridLayout.addWidget(self.label, 3, 0, 1, 1)
+
+ self.devicesJsonFileResetButton = QPushButton(SettingsDefault)
+ self.devicesJsonFileResetButton.setObjectName(u"devicesJsonFileResetButton")
+
+ self.gridLayout.addWidget(self.devicesJsonFileResetButton, 0, 2, 1, 1)
self.verticalSpacer = QSpacerItem(20, 500000, QSizePolicy.Minimum, QSizePolicy.Expanding)
- self.formLayout.setItem(5, QFormLayout.FieldRole, self.verticalSpacer)
+ self.gridLayout.addItem(self.verticalSpacer, 5, 1, 1, 1)
+ self.label_5 = QLabel(SettingsDefault)
+ self.label_5.setObjectName(u"label_5")
+
+ self.gridLayout.addWidget(self.label_5, 4, 0, 1, 1)
+
+ self.knnModelFileSelector = FileSelector(SettingsDefault)
+ self.knnModelFileSelector.setObjectName(u"knnModelFileSelector")
+
+ self.gridLayout.addWidget(self.knnModelFileSelector, 3, 1, 1, 1)
+
+ self.siftDatabaseFileSelector = FileSelector(SettingsDefault)
+ self.siftDatabaseFileSelector.setObjectName(u"siftDatabaseFileSelector")
+
+ self.gridLayout.addWidget(self.siftDatabaseFileSelector, 4, 1, 1, 1)
+
+ self.gridLayout.setColumnStretch(1, 1)
self.retranslateUi(SettingsDefault)
@@ -120,11 +117,13 @@ class Ui_SettingsDefault(object):
# setupUi
def retranslateUi(self, SettingsDefault):
- self.label_2.setText(QCoreApplication.translate("SettingsDefault", u"devicesJsonFile", None))
- self.devicesJsonFileResetButton.setText(QCoreApplication.translate("SettingsDefault", u"devicesJsonPath.resetButton", None))
self.label_3.setText(QCoreApplication.translate("SettingsDefault", u"deviceUuid", None))
- self.deviceUuidResetButton.setText(QCoreApplication.translate("SettingsDefault", u"defaultDevice.resetButton", None))
self.label_4.setText(QCoreApplication.translate("SettingsDefault", u"tesseractFile", None))
+ self.label_2.setText(QCoreApplication.translate("SettingsDefault", u"devicesJsonFile", None))
+ self.deviceUuidResetButton.setText(QCoreApplication.translate("SettingsDefault", u"resetButton", None))
+ self.label.setText(QCoreApplication.translate("SettingsDefault", u"knnModelFile", None))
+ self.devicesJsonFileResetButton.setText(QCoreApplication.translate("SettingsDefault", u"resetButton", None))
+ self.label_5.setText(QCoreApplication.translate("SettingsDefault", u"siftDatabaseFile", None))
pass
# retranslateUi
diff --git a/ui/extends/components/ocrQueue/__init__.py b/ui/extends/components/ocrQueue/__init__.py
index abe8b66..3e4d731 100644
--- a/ui/extends/components/ocrQueue/__init__.py
+++ b/ui/extends/components/ocrQueue/__init__.py
@@ -194,7 +194,7 @@ class OcrQueueModel(QAbstractListModel):
index = self.index(row, 0)
imagePath: str = index.data(self.ImagePathRole)
qImage: QImage = index.data(self.ImageQImageRole)
- print(row, result)
+ logger.info(f"update request: {result}@row{row}")
processOcrResultFunc = index.data(self.ProcessOcrResultFuncRole)
chart, scoreInsert = processOcrResultFunc(imagePath, qImage, result)
diff --git a/ui/extends/settings.py b/ui/extends/settings.py
index 828f02b..0d56844 100644
--- a/ui/extends/settings.py
+++ b/ui/extends/settings.py
@@ -5,6 +5,8 @@ __all__ = [
"DEVICES_JSON_FILE",
"DEVICE_UUID",
"TESSERACT_FILE",
+ "KNN_MODEL_FILE",
+ "SIFT_DATABASE_FILE",
"Settings",
]
@@ -13,6 +15,8 @@ DATABASE_PATH = "General/DatabasePath"
DEVICES_JSON_FILE = "Ocr/DevicesJsonFile"
DEVICE_UUID = "Ocr/DeviceUuid"
TESSERACT_FILE = "Ocr/TesseractFile"
+KNN_MODEL_FILE = "Ocr/KnnModelFile"
+SIFT_DATABASE_FILE = "Ocr/SiftDatabaseFile"
class Settings(QSettings):
@@ -55,3 +59,25 @@ class Settings(QSettings):
def resetTesseractPath(self):
self.setValue(TESSERACT_FILE, None)
self.sync()
+
+ def knnModelFile(self) -> str | None:
+ return self.value(KNN_MODEL_FILE, None, str)
+
+ def setKnnModelFile(self, path: str):
+ self.setValue(KNN_MODEL_FILE, path)
+ self.sync()
+
+ def resetKnnModelFile(self):
+ self.setValue(KNN_MODEL_FILE, None)
+ self.sync()
+
+ def siftDatabaseFile(self) -> str | None:
+ return self.value(SIFT_DATABASE_FILE, None, str)
+
+ def setSiftDatabaseFile(self, path: str):
+ self.setValue(SIFT_DATABASE_FILE, path)
+ self.sync()
+
+ def resetSiftDatabaseFile(self):
+ self.setValue(SIFT_DATABASE_FILE, None)
+ self.sync()
diff --git a/ui/implements/components/settings/resettableItem.py b/ui/implements/components/settings/resettableItem.py
new file mode 100644
index 0000000..11af38a
--- /dev/null
+++ b/ui/implements/components/settings/resettableItem.py
@@ -0,0 +1,19 @@
+from PySide6.QtWidgets import QSizePolicy, QWidget
+
+from ui.designer.components.settings.resettableItem_ui import Ui_ResettableItem
+
+
+class ResettableItem(Ui_ResettableItem, QWidget):
+ def __init__(self, parent=None):
+ super().__init__(parent)
+ self.setupUi(self)
+
+ def setWidget(self, widget: QWidget):
+ firstItem = self.horizontalLayout.itemAt(0)
+ if firstItem.objectName() != "resetButton":
+ self.horizontalLayout.removeItem(firstItem)
+
+ sizePolicy = widget.sizePolicy()
+ sizePolicy.setHorizontalPolicy(QSizePolicy.Policy.Expanding)
+ widget.setSizePolicy(sizePolicy)
+ self.horizontalLayout.insertWidget(0, widget)
diff --git a/ui/implements/settings/settingsDefault.py b/ui/implements/settings/settingsDefault.py
index 28e5fd3..35bb634 100644
--- a/ui/implements/settings/settingsDefault.py
+++ b/ui/implements/settings/settingsDefault.py
@@ -1,4 +1,5 @@
-from arcaea_offline.database import Database
+import logging
+
from PySide6.QtCore import Slot
from PySide6.QtWidgets import QWidget
@@ -6,6 +7,8 @@ from ui.designer.settings.settingsDefault_ui import Ui_SettingsDefault
from ui.extends.ocr import load_devices_json
from ui.extends.settings import *
+logger = logging.getLogger(__name__)
+
class SettingsDefault(Ui_SettingsDefault, QWidget):
def __init__(self, parent=None):
@@ -29,6 +32,12 @@ class SettingsDefault(Ui_SettingsDefault, QWidget):
self.tesseractFileSelector.accepted.connect(
self.on_tesseractFileSelector_accepted
)
+ self.knnModelFileSelector.accepted.connect(
+ self.on_knnModelFileSelector_accepted
+ )
+ self.siftDatabaseFileSelector.accepted.connect(
+ self.on_siftDatabaseFileSelector_accepted
+ )
def setDevicesJsonFile(self):
try:
@@ -37,7 +46,7 @@ class SettingsDefault(Ui_SettingsDefault, QWidget):
assert isinstance(devices, list)
self.settings.setDevicesJsonFile(filename)
except Exception as e:
- print(e)
+ logger.exception("set deviceJsonFile error")
# QMessageBox
return
@@ -71,3 +80,17 @@ class SettingsDefault(Ui_SettingsDefault, QWidget):
def on_tesseractFileSelector_accepted(self):
self.setTesseractFile()
+
+ def setKnnModelFile(self):
+ file = self.knnModelFileSelector.selectedFiles()[0]
+ self.settings.setKnnModelFile(file)
+
+ def on_knnModelFileSelector_accepted(self):
+ self.setKnnModelFile()
+
+ def setSiftDatabaseFile(self):
+ file = self.siftDatabaseFileSelector.selectedFiles()[0]
+ self.settings.setSiftDatabaseFile(file)
+
+ def on_siftDatabaseFileSelector_accepted(self):
+ self.setSiftDatabaseFile()
diff --git a/ui/implements/tabs/tabOcr/tabOcr_B30.py b/ui/implements/tabs/tabOcr/tabOcr_B30.py
index 190a989..7377f2c 100644
--- a/ui/implements/tabs/tabOcr/tabOcr_B30.py
+++ b/ui/implements/tabs/tabOcr/tabOcr_B30.py
@@ -12,6 +12,7 @@ from PySide6.QtWidgets import QWidget
from ui.designer.tabs.tabOcr.tabOcr_B30_ui import Ui_TabOcr_B30
from ui.extends.components.ocrQueue import OcrQueueModel
+from ui.extends.settings import Settings
from ui.extends.shared.cv2_utils import cv2BgrMatToQImage, qImageToCvMatBgr
from ui.extends.tabs.tabOcr.tabOcr_B30 import (
ChieriV4OcrRunnable,
@@ -54,6 +55,11 @@ class TabOcr_B30(Ui_TabOcr_B30, QWidget):
self.tryPrepareOcr.connect(self.prepareOcr)
+ settings = Settings()
+ logger.info("Applying default settings...")
+ self.knnModelSelector.selectFile(settings.knnModelFile())
+ self.siftDatabaseSelector.selectFile(settings.siftDatabaseFile())
+
self.ocrQueueModel = OcrQueueModel(self)
self.ocrQueue.setModel(self.ocrQueueModel)
diff --git a/ui/implements/tabs/tabOcr/tabOcr_Device.py b/ui/implements/tabs/tabOcr/tabOcr_Device.py
index 2b4d5bd..62fce15 100644
--- a/ui/implements/tabs/tabOcr/tabOcr_Device.py
+++ b/ui/implements/tabs/tabOcr/tabOcr_Device.py
@@ -1,3 +1,5 @@
+import logging
+
import cv2
import pytesseract
@@ -16,6 +18,8 @@ from ui.extends.tabs.tabOcr.tabOcr_Device import (
TabDeviceV2OcrRunnable,
)
+logger = logging.getLogger(__name__)
+
class TabOcr_Device(Ui_TabOcr_Device, QWidget):
def __init__(self, parent=None):
@@ -35,9 +39,12 @@ class TabOcr_Device(Ui_TabOcr_Device, QWidget):
self.siftDatabaseSelector.filesSelected.connect(self.siftDatabaseFileSelected)
settings = Settings()
+ logger.info("Applying default settings...")
self.deviceFileSelector.selectFile(settings.devicesJsonFile())
self.tesseractFileSelector.selectFile(settings.tesseractPath())
self.deviceComboBox.selectDevice(settings.deviceUuid())
+ self.knnModelSelector.selectFile(settings.knnModelFile())
+ self.siftDatabaseSelector.selectFile(settings.siftDatabaseFile())
self.ocrQueueModel = OcrQueueModel(self)
self.ocrQueue.setModel(self.ocrQueueModel)
diff --git a/ui/resources/translations/en_US.ts b/ui/resources/translations/en_US.ts
index 6920616..6da6f8a 100644
--- a/ui/resources/translations/en_US.ts
+++ b/ui/resources/translations/en_US.ts
@@ -280,6 +280,14 @@ validation
Score
+
+ ResettableItem
+
+
+ resetButton
+ Reset
+
+
ScoreEditor
@@ -357,29 +365,35 @@ validation
SettingsDefault
-
+
devicesJsonFile
Default devices.json
-
+
deviceUuid
Default Device
-
+
tesseractFile
tesseract Path
-
- defaultDevice.resetButton
-
+
+
+ resetButton
+ Reset
-
- devicesJsonPath.resetButton
-
+
+ knnModelFile
+ Default KNearest Model
+
+
+
+ siftDatabaseFile
+ Default SIFT Database File
diff --git a/ui/resources/translations/zh_CN.ts b/ui/resources/translations/zh_CN.ts
index 2ec3e7b..5d9d864 100644
--- a/ui/resources/translations/zh_CN.ts
+++ b/ui/resources/translations/zh_CN.ts
@@ -279,6 +279,14 @@
分数
+
+ ResettableItem
+
+
+ resetButton
+ 重置
+
+
ScoreEditor
@@ -356,29 +364,35 @@
SettingsDefault
-
+
devicesJsonFile
默认设备文件
-
+
deviceUuid
默认设备
-
+
tesseractFile
tesseract 路径
-
- defaultDevice.resetButton
-
+
+
+ resetButton
+ 重置
-
- devicesJsonPath.resetButton
-
+
+ knnModelFile
+ 默认 KNearest 模型
+
+
+
+ siftDatabaseFile
+ 默认 SIFT 特征值数据库