wip: ImagePHashDatabase & SizesV2

This commit is contained in:
283375 2023-09-27 17:16:33 +08:00
parent d701055c74
commit 9c06c6d9f1
Signed by: 283375
SSH Key Fingerprint: SHA256:UcX0qg6ZOSDOeieKPGokA5h7soykG61nz2uxuQgVLSk
7 changed files with 363 additions and 315 deletions

View File

@ -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>

View File

@ -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

View File

@ -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/>

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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(