chore: minor improvements

This commit is contained in:
2023-10-12 18:12:35 +08:00
parent ad5e5ec694
commit cd4ed51826
7 changed files with 61 additions and 98 deletions

View File

@ -29,9 +29,9 @@
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<item> <item>
<widget class="QRadioButton" name="iccIgnoreRadioButton"> <widget class="QRadioButton" name="iccUseQtRadioButton">
<property name="text"> <property name="text">
<string>icc.ignore</string> <string>icc.useQt</string>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -38,10 +38,10 @@ class Ui_OcrQueue(object):
self.groupBox.setObjectName(u"groupBox") self.groupBox.setObjectName(u"groupBox")
self.verticalLayout = QVBoxLayout(self.groupBox) self.verticalLayout = QVBoxLayout(self.groupBox)
self.verticalLayout.setObjectName(u"verticalLayout") self.verticalLayout.setObjectName(u"verticalLayout")
self.iccIgnoreRadioButton = QRadioButton(self.groupBox) self.iccUseQtRadioButton = QRadioButton(self.groupBox)
self.iccIgnoreRadioButton.setObjectName(u"iccIgnoreRadioButton") self.iccUseQtRadioButton.setObjectName(u"iccUseQtRadioButton")
self.verticalLayout.addWidget(self.iccIgnoreRadioButton) self.verticalLayout.addWidget(self.iccUseQtRadioButton)
self.iccUsePILRadioButton = QRadioButton(self.groupBox) self.iccUsePILRadioButton = QRadioButton(self.groupBox)
self.iccUsePILRadioButton.setObjectName(u"iccUsePILRadioButton") self.iccUsePILRadioButton.setObjectName(u"iccUsePILRadioButton")
@ -155,7 +155,7 @@ class Ui_OcrQueue(object):
def retranslateUi(self, OcrQueue): def retranslateUi(self, OcrQueue):
self.groupBox_3.setTitle(QCoreApplication.translate("OcrQueue", u"queue.title", None)) self.groupBox_3.setTitle(QCoreApplication.translate("OcrQueue", u"queue.title", None))
self.groupBox.setTitle(QCoreApplication.translate("OcrQueue", u"iccOptionsGroupBox", None)) self.groupBox.setTitle(QCoreApplication.translate("OcrQueue", u"iccOptionsGroupBox", None))
self.iccIgnoreRadioButton.setText(QCoreApplication.translate("OcrQueue", u"icc.ignore", None)) self.iccUseQtRadioButton.setText(QCoreApplication.translate("OcrQueue", u"icc.useQt", None))
self.iccUsePILRadioButton.setText(QCoreApplication.translate("OcrQueue", u"icc.usePIL", None)) self.iccUsePILRadioButton.setText(QCoreApplication.translate("OcrQueue", u"icc.usePIL", None))
self.iccTryFixRadioButton.setText(QCoreApplication.translate("OcrQueue", u"icc.tryFix", None)) self.iccTryFixRadioButton.setText(QCoreApplication.translate("OcrQueue", u"icc.tryFix", None))
self.ocr_addImageButton.setText(QCoreApplication.translate("OcrQueue", u"queue.addImageButton", None)) self.ocr_addImageButton.setText(QCoreApplication.translate("OcrQueue", u"queue.addImageButton", None))

View File

@ -7,7 +7,6 @@ from arcaea_offline.database import Database
from arcaea_offline.models import Chart, Score from arcaea_offline.models import Chart, Score
from arcaea_offline_ocr.b30.shared import B30OcrResultItem from arcaea_offline_ocr.b30.shared import B30OcrResultItem
from arcaea_offline_ocr.device.common import DeviceOcrResult from arcaea_offline_ocr.device.common import DeviceOcrResult
from arcaea_offline_ocr.utils import convert_to_srgb
from PIL import Image from PIL import Image
from PIL.ImageQt import ImageQt from PIL.ImageQt import ImageQt
from PySide6.QtCore import ( from PySide6.QtCore import (
@ -25,6 +24,7 @@ from PySide6.QtCore import (
) )
from PySide6.QtGui import QImage, QPixmap from PySide6.QtGui import QImage, QPixmap
from ui.extends.ocr import convert_to_srgb
from ui.extends.shared.delegates.chartDelegate import ChartDelegate from ui.extends.shared.delegates.chartDelegate import ChartDelegate
from ui.extends.shared.delegates.imageDelegate import ImageDelegate from ui.extends.shared.delegates.imageDelegate import ImageDelegate
from ui.extends.shared.delegates.scoreDelegate import ScoreDelegate from ui.extends.shared.delegates.scoreDelegate import ScoreDelegate
@ -46,7 +46,7 @@ class OcrRunnable(QRunnable):
class IccOption(IntEnum): class IccOption(IntEnum):
Ignore = 0 UseQt = 0
UsePIL = 1 UsePIL = 1
TryFix = 2 TryFix = 2

View File

@ -1,28 +1,27 @@
import io
from PIL import Image, ImageCms
from .build_phash import build_image_phash_database from .build_phash import build_image_phash_database
try:
import json
from arcaea_offline_ocr.device.v1.definition import DeviceV1 def convert_to_srgb(pil_img: Image.Image):
from arcaea_offline_ocr.device.v2.definition import DeviceV2 """
Convert PIL image to sRGB color space (if possible)
and save the converted file.
def load_devices_json(filepath: str) -> list[DeviceV1]: https://stackoverflow.com/a/65667797/16484891
with open(filepath, "r", encoding="utf-8") as f:
file_content = f.read()
if len(file_content) == 0:
return []
content = json.loads(file_content)
assert isinstance(content, list)
devices = []
for item in content:
version = item["version"]
if version == 1:
devices.append(DeviceV1(**item))
elif version == 2:
devices.append(DeviceV2(**item))
return devices
except Exception: CC BY-SA 4.0
"""
icc = pil_img.info.get("icc_profile", "")
icc_conv = ""
def load_devices_json(*args, **kwargs): if icc:
pass io_handle = io.BytesIO(icc) # virtual file
src_profile = ImageCms.ImageCmsProfile(io_handle)
dst_profile = ImageCms.createProfile("sRGB")
img_conv = ImageCms.profileToProfile(pil_img, src_profile, dst_profile)
icc_conv = img_conv.info.get("icc_profile", "")
return img_conv if icc != icc_conv else pil_img

View File

@ -43,7 +43,7 @@ class OcrQueue(Ui_OcrQueue, QWidget):
self.iccOptionButtonGroup = QButtonGroup(self) self.iccOptionButtonGroup = QButtonGroup(self)
self.iccOptionButtonGroup.buttonToggled.connect(self.updateIccOption) self.iccOptionButtonGroup.buttonToggled.connect(self.updateIccOption)
self.iccOptionButtonGroup.addButton(self.iccIgnoreRadioButton, 0) self.iccOptionButtonGroup.addButton(self.iccUseQtRadioButton, 0)
self.iccOptionButtonGroup.addButton(self.iccUsePILRadioButton, 1) self.iccOptionButtonGroup.addButton(self.iccUsePILRadioButton, 1)
self.iccOptionButtonGroup.addButton(self.iccTryFixRadioButton, 2) self.iccOptionButtonGroup.addButton(self.iccTryFixRadioButton, 2)
self.updateIccOption() self.updateIccOption()

View File

@ -225,8 +225,8 @@
</message> </message>
<message> <message>
<location filename="../../designer/components/ocrQueue.ui" line="34"/> <location filename="../../designer/components/ocrQueue.ui" line="34"/>
<source>icc.ignore</source> <source>icc.useQt</source>
<translation>Ignore</translation> <translation>Use Qt</translation>
</message> </message>
<message> <message>
<location filename="../../designer/components/ocrQueue.ui" line="41"/> <location filename="../../designer/components/ocrQueue.ui" line="41"/>
@ -477,12 +477,9 @@ validation</translation>
<location filename="../../implements/settings/settingsAndreal.py" line="82"/> <location filename="../../implements/settings/settingsAndreal.py" line="82"/>
<location filename="../../implements/settings/settingsAndreal.py" line="85"/> <location filename="../../implements/settings/settingsAndreal.py" line="85"/>
<location filename="../../implements/settings/settingsGeneral.py" line="107"/> <location filename="../../implements/settings/settingsGeneral.py" line="107"/>
<location filename="../../implements/settings/settingsOcr.py" line="190"/> <location filename="../../implements/settings/settingsOcr.py" line="104"/>
<location filename="../../implements/settings/settingsOcr.py" line="193"/> <location filename="../../implements/settings/settingsOcr.py" line="107"/>
<location filename="../../implements/settings/settingsOcr.py" line="196"/> <location filename="../../implements/settings/settingsOcr.py" line="110"/>
<location filename="../../implements/settings/settingsOcr.py" line="199"/>
<location filename="../../implements/settings/settingsOcr.py" line="202"/>
<location filename="../../implements/settings/settingsOcr.py" line="205"/>
<source>resetButton</source> <source>resetButton</source>
<translation>Reset</translation> <translation>Reset</translation>
</message> </message>
@ -517,37 +514,22 @@ validation</translation>
<translation>Database URL</translation> <translation>Database URL</translation>
</message> </message>
<message> <message>
<location filename="../../implements/settings/settingsOcr.py" line="187"/> <location filename="../../implements/settings/settingsOcr.py" line="101"/>
<source>ocr.title</source> <source>ocr.title</source>
<translation>OCR</translation> <translation>OCR</translation>
</message> </message>
<message> <message>
<location filename="../../implements/settings/settingsOcr.py" line="189"/> <location filename="../../implements/settings/settingsOcr.py" line="103"/>
<source>ocr.devicesJson.label</source>
<translation>Default devices.json</translation>
</message>
<message>
<location filename="../../implements/settings/settingsOcr.py" line="192"/>
<source>ocr.deviceUuid.label</source>
<translation>Default device</translation>
</message>
<message>
<location filename="../../implements/settings/settingsOcr.py" line="195"/>
<source>ocr.knnModelFile.label</source> <source>ocr.knnModelFile.label</source>
<translation>Default KNearest model</translation> <translation>Default KNearest model</translation>
</message> </message>
<message> <message>
<location filename="../../implements/settings/settingsOcr.py" line="198"/> <location filename="../../implements/settings/settingsOcr.py" line="106"/>
<source>ocr.b30KnnModelFile.label</source> <source>ocr.b30KnnModelFile.label</source>
<translation>Default B30 KNearest model</translation> <translation>Default B30 KNearest model</translation>
</message> </message>
<message> <message>
<location filename="../../implements/settings/settingsOcr.py" line="201"/> <location filename="../../implements/settings/settingsOcr.py" line="109"/>
<source>ocr.siftDatabaseFile.label</source>
<translation>Default SIFT database file</translation>
</message>
<message>
<location filename="../../implements/settings/settingsOcr.py" line="204"/>
<source>ocr.phashDatabaseFile.label</source> <source>ocr.phashDatabaseFile.label</source>
<translation>Default image PHash database</translation> <translation>Default image PHash database</translation>
</message> </message>
@ -1201,17 +1183,17 @@ validation</translation>
<translation>Calculate to Step</translation> <translation>Calculate to Step</translation>
</message> </message>
<message> <message>
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="386"/> <location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="367"/>
<source>calculate.toStep.playResultLabel</source> <source>calculate.toStep.playResultLabel</source>
<translation>Play result</translation> <translation>Play result</translation>
</message> </message>
<message> <message>
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="419"/> <location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="393"/>
<source>calculate.toStep.calculatePlayResultFromScoreButton</source> <source>calculate.toStep.calculatePlayResultFromScoreButton</source>
<translation>Calculate from Score</translation> <translation>Calculate from Score</translation>
</message> </message>
<message> <message>
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="399"/> <location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="406"/>
<source>calculate.toStep.resultLabel</source> <source>calculate.toStep.resultLabel</source>
<translation>Result</translation> <translation>Result</translation>
</message> </message>
@ -1221,17 +1203,17 @@ validation</translation>
<translation>Detailed log output</translation> <translation>Detailed log output</translation>
</message> </message>
<message> <message>
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="429"/> <location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="448"/>
<source>calculate.fromStep</source> <source>calculate.fromStep</source>
<translation>Calculate from Step</translation> <translation>Calculate from Step</translation>
</message> </message>
<message> <message>
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="438"/> <location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="457"/>
<source>calculate.fromStep.targetStepLabel</source> <source>calculate.fromStep.targetStepLabel</source>
<translation>Target step value</translation> <translation>Target step value</translation>
</message> </message>
<message> <message>
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="461"/> <location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="480"/>
<source>calculate.fromStep.resultLabel</source> <source>calculate.fromStep.resultLabel</source>
<translation>Result (play rating)</translation> <translation>Result (play rating)</translation>
</message> </message>

View File

@ -225,13 +225,13 @@
</message> </message>
<message> <message>
<location filename="../../designer/components/ocrQueue.ui" line="34"/> <location filename="../../designer/components/ocrQueue.ui" line="34"/>
<source>icc.ignore</source> <source>icc.useQt</source>
<translation></translation> <translation>使 Qt</translation>
</message> </message>
<message> <message>
<location filename="../../designer/components/ocrQueue.ui" line="41"/> <location filename="../../designer/components/ocrQueue.ui" line="41"/>
<source>icc.usePIL</source> <source>icc.usePIL</source>
<translation>使 PIL </translation> <translation>使 PIL</translation>
</message> </message>
<message> <message>
<location filename="../../designer/components/ocrQueue.ui" line="51"/> <location filename="../../designer/components/ocrQueue.ui" line="51"/>
@ -476,12 +476,9 @@
<location filename="../../implements/settings/settingsAndreal.py" line="82"/> <location filename="../../implements/settings/settingsAndreal.py" line="82"/>
<location filename="../../implements/settings/settingsAndreal.py" line="85"/> <location filename="../../implements/settings/settingsAndreal.py" line="85"/>
<location filename="../../implements/settings/settingsGeneral.py" line="107"/> <location filename="../../implements/settings/settingsGeneral.py" line="107"/>
<location filename="../../implements/settings/settingsOcr.py" line="190"/> <location filename="../../implements/settings/settingsOcr.py" line="104"/>
<location filename="../../implements/settings/settingsOcr.py" line="193"/> <location filename="../../implements/settings/settingsOcr.py" line="107"/>
<location filename="../../implements/settings/settingsOcr.py" line="196"/> <location filename="../../implements/settings/settingsOcr.py" line="110"/>
<location filename="../../implements/settings/settingsOcr.py" line="199"/>
<location filename="../../implements/settings/settingsOcr.py" line="202"/>
<location filename="../../implements/settings/settingsOcr.py" line="205"/>
<source>resetButton</source> <source>resetButton</source>
<translation></translation> <translation></translation>
</message> </message>
@ -516,37 +513,22 @@
<translation> URL</translation> <translation> URL</translation>
</message> </message>
<message> <message>
<location filename="../../implements/settings/settingsOcr.py" line="187"/> <location filename="../../implements/settings/settingsOcr.py" line="101"/>
<source>ocr.title</source> <source>ocr.title</source>
<translation>OCR</translation> <translation>OCR</translation>
</message> </message>
<message> <message>
<location filename="../../implements/settings/settingsOcr.py" line="189"/> <location filename="../../implements/settings/settingsOcr.py" line="103"/>
<source>ocr.devicesJson.label</source>
<translation></translation>
</message>
<message>
<location filename="../../implements/settings/settingsOcr.py" line="192"/>
<source>ocr.deviceUuid.label</source>
<translation></translation>
</message>
<message>
<location filename="../../implements/settings/settingsOcr.py" line="195"/>
<source>ocr.knnModelFile.label</source> <source>ocr.knnModelFile.label</source>
<translation> KNearest </translation> <translation> KNearest </translation>
</message> </message>
<message> <message>
<location filename="../../implements/settings/settingsOcr.py" line="198"/> <location filename="../../implements/settings/settingsOcr.py" line="106"/>
<source>ocr.b30KnnModelFile.label</source> <source>ocr.b30KnnModelFile.label</source>
<translation> B30 KNearest </translation> <translation> B30 KNearest </translation>
</message> </message>
<message> <message>
<location filename="../../implements/settings/settingsOcr.py" line="201"/> <location filename="../../implements/settings/settingsOcr.py" line="109"/>
<source>ocr.siftDatabaseFile.label</source>
<translation> SIFT </translation>
</message>
<message>
<location filename="../../implements/settings/settingsOcr.py" line="204"/>
<source>ocr.phashDatabaseFile.label</source> <source>ocr.phashDatabaseFile.label</source>
<translation> PHash </translation> <translation> PHash </translation>
</message> </message>
@ -1200,17 +1182,17 @@
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="386"/> <location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="367"/>
<source>calculate.toStep.playResultLabel</source> <source>calculate.toStep.playResultLabel</source>
<translation> PTT</translation> <translation> PTT</translation>
</message> </message>
<message> <message>
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="419"/> <location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="393"/>
<source>calculate.toStep.calculatePlayResultFromScoreButton</source> <source>calculate.toStep.calculatePlayResultFromScoreButton</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="399"/> <location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="406"/>
<source>calculate.toStep.resultLabel</source> <source>calculate.toStep.resultLabel</source>
<translation></translation> <translation></translation>
</message> </message>
@ -1220,17 +1202,17 @@
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="429"/> <location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="448"/>
<source>calculate.fromStep</source> <source>calculate.fromStep</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="438"/> <location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="457"/>
<source>calculate.fromStep.targetStepLabel</source> <source>calculate.fromStep.targetStepLabel</source>
<translation> STEP </translation> <translation> STEP </translation>
</message> </message>
<message> <message>
<location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="461"/> <location filename="../../designer/tabs/tabTools/tabTools_StepCalculator.ui" line="480"/>
<source>calculate.fromStep.resultLabel</source> <source>calculate.fromStep.resultLabel</source>
<translation> PTT</translation> <translation> PTT</translation>
</message> </message>