mirror of
https://github.com/283375/arcaea-offline-pyside-ui.git
synced 2025-04-18 08:40:18 +00:00
wip: ImagePHashDatabase
& SizesV2
This commit is contained in:
parent
d701055c74
commit
9c06c6d9f1
@ -59,11 +59,11 @@
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_4">
|
||||
<property name="title">
|
||||
<string>siftDatabaseSelector.title</string>
|
||||
<string>phashDatabaseSelector.title</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
<item>
|
||||
<widget class="FileSelector" name="siftDatabaseSelector" native="true"/>
|
||||
<widget class="FileSelector" name="phashDatabaseSelector" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
|
@ -1,126 +1,126 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
################################################################################
|
||||
## Form generated from reading UI file 'tabOcr_B30.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, QComboBox, QGroupBox, QHBoxLayout,
|
||||
QSizePolicy, QVBoxLayout, QWidget)
|
||||
|
||||
from ui.implements.components.fileSelector import FileSelector
|
||||
from ui.implements.components.ocrQueue import OcrQueue
|
||||
|
||||
class Ui_TabOcr_B30(object):
|
||||
def setupUi(self, TabOcr_B30):
|
||||
if not TabOcr_B30.objectName():
|
||||
TabOcr_B30.setObjectName(u"TabOcr_B30")
|
||||
TabOcr_B30.resize(555, 461)
|
||||
TabOcr_B30.setWindowTitle(u"TabOcr_B30")
|
||||
self.verticalLayout_3 = QVBoxLayout(TabOcr_B30)
|
||||
self.verticalLayout_3.setObjectName(u"verticalLayout_3")
|
||||
self.groupBox = QGroupBox(TabOcr_B30)
|
||||
self.groupBox.setObjectName(u"groupBox")
|
||||
self.verticalLayout = QVBoxLayout(self.groupBox)
|
||||
self.verticalLayout.setObjectName(u"verticalLayout")
|
||||
self.b30TypeComboBox = QComboBox(self.groupBox)
|
||||
self.b30TypeComboBox.setObjectName(u"b30TypeComboBox")
|
||||
|
||||
self.verticalLayout.addWidget(self.b30TypeComboBox)
|
||||
|
||||
|
||||
self.verticalLayout_3.addWidget(self.groupBox)
|
||||
|
||||
self.horizontalLayout = QHBoxLayout()
|
||||
self.horizontalLayout.setObjectName(u"horizontalLayout")
|
||||
self.groupBox_3 = QGroupBox(TabOcr_B30)
|
||||
self.groupBox_3.setObjectName(u"groupBox_3")
|
||||
self.verticalLayout_4 = QVBoxLayout(self.groupBox_3)
|
||||
self.verticalLayout_4.setObjectName(u"verticalLayout_4")
|
||||
self.knnModelSelector = FileSelector(self.groupBox_3)
|
||||
self.knnModelSelector.setObjectName(u"knnModelSelector")
|
||||
|
||||
self.verticalLayout_4.addWidget(self.knnModelSelector)
|
||||
|
||||
|
||||
self.horizontalLayout.addWidget(self.groupBox_3)
|
||||
|
||||
self.groupBox_5 = QGroupBox(TabOcr_B30)
|
||||
self.groupBox_5.setObjectName(u"groupBox_5")
|
||||
self.verticalLayout_6 = QVBoxLayout(self.groupBox_5)
|
||||
self.verticalLayout_6.setObjectName(u"verticalLayout_6")
|
||||
self.b30KnnModelSelector = FileSelector(self.groupBox_5)
|
||||
self.b30KnnModelSelector.setObjectName(u"b30KnnModelSelector")
|
||||
|
||||
self.verticalLayout_6.addWidget(self.b30KnnModelSelector)
|
||||
|
||||
|
||||
self.horizontalLayout.addWidget(self.groupBox_5)
|
||||
|
||||
|
||||
self.verticalLayout_3.addLayout(self.horizontalLayout)
|
||||
|
||||
self.horizontalLayout_3 = QHBoxLayout()
|
||||
self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
|
||||
self.groupBox_4 = QGroupBox(TabOcr_B30)
|
||||
self.groupBox_4.setObjectName(u"groupBox_4")
|
||||
self.verticalLayout_5 = QVBoxLayout(self.groupBox_4)
|
||||
self.verticalLayout_5.setObjectName(u"verticalLayout_5")
|
||||
self.siftDatabaseSelector = FileSelector(self.groupBox_4)
|
||||
self.siftDatabaseSelector.setObjectName(u"siftDatabaseSelector")
|
||||
|
||||
self.verticalLayout_5.addWidget(self.siftDatabaseSelector)
|
||||
|
||||
|
||||
self.horizontalLayout_3.addWidget(self.groupBox_4)
|
||||
|
||||
self.groupBox_2 = QGroupBox(TabOcr_B30)
|
||||
self.groupBox_2.setObjectName(u"groupBox_2")
|
||||
self.verticalLayout_2 = QVBoxLayout(self.groupBox_2)
|
||||
self.verticalLayout_2.setObjectName(u"verticalLayout_2")
|
||||
self.imageSelector = FileSelector(self.groupBox_2)
|
||||
self.imageSelector.setObjectName(u"imageSelector")
|
||||
|
||||
self.verticalLayout_2.addWidget(self.imageSelector)
|
||||
|
||||
|
||||
self.horizontalLayout_3.addWidget(self.groupBox_2)
|
||||
|
||||
|
||||
self.verticalLayout_3.addLayout(self.horizontalLayout_3)
|
||||
|
||||
self.ocrQueue = OcrQueue(TabOcr_B30)
|
||||
self.ocrQueue.setObjectName(u"ocrQueue")
|
||||
sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.ocrQueue.sizePolicy().hasHeightForWidth())
|
||||
self.ocrQueue.setSizePolicy(sizePolicy)
|
||||
|
||||
self.verticalLayout_3.addWidget(self.ocrQueue)
|
||||
|
||||
|
||||
self.retranslateUi(TabOcr_B30)
|
||||
|
||||
QMetaObject.connectSlotsByName(TabOcr_B30)
|
||||
# setupUi
|
||||
|
||||
def retranslateUi(self, TabOcr_B30):
|
||||
self.groupBox.setTitle(QCoreApplication.translate("TabOcr_B30", u"b30type", None))
|
||||
self.groupBox_3.setTitle(QCoreApplication.translate("TabOcr_B30", u"knnModelSelector.title", None))
|
||||
self.groupBox_5.setTitle(QCoreApplication.translate("TabOcr_B30", u"b30KnnModelSelector.title", None))
|
||||
self.groupBox_4.setTitle(QCoreApplication.translate("TabOcr_B30", u"siftDatabaseSelector.title", None))
|
||||
self.groupBox_2.setTitle(QCoreApplication.translate("TabOcr_B30", u"imageSelector.title", None))
|
||||
pass
|
||||
# retranslateUi
|
||||
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
################################################################################
|
||||
## Form generated from reading UI file 'tabOcr_B30.ui'
|
||||
##
|
||||
## Created by: Qt User Interface Compiler version 6.5.2
|
||||
##
|
||||
## 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, QComboBox, QGroupBox, QHBoxLayout,
|
||||
QSizePolicy, QVBoxLayout, QWidget)
|
||||
|
||||
from ui.implements.components.fileSelector import FileSelector
|
||||
from ui.implements.components.ocrQueue import OcrQueue
|
||||
|
||||
class Ui_TabOcr_B30(object):
|
||||
def setupUi(self, TabOcr_B30):
|
||||
if not TabOcr_B30.objectName():
|
||||
TabOcr_B30.setObjectName(u"TabOcr_B30")
|
||||
TabOcr_B30.resize(555, 461)
|
||||
TabOcr_B30.setWindowTitle(u"TabOcr_B30")
|
||||
self.verticalLayout_3 = QVBoxLayout(TabOcr_B30)
|
||||
self.verticalLayout_3.setObjectName(u"verticalLayout_3")
|
||||
self.groupBox = QGroupBox(TabOcr_B30)
|
||||
self.groupBox.setObjectName(u"groupBox")
|
||||
self.verticalLayout = QVBoxLayout(self.groupBox)
|
||||
self.verticalLayout.setObjectName(u"verticalLayout")
|
||||
self.b30TypeComboBox = QComboBox(self.groupBox)
|
||||
self.b30TypeComboBox.setObjectName(u"b30TypeComboBox")
|
||||
|
||||
self.verticalLayout.addWidget(self.b30TypeComboBox)
|
||||
|
||||
|
||||
self.verticalLayout_3.addWidget(self.groupBox)
|
||||
|
||||
self.horizontalLayout = QHBoxLayout()
|
||||
self.horizontalLayout.setObjectName(u"horizontalLayout")
|
||||
self.groupBox_3 = QGroupBox(TabOcr_B30)
|
||||
self.groupBox_3.setObjectName(u"groupBox_3")
|
||||
self.verticalLayout_4 = QVBoxLayout(self.groupBox_3)
|
||||
self.verticalLayout_4.setObjectName(u"verticalLayout_4")
|
||||
self.knnModelSelector = FileSelector(self.groupBox_3)
|
||||
self.knnModelSelector.setObjectName(u"knnModelSelector")
|
||||
|
||||
self.verticalLayout_4.addWidget(self.knnModelSelector)
|
||||
|
||||
|
||||
self.horizontalLayout.addWidget(self.groupBox_3)
|
||||
|
||||
self.groupBox_5 = QGroupBox(TabOcr_B30)
|
||||
self.groupBox_5.setObjectName(u"groupBox_5")
|
||||
self.verticalLayout_6 = QVBoxLayout(self.groupBox_5)
|
||||
self.verticalLayout_6.setObjectName(u"verticalLayout_6")
|
||||
self.b30KnnModelSelector = FileSelector(self.groupBox_5)
|
||||
self.b30KnnModelSelector.setObjectName(u"b30KnnModelSelector")
|
||||
|
||||
self.verticalLayout_6.addWidget(self.b30KnnModelSelector)
|
||||
|
||||
|
||||
self.horizontalLayout.addWidget(self.groupBox_5)
|
||||
|
||||
|
||||
self.verticalLayout_3.addLayout(self.horizontalLayout)
|
||||
|
||||
self.horizontalLayout_3 = QHBoxLayout()
|
||||
self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
|
||||
self.groupBox_4 = QGroupBox(TabOcr_B30)
|
||||
self.groupBox_4.setObjectName(u"groupBox_4")
|
||||
self.verticalLayout_5 = QVBoxLayout(self.groupBox_4)
|
||||
self.verticalLayout_5.setObjectName(u"verticalLayout_5")
|
||||
self.phashDatabaseSelector = FileSelector(self.groupBox_4)
|
||||
self.phashDatabaseSelector.setObjectName(u"phashDatabaseSelector")
|
||||
|
||||
self.verticalLayout_5.addWidget(self.phashDatabaseSelector)
|
||||
|
||||
|
||||
self.horizontalLayout_3.addWidget(self.groupBox_4)
|
||||
|
||||
self.groupBox_2 = QGroupBox(TabOcr_B30)
|
||||
self.groupBox_2.setObjectName(u"groupBox_2")
|
||||
self.verticalLayout_2 = QVBoxLayout(self.groupBox_2)
|
||||
self.verticalLayout_2.setObjectName(u"verticalLayout_2")
|
||||
self.imageSelector = FileSelector(self.groupBox_2)
|
||||
self.imageSelector.setObjectName(u"imageSelector")
|
||||
|
||||
self.verticalLayout_2.addWidget(self.imageSelector)
|
||||
|
||||
|
||||
self.horizontalLayout_3.addWidget(self.groupBox_2)
|
||||
|
||||
|
||||
self.verticalLayout_3.addLayout(self.horizontalLayout_3)
|
||||
|
||||
self.ocrQueue = OcrQueue(TabOcr_B30)
|
||||
self.ocrQueue.setObjectName(u"ocrQueue")
|
||||
sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.ocrQueue.sizePolicy().hasHeightForWidth())
|
||||
self.ocrQueue.setSizePolicy(sizePolicy)
|
||||
|
||||
self.verticalLayout_3.addWidget(self.ocrQueue)
|
||||
|
||||
|
||||
self.retranslateUi(TabOcr_B30)
|
||||
|
||||
QMetaObject.connectSlotsByName(TabOcr_B30)
|
||||
# setupUi
|
||||
|
||||
def retranslateUi(self, TabOcr_B30):
|
||||
self.groupBox.setTitle(QCoreApplication.translate("TabOcr_B30", u"b30type", None))
|
||||
self.groupBox_3.setTitle(QCoreApplication.translate("TabOcr_B30", u"knnModelSelector.title", None))
|
||||
self.groupBox_5.setTitle(QCoreApplication.translate("TabOcr_B30", u"b30KnnModelSelector.title", None))
|
||||
self.groupBox_4.setTitle(QCoreApplication.translate("TabOcr_B30", u"phashDatabaseSelector.title", None))
|
||||
self.groupBox_2.setTitle(QCoreApplication.translate("TabOcr_B30", u"imageSelector.title", None))
|
||||
pass
|
||||
# retranslateUi
|
||||
|
||||
|
@ -28,11 +28,22 @@
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="deviceUseAutoFactorCheckBox">
|
||||
<property name="text">
|
||||
<string>deviceSelector.useAutoFactor</string>
|
||||
</property>
|
||||
</widget>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="deviceUseAutoFactorCheckBox">
|
||||
<property name="text">
|
||||
<string>deviceSelector.useAutoFactor</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="deviceSizesV2CheckBox">
|
||||
<property name="text">
|
||||
<string notr="true">SizesV2</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="FileSelector" name="deviceFileSelector" native="true"/>
|
||||
@ -126,11 +137,11 @@
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_5">
|
||||
<property name="title">
|
||||
<string>siftDatabaseSelector.title</string>
|
||||
<string>phashDatabaseSelector.title</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<item>
|
||||
<widget class="FileSelector" name="siftDatabaseSelector" native="true"/>
|
||||
<widget class="FileSelector" name="phashDatabaseSelector" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
@ -161,17 +172,17 @@
|
||||
<header>ui.implements.components.fileSelector</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>DevicesComboBox</class>
|
||||
<extends>QComboBox</extends>
|
||||
<header>ui.implements.components.devicesComboBox</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>OcrQueue</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>ui.implements.components.ocrQueue</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>DevicesComboBox</class>
|
||||
<extends>QComboBox</extends>
|
||||
<header>ui.implements.components.devicesComboBox</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
|
@ -1,155 +1,166 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
################################################################################
|
||||
## Form generated from reading UI file 'tabOcr_Device.ui'
|
||||
##
|
||||
## Created by: Qt User Interface Compiler version 6.5.2
|
||||
##
|
||||
## 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, QCheckBox, QGroupBox, QHBoxLayout,
|
||||
QPushButton, QSizePolicy, QStackedWidget, QVBoxLayout,
|
||||
QWidget)
|
||||
|
||||
from ui.implements.components.devicesComboBox import DevicesComboBox
|
||||
from ui.implements.components.fileSelector import FileSelector
|
||||
from ui.implements.components.ocrQueue import OcrQueue
|
||||
|
||||
class Ui_TabOcr_Device(object):
|
||||
def setupUi(self, TabOcr_Device):
|
||||
if not TabOcr_Device.objectName():
|
||||
TabOcr_Device.setObjectName(u"TabOcr_Device")
|
||||
TabOcr_Device.resize(632, 527)
|
||||
TabOcr_Device.setWindowTitle(u"TabOcr_Device")
|
||||
self.verticalLayout_3 = QVBoxLayout(TabOcr_Device)
|
||||
self.verticalLayout_3.setObjectName(u"verticalLayout_3")
|
||||
self.openWizardButton = QPushButton(TabOcr_Device)
|
||||
self.openWizardButton.setObjectName(u"openWizardButton")
|
||||
|
||||
self.verticalLayout_3.addWidget(self.openWizardButton)
|
||||
|
||||
self.groupBox = QGroupBox(TabOcr_Device)
|
||||
self.groupBox.setObjectName(u"groupBox")
|
||||
self.verticalLayout = QVBoxLayout(self.groupBox)
|
||||
self.verticalLayout.setObjectName(u"verticalLayout")
|
||||
self.deviceUseAutoFactorCheckBox = QCheckBox(self.groupBox)
|
||||
self.deviceUseAutoFactorCheckBox.setObjectName(u"deviceUseAutoFactorCheckBox")
|
||||
|
||||
self.verticalLayout.addWidget(self.deviceUseAutoFactorCheckBox)
|
||||
|
||||
self.deviceFileSelector = FileSelector(self.groupBox)
|
||||
self.deviceFileSelector.setObjectName(u"deviceFileSelector")
|
||||
|
||||
self.verticalLayout.addWidget(self.deviceFileSelector)
|
||||
|
||||
self.deviceComboBox = DevicesComboBox(self.groupBox)
|
||||
self.deviceComboBox.setObjectName(u"deviceComboBox")
|
||||
|
||||
self.verticalLayout.addWidget(self.deviceComboBox)
|
||||
|
||||
|
||||
self.verticalLayout_3.addWidget(self.groupBox)
|
||||
|
||||
self.horizontalWidget = QWidget(TabOcr_Device)
|
||||
self.horizontalWidget.setObjectName(u"horizontalWidget")
|
||||
sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.horizontalWidget.sizePolicy().hasHeightForWidth())
|
||||
self.horizontalWidget.setSizePolicy(sizePolicy)
|
||||
self.horizontalLayout_2 = QHBoxLayout(self.horizontalWidget)
|
||||
self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
|
||||
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
|
||||
self.groupBox_6 = QGroupBox(self.horizontalWidget)
|
||||
self.groupBox_6.setObjectName(u"groupBox_6")
|
||||
self.verticalLayout_6 = QVBoxLayout(self.groupBox_6)
|
||||
self.verticalLayout_6.setObjectName(u"verticalLayout_6")
|
||||
self.knnModelSelector = FileSelector(self.groupBox_6)
|
||||
self.knnModelSelector.setObjectName(u"knnModelSelector")
|
||||
|
||||
self.verticalLayout_6.addWidget(self.knnModelSelector)
|
||||
|
||||
|
||||
self.horizontalLayout_2.addWidget(self.groupBox_6)
|
||||
|
||||
self.deviceDependenciesStackedWidget = QStackedWidget(self.horizontalWidget)
|
||||
self.deviceDependenciesStackedWidget.setObjectName(u"deviceDependenciesStackedWidget")
|
||||
self.deviceV1 = QWidget()
|
||||
self.deviceV1.setObjectName(u"deviceV1")
|
||||
self.verticalLayout_2 = QVBoxLayout(self.deviceV1)
|
||||
self.verticalLayout_2.setObjectName(u"verticalLayout_2")
|
||||
self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
|
||||
self.groupBox_4 = QGroupBox(self.deviceV1)
|
||||
self.groupBox_4.setObjectName(u"groupBox_4")
|
||||
self.verticalLayout_5 = QVBoxLayout(self.groupBox_4)
|
||||
self.verticalLayout_5.setObjectName(u"verticalLayout_5")
|
||||
self.tesseractFileSelector = FileSelector(self.groupBox_4)
|
||||
self.tesseractFileSelector.setObjectName(u"tesseractFileSelector")
|
||||
|
||||
self.verticalLayout_5.addWidget(self.tesseractFileSelector)
|
||||
|
||||
|
||||
self.verticalLayout_2.addWidget(self.groupBox_4)
|
||||
|
||||
self.deviceDependenciesStackedWidget.addWidget(self.deviceV1)
|
||||
self.deviceV2 = QWidget()
|
||||
self.deviceV2.setObjectName(u"deviceV2")
|
||||
self.verticalLayout_4 = QVBoxLayout(self.deviceV2)
|
||||
self.verticalLayout_4.setObjectName(u"verticalLayout_4")
|
||||
self.verticalLayout_4.setContentsMargins(0, 0, 0, 0)
|
||||
self.groupBox_5 = QGroupBox(self.deviceV2)
|
||||
self.groupBox_5.setObjectName(u"groupBox_5")
|
||||
self.verticalLayout_7 = QVBoxLayout(self.groupBox_5)
|
||||
self.verticalLayout_7.setObjectName(u"verticalLayout_7")
|
||||
self.siftDatabaseSelector = FileSelector(self.groupBox_5)
|
||||
self.siftDatabaseSelector.setObjectName(u"siftDatabaseSelector")
|
||||
|
||||
self.verticalLayout_7.addWidget(self.siftDatabaseSelector)
|
||||
|
||||
|
||||
self.verticalLayout_4.addWidget(self.groupBox_5)
|
||||
|
||||
self.deviceDependenciesStackedWidget.addWidget(self.deviceV2)
|
||||
|
||||
self.horizontalLayout_2.addWidget(self.deviceDependenciesStackedWidget)
|
||||
|
||||
|
||||
self.verticalLayout_3.addWidget(self.horizontalWidget)
|
||||
|
||||
self.ocrQueue = OcrQueue(TabOcr_Device)
|
||||
self.ocrQueue.setObjectName(u"ocrQueue")
|
||||
sizePolicy1 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
|
||||
sizePolicy1.setHorizontalStretch(0)
|
||||
sizePolicy1.setVerticalStretch(0)
|
||||
sizePolicy1.setHeightForWidth(self.ocrQueue.sizePolicy().hasHeightForWidth())
|
||||
self.ocrQueue.setSizePolicy(sizePolicy1)
|
||||
|
||||
self.verticalLayout_3.addWidget(self.ocrQueue)
|
||||
|
||||
|
||||
self.retranslateUi(TabOcr_Device)
|
||||
|
||||
self.deviceDependenciesStackedWidget.setCurrentIndex(0)
|
||||
|
||||
|
||||
QMetaObject.connectSlotsByName(TabOcr_Device)
|
||||
# setupUi
|
||||
|
||||
def retranslateUi(self, TabOcr_Device):
|
||||
self.openWizardButton.setText(QCoreApplication.translate("TabOcr_Device", u"openWizardButton", None))
|
||||
self.groupBox.setTitle(QCoreApplication.translate("TabOcr_Device", u"deviceSelector.title", None))
|
||||
self.deviceUseAutoFactorCheckBox.setText(QCoreApplication.translate("TabOcr_Device", u"deviceSelector.useAutoFactor", None))
|
||||
self.groupBox_6.setTitle(QCoreApplication.translate("TabOcr_Device", u"knnModelSelector.title", None))
|
||||
self.groupBox_4.setTitle(QCoreApplication.translate("TabOcr_Device", u"tesseractSelector.title", None))
|
||||
self.groupBox_5.setTitle(QCoreApplication.translate("TabOcr_Device", u"siftDatabaseSelector.title", None))
|
||||
pass
|
||||
# retranslateUi
|
||||
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
################################################################################
|
||||
## Form generated from reading UI file 'tabOcr_Device.ui'
|
||||
##
|
||||
## Created by: Qt User Interface Compiler version 6.5.2
|
||||
##
|
||||
## 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, QCheckBox, QGroupBox, QHBoxLayout,
|
||||
QPushButton, QSizePolicy, QStackedWidget, QVBoxLayout,
|
||||
QWidget)
|
||||
|
||||
from ui.implements.components.devicesComboBox import DevicesComboBox
|
||||
from ui.implements.components.fileSelector import FileSelector
|
||||
from ui.implements.components.ocrQueue import OcrQueue
|
||||
|
||||
class Ui_TabOcr_Device(object):
|
||||
def setupUi(self, TabOcr_Device):
|
||||
if not TabOcr_Device.objectName():
|
||||
TabOcr_Device.setObjectName(u"TabOcr_Device")
|
||||
TabOcr_Device.resize(632, 527)
|
||||
TabOcr_Device.setWindowTitle(u"TabOcr_Device")
|
||||
self.verticalLayout_3 = QVBoxLayout(TabOcr_Device)
|
||||
self.verticalLayout_3.setObjectName(u"verticalLayout_3")
|
||||
self.openWizardButton = QPushButton(TabOcr_Device)
|
||||
self.openWizardButton.setObjectName(u"openWizardButton")
|
||||
|
||||
self.verticalLayout_3.addWidget(self.openWizardButton)
|
||||
|
||||
self.groupBox = QGroupBox(TabOcr_Device)
|
||||
self.groupBox.setObjectName(u"groupBox")
|
||||
self.verticalLayout = QVBoxLayout(self.groupBox)
|
||||
self.verticalLayout.setObjectName(u"verticalLayout")
|
||||
self.horizontalLayout = QHBoxLayout()
|
||||
self.horizontalLayout.setObjectName(u"horizontalLayout")
|
||||
self.deviceUseAutoFactorCheckBox = QCheckBox(self.groupBox)
|
||||
self.deviceUseAutoFactorCheckBox.setObjectName(u"deviceUseAutoFactorCheckBox")
|
||||
|
||||
self.horizontalLayout.addWidget(self.deviceUseAutoFactorCheckBox)
|
||||
|
||||
self.deviceSizesV2CheckBox = QCheckBox(self.groupBox)
|
||||
self.deviceSizesV2CheckBox.setObjectName(u"deviceSizesV2CheckBox")
|
||||
self.deviceSizesV2CheckBox.setText(u"SizesV2")
|
||||
|
||||
self.horizontalLayout.addWidget(self.deviceSizesV2CheckBox)
|
||||
|
||||
|
||||
self.verticalLayout.addLayout(self.horizontalLayout)
|
||||
|
||||
self.deviceFileSelector = FileSelector(self.groupBox)
|
||||
self.deviceFileSelector.setObjectName(u"deviceFileSelector")
|
||||
|
||||
self.verticalLayout.addWidget(self.deviceFileSelector)
|
||||
|
||||
self.deviceComboBox = DevicesComboBox(self.groupBox)
|
||||
self.deviceComboBox.setObjectName(u"deviceComboBox")
|
||||
|
||||
self.verticalLayout.addWidget(self.deviceComboBox)
|
||||
|
||||
|
||||
self.verticalLayout_3.addWidget(self.groupBox)
|
||||
|
||||
self.horizontalWidget = QWidget(TabOcr_Device)
|
||||
self.horizontalWidget.setObjectName(u"horizontalWidget")
|
||||
sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.horizontalWidget.sizePolicy().hasHeightForWidth())
|
||||
self.horizontalWidget.setSizePolicy(sizePolicy)
|
||||
self.horizontalLayout_2 = QHBoxLayout(self.horizontalWidget)
|
||||
self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
|
||||
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
|
||||
self.groupBox_6 = QGroupBox(self.horizontalWidget)
|
||||
self.groupBox_6.setObjectName(u"groupBox_6")
|
||||
self.verticalLayout_6 = QVBoxLayout(self.groupBox_6)
|
||||
self.verticalLayout_6.setObjectName(u"verticalLayout_6")
|
||||
self.knnModelSelector = FileSelector(self.groupBox_6)
|
||||
self.knnModelSelector.setObjectName(u"knnModelSelector")
|
||||
|
||||
self.verticalLayout_6.addWidget(self.knnModelSelector)
|
||||
|
||||
|
||||
self.horizontalLayout_2.addWidget(self.groupBox_6)
|
||||
|
||||
self.deviceDependenciesStackedWidget = QStackedWidget(self.horizontalWidget)
|
||||
self.deviceDependenciesStackedWidget.setObjectName(u"deviceDependenciesStackedWidget")
|
||||
self.deviceV1 = QWidget()
|
||||
self.deviceV1.setObjectName(u"deviceV1")
|
||||
self.verticalLayout_2 = QVBoxLayout(self.deviceV1)
|
||||
self.verticalLayout_2.setObjectName(u"verticalLayout_2")
|
||||
self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
|
||||
self.groupBox_4 = QGroupBox(self.deviceV1)
|
||||
self.groupBox_4.setObjectName(u"groupBox_4")
|
||||
self.verticalLayout_5 = QVBoxLayout(self.groupBox_4)
|
||||
self.verticalLayout_5.setObjectName(u"verticalLayout_5")
|
||||
self.tesseractFileSelector = FileSelector(self.groupBox_4)
|
||||
self.tesseractFileSelector.setObjectName(u"tesseractFileSelector")
|
||||
|
||||
self.verticalLayout_5.addWidget(self.tesseractFileSelector)
|
||||
|
||||
|
||||
self.verticalLayout_2.addWidget(self.groupBox_4)
|
||||
|
||||
self.deviceDependenciesStackedWidget.addWidget(self.deviceV1)
|
||||
self.deviceV2 = QWidget()
|
||||
self.deviceV2.setObjectName(u"deviceV2")
|
||||
self.verticalLayout_4 = QVBoxLayout(self.deviceV2)
|
||||
self.verticalLayout_4.setObjectName(u"verticalLayout_4")
|
||||
self.verticalLayout_4.setContentsMargins(0, 0, 0, 0)
|
||||
self.groupBox_5 = QGroupBox(self.deviceV2)
|
||||
self.groupBox_5.setObjectName(u"groupBox_5")
|
||||
self.verticalLayout_7 = QVBoxLayout(self.groupBox_5)
|
||||
self.verticalLayout_7.setObjectName(u"verticalLayout_7")
|
||||
self.phashDatabaseSelector = FileSelector(self.groupBox_5)
|
||||
self.phashDatabaseSelector.setObjectName(u"phashDatabaseSelector")
|
||||
|
||||
self.verticalLayout_7.addWidget(self.phashDatabaseSelector)
|
||||
|
||||
|
||||
self.verticalLayout_4.addWidget(self.groupBox_5)
|
||||
|
||||
self.deviceDependenciesStackedWidget.addWidget(self.deviceV2)
|
||||
|
||||
self.horizontalLayout_2.addWidget(self.deviceDependenciesStackedWidget)
|
||||
|
||||
|
||||
self.verticalLayout_3.addWidget(self.horizontalWidget)
|
||||
|
||||
self.ocrQueue = OcrQueue(TabOcr_Device)
|
||||
self.ocrQueue.setObjectName(u"ocrQueue")
|
||||
sizePolicy1 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
|
||||
sizePolicy1.setHorizontalStretch(0)
|
||||
sizePolicy1.setVerticalStretch(0)
|
||||
sizePolicy1.setHeightForWidth(self.ocrQueue.sizePolicy().hasHeightForWidth())
|
||||
self.ocrQueue.setSizePolicy(sizePolicy1)
|
||||
|
||||
self.verticalLayout_3.addWidget(self.ocrQueue)
|
||||
|
||||
|
||||
self.retranslateUi(TabOcr_Device)
|
||||
|
||||
self.deviceDependenciesStackedWidget.setCurrentIndex(0)
|
||||
|
||||
|
||||
QMetaObject.connectSlotsByName(TabOcr_Device)
|
||||
# setupUi
|
||||
|
||||
def retranslateUi(self, TabOcr_Device):
|
||||
self.openWizardButton.setText(QCoreApplication.translate("TabOcr_Device", u"openWizardButton", None))
|
||||
self.groupBox.setTitle(QCoreApplication.translate("TabOcr_Device", u"deviceSelector.title", None))
|
||||
self.deviceUseAutoFactorCheckBox.setText(QCoreApplication.translate("TabOcr_Device", u"deviceSelector.useAutoFactor", None))
|
||||
self.groupBox_6.setTitle(QCoreApplication.translate("TabOcr_Device", u"knnModelSelector.title", None))
|
||||
self.groupBox_4.setTitle(QCoreApplication.translate("TabOcr_Device", u"tesseractSelector.title", None))
|
||||
self.groupBox_5.setTitle(QCoreApplication.translate("TabOcr_Device", u"phashDatabaseSelector.title", None))
|
||||
pass
|
||||
# retranslateUi
|
||||
|
||||
|
@ -5,8 +5,8 @@ from typing import Tuple
|
||||
from arcaea_offline.database import Database
|
||||
from arcaea_offline.models import Chart, Score
|
||||
from arcaea_offline_ocr.device.shared import DeviceOcrResult
|
||||
from arcaea_offline_ocr.device.v2.ocr import DeviceV2Ocr
|
||||
from arcaea_offline_ocr.device.v2.rois import DeviceV2AutoRois, DeviceV2Rois
|
||||
from arcaea_offline_ocr.device.v2 import DeviceV2AutoRois, DeviceV2Ocr, DeviceV2Rois
|
||||
from arcaea_offline_ocr.device.v2.sizes import SizesV1, SizesV2
|
||||
from arcaea_offline_ocr.utils import imread_unicode
|
||||
from PySide6.QtCore import QDateTime, QFileInfo
|
||||
|
||||
@ -18,17 +18,23 @@ import exif
|
||||
|
||||
|
||||
class TabDeviceV2OcrRunnable(OcrRunnable):
|
||||
def __init__(self, imagePath, device, knnModel, siftDb):
|
||||
def __init__(self, imagePath, device, knnModel, phashDb, *, sizesV2: bool):
|
||||
super().__init__()
|
||||
self.imagePath = imagePath
|
||||
self.device = device
|
||||
self.knnModel = knnModel
|
||||
self.siftDb = siftDb
|
||||
self.phashDb = phashDb
|
||||
self.sizesV2 = sizesV2
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
rois = DeviceV2Rois(self.device, imread_unicode(self.imagePath))
|
||||
ocr = DeviceV2Ocr(self.knnModel, self.siftDb)
|
||||
rois.sizes = (
|
||||
SizesV2(self.device.factor)
|
||||
if self.sizesV2
|
||||
else SizesV1(self.device.factor)
|
||||
)
|
||||
ocr = DeviceV2Ocr(self.knnModel, self.phashDb)
|
||||
result = ocr.ocr(rois)
|
||||
self.signals.resultReady.emit(result)
|
||||
except Exception:
|
||||
@ -38,16 +44,19 @@ class TabDeviceV2OcrRunnable(OcrRunnable):
|
||||
|
||||
|
||||
class TabDeviceV2AutoRoisOcrRunnable(OcrRunnable):
|
||||
def __init__(self, imagePath, knnModel, siftDb):
|
||||
def __init__(self, imagePath, knnModel, phashDb, *, sizesV2: bool):
|
||||
super().__init__()
|
||||
self.imagePath = imagePath
|
||||
self.knnModel = knnModel
|
||||
self.siftDb = siftDb
|
||||
self.phashDb = phashDb
|
||||
self.sizesV2 = sizesV2
|
||||
|
||||
def run(self):
|
||||
try:
|
||||
rois = DeviceV2AutoRois(imread_unicode(self.imagePath))
|
||||
ocr = DeviceV2Ocr(self.knnModel, self.siftDb)
|
||||
factor = rois.sizes.factor
|
||||
rois.sizes = SizesV2(factor) if self.sizesV2 else SizesV1(factor)
|
||||
ocr = DeviceV2Ocr(self.knnModel, self.phashDb)
|
||||
result = ocr.ocr(rois)
|
||||
self.signals.resultReady.emit(result)
|
||||
except Exception:
|
||||
|
@ -2,6 +2,7 @@ import logging
|
||||
|
||||
import cv2
|
||||
from arcaea_offline_ocr.b30.chieri.v4.ocr import ChieriBotV4Ocr
|
||||
from arcaea_offline_ocr.phash_db import ImagePHashDatabase
|
||||
from arcaea_offline_ocr.sift_db import SIFTDatabase
|
||||
from arcaea_offline_ocr.utils import imread_unicode
|
||||
from PySide6.QtCore import Signal, Slot
|
||||
@ -34,10 +35,11 @@ class TabOcr_B30(Ui_TabOcr_B30, QWidget):
|
||||
self.imageSelector.filesSelected.connect(self.imageSelected)
|
||||
self.knnModelSelector.filesSelected.connect(self.knnModelSelected)
|
||||
self.b30KnnModelSelector.filesSelected.connect(self.b30KnnModelSelected)
|
||||
self.siftDatabaseSelector.filesSelected.connect(self.siftDatabaseSelected)
|
||||
# self.siftDatabaseSelector.filesSelected.connect(self.siftDatabaseSelected)
|
||||
self.phashDatabaseSelector.filesSelected.connect(self.phashDatabaseSelected)
|
||||
|
||||
self.knnModelSelector.connectSettings(KNN_MODEL_FILE)
|
||||
self.siftDatabaseSelector.connectSettings(SIFT_DATABASE_FILE)
|
||||
# self.siftDatabaseSelector.connectSettings(SIFT_DATABASE_FILE)
|
||||
|
||||
self.imagePath = None # for checking only
|
||||
self.img = None
|
||||
@ -45,7 +47,8 @@ class TabOcr_B30(Ui_TabOcr_B30, QWidget):
|
||||
self.paddle = None
|
||||
self.knnModel = None
|
||||
self.b30KnnModel = None
|
||||
self.siftDatabase = None
|
||||
# self.siftDatabase = None
|
||||
self.phashDatabase = None
|
||||
|
||||
self.ocr = None
|
||||
|
||||
@ -54,7 +57,7 @@ class TabOcr_B30(Ui_TabOcr_B30, QWidget):
|
||||
settings = Settings()
|
||||
logger.info("Applying default settings...")
|
||||
self.knnModelSelector.selectFile(settings.knnModelFile())
|
||||
self.siftDatabaseSelector.selectFile(settings.siftDatabaseFile())
|
||||
# self.siftDatabaseSelector.selectFile(settings.siftDatabaseFile())
|
||||
|
||||
self.ocrQueueModel = OcrQueueModel(self)
|
||||
self.ocrQueue.setModel(self.ocrQueueModel)
|
||||
@ -84,6 +87,12 @@ class TabOcr_B30(Ui_TabOcr_B30, QWidget):
|
||||
self.siftDatabase = SIFTDatabase(siftDatabasePath)
|
||||
self.tryPrepareOcr.emit()
|
||||
|
||||
def phashDatabaseSelected(self):
|
||||
if selectedFiles := self.phashDatabaseSelector.selectedFiles():
|
||||
phashDatabasePath = selectedFiles[0]
|
||||
self.phashDatabase = ImagePHashDatabase(phashDatabasePath)
|
||||
self.tryPrepareOcr.emit()
|
||||
|
||||
def prepareOcr(self):
|
||||
b30Type = self.b30TypeComboBox.currentData()
|
||||
if not b30Type:
|
||||
@ -94,13 +103,13 @@ class TabOcr_B30(Ui_TabOcr_B30, QWidget):
|
||||
not self.imagePath
|
||||
or not self.knnModel
|
||||
or not self.b30KnnModel
|
||||
or not self.siftDatabase
|
||||
or not self.phashDatabase
|
||||
):
|
||||
return
|
||||
|
||||
self.ocrQueueModel.clear()
|
||||
|
||||
ocr = ChieriBotV4Ocr(self.knnModel, self.b30KnnModel, self.siftDatabase)
|
||||
ocr = ChieriBotV4Ocr(self.knnModel, self.b30KnnModel, self.phashDatabase)
|
||||
ocr.set_factor(self.img)
|
||||
self.ocr = ocr
|
||||
|
||||
@ -116,7 +125,7 @@ class TabOcr_B30(Ui_TabOcr_B30, QWidget):
|
||||
not self.imagePath
|
||||
or not self.knnModel
|
||||
or not self.b30KnnModel
|
||||
or not self.siftDatabase
|
||||
or not self.phashDatabase
|
||||
):
|
||||
return
|
||||
|
||||
|
@ -6,6 +6,7 @@ import cv2
|
||||
from arcaea_offline_ocr.device.v1.definition import DeviceV1
|
||||
from arcaea_offline_ocr.device.v2.definition import DeviceV2
|
||||
from arcaea_offline_ocr.sift_db import SIFTDatabase
|
||||
from arcaea_offline_ocr.phash_db import ImagePHashDatabase
|
||||
from PySide6.QtCore import Qt, Slot
|
||||
from PySide6.QtWidgets import QApplication, QFileDialog, QWidget
|
||||
|
||||
@ -38,11 +39,12 @@ class TabOcr_Device(Ui_TabOcr_Device, QWidget):
|
||||
|
||||
self.deviceFileSelector.filesSelected.connect(self.deviceFileSelected)
|
||||
self.knnModelSelector.filesSelected.connect(self.knnModelFileSelected)
|
||||
self.siftDatabaseSelector.filesSelected.connect(self.siftDatabaseFileSelected)
|
||||
# self.siftDatabaseSelector.filesSelected.connect(self.siftDatabaseFileSelected)
|
||||
self.phashDatabaseSelector.filesSelected.connect(self.phashDatabaseFileSelected)
|
||||
|
||||
self.deviceFileSelector.connectSettings(DEVICES_JSON_FILE)
|
||||
self.knnModelSelector.connectSettings(KNN_MODEL_FILE)
|
||||
self.siftDatabaseSelector.connectSettings(SIFT_DATABASE_FILE)
|
||||
# self.siftDatabaseSelector.connectSettings(SIFT_DATABASE_FILE)
|
||||
|
||||
settings = Settings()
|
||||
logger.info("Applying default settings...")
|
||||
@ -50,7 +52,7 @@ class TabOcr_Device(Ui_TabOcr_Device, QWidget):
|
||||
self.tesseractFileSelector.selectFile(settings.tesseractPath())
|
||||
self.deviceComboBox.selectDevice(settings.deviceUuid())
|
||||
self.knnModelSelector.selectFile(settings.knnModelFile())
|
||||
self.siftDatabaseSelector.selectFile(settings.siftDatabaseFile())
|
||||
# vself.siftDatabaseSelector.selectFile(settings.siftDatabaseFile())
|
||||
|
||||
self.ocrQueueModel = OcrQueueModel(self)
|
||||
self.ocrQueue.setModel(self.ocrQueueModel)
|
||||
@ -96,6 +98,10 @@ class TabOcr_Device(Ui_TabOcr_Device, QWidget):
|
||||
if selectedFiles := self.siftDatabaseSelector.selectedFiles():
|
||||
self.siftDatabase = SIFTDatabase(selectedFiles[0])
|
||||
|
||||
def phashDatabaseFileSelected(self):
|
||||
if selectedFiles := self.phashDatabaseSelector.selectedFiles():
|
||||
self.phashDatabase = ImagePHashDatabase(selectedFiles[0])
|
||||
|
||||
@Slot()
|
||||
def on_ocr_addImageButton_clicked(self):
|
||||
files, _filter = QFileDialog.getOpenFileNames(
|
||||
@ -115,14 +121,16 @@ class TabOcr_Device(Ui_TabOcr_Device, QWidget):
|
||||
runnable = TabDeviceV2AutoRoisOcrRunnable(
|
||||
imagePath,
|
||||
self.knnModel,
|
||||
self.siftDatabase,
|
||||
self.phashDatabase,
|
||||
sizesV2=self.deviceSizesV2CheckBox.isChecked(),
|
||||
)
|
||||
else:
|
||||
runnable = TabDeviceV2OcrRunnable(
|
||||
imagePath,
|
||||
self.deviceComboBox.currentData(),
|
||||
self.knnModel,
|
||||
self.siftDatabase,
|
||||
self.phashDatabase,
|
||||
sizesV2=self.deviceSizesV2CheckBox.isChecked(),
|
||||
)
|
||||
self.ocrQueueModel.setData(index, runnable, OcrQueueModel.OcrRunnableRole)
|
||||
self.ocrQueueModel.setData(
|
||||
|
Loading…
x
Reference in New Issue
Block a user