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>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QRadioButton" name="iccIgnoreRadioButton">
<widget class="QRadioButton" name="iccUseQtRadioButton">
<property name="text">
<string>icc.ignore</string>
<string>icc.useQt</string>
</property>
</widget>
</item>

View File

@ -38,10 +38,10 @@ class Ui_OcrQueue(object):
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.iccUseQtRadioButton = QRadioButton(self.groupBox)
self.iccUseQtRadioButton.setObjectName(u"iccUseQtRadioButton")
self.verticalLayout.addWidget(self.iccIgnoreRadioButton)
self.verticalLayout.addWidget(self.iccUseQtRadioButton)
self.iccUsePILRadioButton = QRadioButton(self.groupBox)
self.iccUsePILRadioButton.setObjectName(u"iccUsePILRadioButton")
@ -155,7 +155,7 @@ class Ui_OcrQueue(object):
def retranslateUi(self, OcrQueue):
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.iccUseQtRadioButton.setText(QCoreApplication.translate("OcrQueue", u"icc.useQt", 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))

View File

@ -7,7 +7,6 @@ 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.common import DeviceOcrResult
from arcaea_offline_ocr.utils import convert_to_srgb
from PIL import Image
from PIL.ImageQt import ImageQt
from PySide6.QtCore import (
@ -25,6 +24,7 @@ from PySide6.QtCore import (
)
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.imageDelegate import ImageDelegate
from ui.extends.shared.delegates.scoreDelegate import ScoreDelegate
@ -46,7 +46,7 @@ class OcrRunnable(QRunnable):
class IccOption(IntEnum):
Ignore = 0
UseQt = 0
UsePIL = 1
TryFix = 2

View File

@ -1,28 +1,27 @@
import io
from PIL import Image, ImageCms
from .build_phash import build_image_phash_database
try:
import json
from arcaea_offline_ocr.device.v1.definition import DeviceV1
from arcaea_offline_ocr.device.v2.definition import DeviceV2
def convert_to_srgb(pil_img: Image.Image):
"""
Convert PIL image to sRGB color space (if possible)
and save the converted file.
def load_devices_json(filepath: str) -> list[DeviceV1]:
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
https://stackoverflow.com/a/65667797/16484891
except Exception:
CC BY-SA 4.0
"""
icc = pil_img.info.get("icc_profile", "")
icc_conv = ""
def load_devices_json(*args, **kwargs):
pass
if icc:
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.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.iccTryFixRadioButton, 2)
self.updateIccOption()

View File

@ -225,8 +225,8 @@
</message>
<message>
<location filename="../../designer/components/ocrQueue.ui" line="34"/>
<source>icc.ignore</source>
<translation>Ignore</translation>
<source>icc.useQt</source>
<translation>Use Qt</translation>
</message>
<message>
<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="85"/>
<location filename="../../implements/settings/settingsGeneral.py" line="107"/>
<location filename="../../implements/settings/settingsOcr.py" line="190"/>
<location filename="../../implements/settings/settingsOcr.py" line="193"/>
<location filename="../../implements/settings/settingsOcr.py" line="196"/>
<location filename="../../implements/settings/settingsOcr.py" line="199"/>
<location filename="../../implements/settings/settingsOcr.py" line="202"/>
<location filename="../../implements/settings/settingsOcr.py" line="205"/>
<location filename="../../implements/settings/settingsOcr.py" line="104"/>
<location filename="../../implements/settings/settingsOcr.py" line="107"/>
<location filename="../../implements/settings/settingsOcr.py" line="110"/>
<source>resetButton</source>
<translation>Reset</translation>
</message>
@ -517,37 +514,22 @@ validation</translation>
<translation>Database URL</translation>
</message>
<message>
<location filename="../../implements/settings/settingsOcr.py" line="187"/>
<location filename="../../implements/settings/settingsOcr.py" line="101"/>
<source>ocr.title</source>
<translation>OCR</translation>
</message>
<message>
<location filename="../../implements/settings/settingsOcr.py" line="189"/>
<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"/>
<location filename="../../implements/settings/settingsOcr.py" line="103"/>
<source>ocr.knnModelFile.label</source>
<translation>Default KNearest model</translation>
</message>
<message>
<location filename="../../implements/settings/settingsOcr.py" line="198"/>
<location filename="../../implements/settings/settingsOcr.py" line="106"/>
<source>ocr.b30KnnModelFile.label</source>
<translation>Default B30 KNearest model</translation>
</message>
<message>
<location filename="../../implements/settings/settingsOcr.py" line="201"/>
<source>ocr.siftDatabaseFile.label</source>
<translation>Default SIFT database file</translation>
</message>
<message>
<location filename="../../implements/settings/settingsOcr.py" line="204"/>
<location filename="../../implements/settings/settingsOcr.py" line="109"/>
<source>ocr.phashDatabaseFile.label</source>
<translation>Default image PHash database</translation>
</message>
@ -1201,17 +1183,17 @@ validation</translation>
<translation>Calculate to Step</translation>
</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>
<translation>Play result</translation>
</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>
<translation>Calculate from Score</translation>
</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>
<translation>Result</translation>
</message>
@ -1221,17 +1203,17 @@ validation</translation>
<translation>Detailed log output</translation>
</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>
<translation>Calculate from Step</translation>
</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>
<translation>Target step value</translation>
</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>
<translation>Result (play rating)</translation>
</message>

View File

@ -225,13 +225,13 @@
</message>
<message>
<location filename="../../designer/components/ocrQueue.ui" line="34"/>
<source>icc.ignore</source>
<translation></translation>
<source>icc.useQt</source>
<translation>使 Qt</translation>
</message>
<message>
<location filename="../../designer/components/ocrQueue.ui" line="41"/>
<source>icc.usePIL</source>
<translation>使 PIL </translation>
<translation>使 PIL</translation>
</message>
<message>
<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="85"/>
<location filename="../../implements/settings/settingsGeneral.py" line="107"/>
<location filename="../../implements/settings/settingsOcr.py" line="190"/>
<location filename="../../implements/settings/settingsOcr.py" line="193"/>
<location filename="../../implements/settings/settingsOcr.py" line="196"/>
<location filename="../../implements/settings/settingsOcr.py" line="199"/>
<location filename="../../implements/settings/settingsOcr.py" line="202"/>
<location filename="../../implements/settings/settingsOcr.py" line="205"/>
<location filename="../../implements/settings/settingsOcr.py" line="104"/>
<location filename="../../implements/settings/settingsOcr.py" line="107"/>
<location filename="../../implements/settings/settingsOcr.py" line="110"/>
<source>resetButton</source>
<translation></translation>
</message>
@ -516,37 +513,22 @@
<translation> URL</translation>
</message>
<message>
<location filename="../../implements/settings/settingsOcr.py" line="187"/>
<location filename="../../implements/settings/settingsOcr.py" line="101"/>
<source>ocr.title</source>
<translation>OCR</translation>
</message>
<message>
<location filename="../../implements/settings/settingsOcr.py" line="189"/>
<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"/>
<location filename="../../implements/settings/settingsOcr.py" line="103"/>
<source>ocr.knnModelFile.label</source>
<translation> KNearest </translation>
</message>
<message>
<location filename="../../implements/settings/settingsOcr.py" line="198"/>
<location filename="../../implements/settings/settingsOcr.py" line="106"/>
<source>ocr.b30KnnModelFile.label</source>
<translation> B30 KNearest </translation>
</message>
<message>
<location filename="../../implements/settings/settingsOcr.py" line="201"/>
<source>ocr.siftDatabaseFile.label</source>
<translation> SIFT </translation>
</message>
<message>
<location filename="../../implements/settings/settingsOcr.py" line="204"/>
<location filename="../../implements/settings/settingsOcr.py" line="109"/>
<source>ocr.phashDatabaseFile.label</source>
<translation> PHash </translation>
</message>
@ -1200,17 +1182,17 @@
<translation></translation>
</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>
<translation> PTT</translation>
</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>
<translation></translation>
</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>
<translation></translation>
</message>
@ -1220,17 +1202,17 @@
<translation></translation>
</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>
<translation></translation>
</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>
<translation> STEP </translation>
</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>
<translation> PTT</translation>
</message>