diff --git a/ui/designer/components/ocrQueue.ui b/ui/designer/components/ocrQueue.ui
index 03980ad..3c85a0e 100644
--- a/ui/designer/components/ocrQueue.ui
+++ b/ui/designer/components/ocrQueue.ui
@@ -6,8 +6,8 @@
0
0
- 741
- 372
+ 650
+ 400
@@ -17,13 +17,46 @@
-
- ocr.queue.title
+ queue.title
+
-
+
+
+ iccOptionsGroupBox
+
+
+
-
+
+
+ icc.ignore
+
+
+
+ -
+
+
+ icc.usePIL
+
+
+ true
+
+
+
+ -
+
+
+ icc.tryFix
+
+
+
+
+
+
-
- ocr.queue.addImageButton
+ queue.addImageButton
@@ -33,7 +66,7 @@
true
- ocr.queue.removeSelected
+ queue.removeSelected
@@ -43,7 +76,7 @@
true
- ocr.queue.removeAll
+ queue.removeAll
@@ -63,7 +96,7 @@
-
- ocr.queue.startOcrButton
+ queue.startOcrButton
@@ -115,7 +148,7 @@
-
- ocr.results
+ results
-
@@ -124,14 +157,14 @@
true
- ocr.results.acceptSelectedButton
+ results.acceptSelectedButton
-
- ocr.results.acceptAllButton
+ results.acceptAllButton
@@ -151,7 +184,7 @@
-
- ocr.results.ignoreValidate
+ results.ignoreValidate
diff --git a/ui/designer/components/ocrQueue_ui.py b/ui/designer/components/ocrQueue_ui.py
index cccc531..2155d22 100644
--- a/ui/designer/components/ocrQueue_ui.py
+++ b/ui/designer/components/ocrQueue_ui.py
@@ -3,7 +3,7 @@
################################################################################
## Form generated from reading UI file 'ocrQueue.ui'
##
-## Created by: Qt User Interface Compiler version 6.5.1
+## Created by: Qt User Interface Compiler version 6.5.2
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
@@ -17,14 +17,14 @@ from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QAbstractItemView, QApplication, QCheckBox, QGroupBox,
QHBoxLayout, QHeaderView, QProgressBar, QPushButton,
- QSizePolicy, QSpacerItem, QTableView, QVBoxLayout,
- QWidget)
+ QRadioButton, QSizePolicy, QSpacerItem, QTableView,
+ QVBoxLayout, QWidget)
class Ui_OcrQueue(object):
def setupUi(self, OcrQueue):
if not OcrQueue.objectName():
OcrQueue.setObjectName(u"OcrQueue")
- OcrQueue.resize(741, 372)
+ OcrQueue.resize(650, 400)
OcrQueue.setWindowTitle(u"OcrQueue")
self.horizontalLayout_2 = QHBoxLayout(OcrQueue)
self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
@@ -32,6 +32,29 @@ class Ui_OcrQueue(object):
self.groupBox_3.setObjectName(u"groupBox_3")
self.verticalLayout_2 = QVBoxLayout(self.groupBox_3)
self.verticalLayout_2.setObjectName(u"verticalLayout_2")
+ self.groupBox = QGroupBox(self.groupBox_3)
+ self.groupBox.setObjectName(u"groupBox")
+ self.verticalLayout = QVBoxLayout(self.groupBox)
+ self.verticalLayout.setObjectName(u"verticalLayout")
+ self.iccIgnoreRadioButton = QRadioButton(self.groupBox)
+ self.iccIgnoreRadioButton.setObjectName(u"iccIgnoreRadioButton")
+
+ self.verticalLayout.addWidget(self.iccIgnoreRadioButton)
+
+ self.iccUsePILRadioButton = QRadioButton(self.groupBox)
+ self.iccUsePILRadioButton.setObjectName(u"iccUsePILRadioButton")
+ self.iccUsePILRadioButton.setChecked(True)
+
+ self.verticalLayout.addWidget(self.iccUsePILRadioButton)
+
+ self.iccTryFixRadioButton = QRadioButton(self.groupBox)
+ self.iccTryFixRadioButton.setObjectName(u"iccTryFixRadioButton")
+
+ self.verticalLayout.addWidget(self.iccTryFixRadioButton)
+
+
+ self.verticalLayout_2.addWidget(self.groupBox)
+
self.ocr_addImageButton = QPushButton(self.groupBox_3)
self.ocr_addImageButton.setObjectName(u"ocr_addImageButton")
@@ -120,15 +143,19 @@ class Ui_OcrQueue(object):
# setupUi
def retranslateUi(self, OcrQueue):
- self.groupBox_3.setTitle(QCoreApplication.translate("OcrQueue", u"ocr.queue.title", None))
- self.ocr_addImageButton.setText(QCoreApplication.translate("OcrQueue", u"ocr.queue.addImageButton", None))
- self.ocr_removeSelectedButton.setText(QCoreApplication.translate("OcrQueue", u"ocr.queue.removeSelected", None))
- self.ocr_removeAllButton.setText(QCoreApplication.translate("OcrQueue", u"ocr.queue.removeAll", None))
- self.ocr_startButton.setText(QCoreApplication.translate("OcrQueue", u"ocr.queue.startOcrButton", None))
- self.groupBox_5.setTitle(QCoreApplication.translate("OcrQueue", u"ocr.results", None))
- self.ocr_acceptSelectedButton.setText(QCoreApplication.translate("OcrQueue", u"ocr.results.acceptSelectedButton", None))
- self.ocr_acceptAllButton.setText(QCoreApplication.translate("OcrQueue", u"ocr.results.acceptAllButton", None))
- self.ocr_ignoreValidateCheckBox.setText(QCoreApplication.translate("OcrQueue", u"ocr.results.ignoreValidate", None))
+ self.groupBox_3.setTitle(QCoreApplication.translate("OcrQueue", u"queue.title", None))
+ self.groupBox.setTitle(QCoreApplication.translate("OcrQueue", u"iccOptionsGroupBox", None))
+ self.iccIgnoreRadioButton.setText(QCoreApplication.translate("OcrQueue", u"icc.ignore", None))
+ self.iccUsePILRadioButton.setText(QCoreApplication.translate("OcrQueue", u"icc.usePIL", None))
+ self.iccTryFixRadioButton.setText(QCoreApplication.translate("OcrQueue", u"icc.tryFix", None))
+ self.ocr_addImageButton.setText(QCoreApplication.translate("OcrQueue", u"queue.addImageButton", None))
+ self.ocr_removeSelectedButton.setText(QCoreApplication.translate("OcrQueue", u"queue.removeSelected", None))
+ self.ocr_removeAllButton.setText(QCoreApplication.translate("OcrQueue", u"queue.removeAll", None))
+ self.ocr_startButton.setText(QCoreApplication.translate("OcrQueue", u"queue.startOcrButton", None))
+ self.groupBox_5.setTitle(QCoreApplication.translate("OcrQueue", u"results", None))
+ self.ocr_acceptSelectedButton.setText(QCoreApplication.translate("OcrQueue", u"results.acceptSelectedButton", None))
+ self.ocr_acceptAllButton.setText(QCoreApplication.translate("OcrQueue", u"results.acceptAllButton", None))
+ self.ocr_ignoreValidateCheckBox.setText(QCoreApplication.translate("OcrQueue", u"results.ignoreValidate", None))
pass
# retranslateUi
diff --git a/ui/extends/components/ocrQueue.py b/ui/extends/components/ocrQueue.py
index fccfb5d..ce608df 100644
--- a/ui/extends/components/ocrQueue.py
+++ b/ui/extends/components/ocrQueue.py
@@ -1,4 +1,5 @@
import logging
+from enum import IntEnum
from typing import Any, Callable, Optional, overload
from arcaea_offline.calculate import calculate_score_range
@@ -6,6 +7,9 @@ from arcaea_offline.database import Database
from arcaea_offline.models import Chart, Score
from arcaea_offline_ocr.b30.shared import B30OcrResultItem
from arcaea_offline_ocr.device.shared import DeviceOcrResult
+from arcaea_offline_ocr.utils import convert_to_srgb
+from PIL import Image
+from PIL.ImageQt import ImageQt
from PySide6.QtCore import (
QAbstractListModel,
QAbstractTableModel,
@@ -41,6 +45,12 @@ class OcrRunnable(QRunnable):
self.signals = OcrRunnableSignals()
+class IccOption(IntEnum):
+ Ignore = 0
+ UsePIL = 1
+ TryFix = 2
+
+
class OcrQueueModel(QAbstractListModel):
ImagePathRole = Qt.ItemDataRole.UserRole + 1
ImageQImageRole = Qt.ItemDataRole.UserRole + 2
@@ -64,6 +74,7 @@ class OcrQueueModel(QAbstractListModel):
super().__init__(parent)
self.__db = Database()
self.__items: list[dict[int, Any]] = []
+ self.__iccOption = IccOption.UsePIL
self.__taskFinishedNum = 0
@@ -133,6 +144,14 @@ class OcrQueueModel(QAbstractListModel):
)
return False
+ @property
+ def iccOption(self):
+ return self.__iccOption
+
+ @iccOption.setter
+ def iccOption(self, opt: IccOption):
+ self.__iccOption = opt
+
@overload
def addItem(
self,
@@ -162,8 +181,17 @@ class OcrQueueModel(QAbstractListModel):
logger.warning(f"Attempting to add an invalid file {image}")
return
imagePath = image
- qImage = QImage(image)
- qPixmap = QPixmap(image)
+ if self.iccOption == IccOption.TryFix:
+ img = Image.open(image)
+ img = convert_to_srgb(img)
+ qImage = ImageQt(img)
+ elif self.iccOption == IccOption.UsePIL:
+ img = Image.open(image)
+ qImage = ImageQt(img)
+ else:
+ qImage = QImage(image)
+
+ qPixmap = QPixmap(qImage)
elif isinstance(image, QImage):
imagePath = None
qImage = image.copy()
diff --git a/ui/implements/components/ocrQueue.py b/ui/implements/components/ocrQueue.py
index dbe379b..1b97087 100644
--- a/ui/implements/components/ocrQueue.py
+++ b/ui/implements/components/ocrQueue.py
@@ -2,7 +2,7 @@ from typing import Optional
from PySide6.QtCore import Qt, QTimer, Slot
from PySide6.QtGui import QColor, QPalette
-from PySide6.QtWidgets import QWidget
+from PySide6.QtWidgets import QButtonGroup, QWidget
from ui.designer.components.ocrQueue_ui import Ui_OcrQueue
from ui.extends.components.ocrQueue import (
@@ -36,6 +36,13 @@ class OcrQueue(Ui_OcrQueue, QWidget):
tableViewPalette.setColor(QPalette.ColorRole.Highlight, highlightColor)
self.tableView.setPalette(tableViewPalette)
+ self.iccOptionButtonGroup = QButtonGroup(self)
+ self.iccOptionButtonGroup.buttonToggled.connect(self.updateIccOption)
+ self.iccOptionButtonGroup.addButton(self.iccIgnoreRadioButton, 0)
+ self.iccOptionButtonGroup.addButton(self.iccUsePILRadioButton, 1)
+ self.iccOptionButtonGroup.addButton(self.iccTryFixRadioButton, 2)
+ self.updateIccOption()
+
def model(self):
return self.__model
@@ -77,6 +84,10 @@ class OcrQueue(Ui_OcrQueue, QWidget):
self.ocr_acceptAllButton.setEnabled(__bool)
self.ocr_ignoreValidateCheckBox.setEnabled(__bool)
+ def updateIccOption(self):
+ if self.model():
+ self.model().iccOption = self.iccOptionButtonGroup.checkedId()
+
def resizeTableView(self):
self.tableView.resizeRowsToContents()
self.tableView.resizeColumnsToContents()
diff --git a/ui/resources/translations/en_US.ts b/ui/resources/translations/en_US.ts
index 7b0ae1b..0ab1b42 100644
--- a/ui/resources/translations/en_US.ts
+++ b/ui/resources/translations/en_US.ts
@@ -215,47 +215,67 @@
OcrQueue
- ocr.queue.title
+ queue.title
Queue
- ocr.queue.addImageButton
+ iccOptionsGroupBox
+ ICC Profile Options
+
+
+
+ icc.ignore
+ Ignore
+
+
+
+ icc.usePIL
+ Use PIL
+
+
+
+ icc.tryFix
+ Try fix
+
+
+
+ queue.addImageButton
Add Image
-
- ocr.queue.removeSelected
+
+ queue.removeSelected
Remove Selected
-
- ocr.queue.removeAll
+
+ queue.removeAll
Remove All
-
- ocr.queue.startOcrButton
+
+ queue.startOcrButton
Start OCR
-
- ocr.results
+
+ results
Results
-
- ocr.results.acceptSelectedButton
+
+ results.acceptSelectedButton
Accept Selected
-
- ocr.results.acceptAllButton
+
+ results.acceptAllButton
Accept All
-
- ocr.results.ignoreValidate
+
+ results.ignoreValidate
Ignore
validation
@@ -263,22 +283,22 @@ validation
OcrTableModel
-
+
horizontalHeader.title.select
Select
-
+
horizontalHeader.title.imagePreview
Image Preview
-
+
horizontalHeader.title.chart
Chart
-
+
horizontalHeader.title.score
Score
diff --git a/ui/resources/translations/zh_CN.ts b/ui/resources/translations/zh_CN.ts
index 110955b..d910597 100644
--- a/ui/resources/translations/zh_CN.ts
+++ b/ui/resources/translations/zh_CN.ts
@@ -215,69 +215,89 @@
OcrQueue
- ocr.queue.title
+ queue.title
队列
- ocr.queue.addImageButton
+ iccOptionsGroupBox
+ ICC 文件选项
+
+
+
+ icc.ignore
+ 忽略
+
+
+
+ icc.usePIL
+ 使用 PIL 读取
+
+
+
+ icc.tryFix
+ 尝试修复
+
+
+
+ queue.addImageButton
添加图像文件
-
- ocr.queue.removeSelected
+
+ queue.removeSelected
移除选中
-
- ocr.queue.removeAll
+
+ queue.removeAll
移除所有
-
- ocr.queue.startOcrButton
+
+ queue.startOcrButton
开始 OCR
-
- ocr.results
+
+ results
结果
-
- ocr.results.acceptSelectedButton
+
+ results.acceptSelectedButton
提交选中
-
- ocr.results.acceptAllButton
+
+ results.acceptAllButton
提交所有
-
- ocr.results.ignoreValidate
+
+ results.ignoreValidate
忽略验证
OcrTableModel
-
+
horizontalHeader.title.select
选择
-
+
horizontalHeader.title.imagePreview
图像预览
-
+
horizontalHeader.title.chart
谱面
-
+
horizontalHeader.title.score
分数