mirror of
https://github.com/283375/arcaea-offline-pyside-ui.git
synced 2025-07-01 04:16:26 +00:00
chore: minor improvements
This commit is contained in:
@ -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>
|
||||
|
@ -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))
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
Reference in New Issue
Block a user