mirror of
https://github.com/283375/arcaea-offline-pyside-ui.git
synced 2025-04-20 17:50:17 +00:00
feat: FileSelector.connectSettings
This commit is contained in:
parent
5abf56ff83
commit
fe18d0dd94
@ -1,8 +1,9 @@
|
|||||||
from PySide6.QtCore import QDir, QFileInfo, QMetaObject, Qt, Signal, Slot
|
from PySide6.QtCore import QDir, QFileInfo, Qt, Signal, Slot
|
||||||
from PySide6.QtWidgets import QFileDialog, QWidget
|
from PySide6.QtWidgets import QFileDialog, QWidget
|
||||||
|
|
||||||
from ui.designer.components.fileSelector_ui import Ui_FileSelector
|
from ui.designer.components.fileSelector_ui import Ui_FileSelector
|
||||||
from ui.extends.shared.language import LanguageChangeEventFilter
|
from ui.extends.shared.language import LanguageChangeEventFilter
|
||||||
|
from ui.extends.shared.settings import Settings
|
||||||
|
|
||||||
|
|
||||||
class FileSelector(Ui_FileSelector, QWidget):
|
class FileSelector(Ui_FileSelector, QWidget):
|
||||||
@ -25,6 +26,8 @@ class FileSelector(Ui_FileSelector, QWidget):
|
|||||||
|
|
||||||
self.__mode = self.getOpenFileNames
|
self.__mode = self.getOpenFileNames
|
||||||
|
|
||||||
|
self.settingsKey = None
|
||||||
|
|
||||||
def getOpenFileNames(self):
|
def getOpenFileNames(self):
|
||||||
selectedFiles, filter = QFileDialog.getOpenFileNames(
|
selectedFiles, filter = QFileDialog.getOpenFileNames(
|
||||||
self,
|
self,
|
||||||
@ -39,13 +42,12 @@ class FileSelector(Ui_FileSelector, QWidget):
|
|||||||
self.accepted.emit()
|
self.accepted.emit()
|
||||||
|
|
||||||
def getExistingDirectory(self):
|
def getExistingDirectory(self):
|
||||||
selectedDir = QFileDialog.getExistingDirectory(
|
if selectedDir := QFileDialog.getExistingDirectory(
|
||||||
self,
|
self,
|
||||||
self.__caption,
|
self.__caption,
|
||||||
self.__startDirectory,
|
self.__startDirectory,
|
||||||
QFileDialog.Option.ShowDirsOnly | self.__options,
|
QFileDialog.Option.ShowDirsOnly | self.__options,
|
||||||
)
|
):
|
||||||
if selectedDir:
|
|
||||||
self.__selectedFiles = [selectedDir]
|
self.__selectedFiles = [selectedDir]
|
||||||
self.accepted.emit()
|
self.accepted.emit()
|
||||||
|
|
||||||
@ -83,13 +85,29 @@ class FileSelector(Ui_FileSelector, QWidget):
|
|||||||
self.updateLabel()
|
self.updateLabel()
|
||||||
|
|
||||||
def updateLabel(self):
|
def updateLabel(self):
|
||||||
selectedFiles = self.selectedFiles()
|
if selectedFiles := self.selectedFiles():
|
||||||
|
|
||||||
if not selectedFiles:
|
|
||||||
self.elidedLabel.setText("...")
|
|
||||||
else:
|
|
||||||
self.elidedLabel.setText("<br>".join(selectedFiles))
|
self.elidedLabel.setText("<br>".join(selectedFiles))
|
||||||
|
else:
|
||||||
|
self.elidedLabel.setText("...")
|
||||||
|
|
||||||
@Slot()
|
@Slot()
|
||||||
def on_selectButton_clicked(self):
|
def on_selectButton_clicked(self):
|
||||||
self.__mode()
|
self.__mode()
|
||||||
|
|
||||||
|
def connectSettings(self, settingsKey: str):
|
||||||
|
self.settingsKey = settingsKey
|
||||||
|
Settings().updated.connect(self.settingsUpdated)
|
||||||
|
|
||||||
|
def disconnectSettings(self):
|
||||||
|
Settings().updated.disconnect(self.settingsUpdated)
|
||||||
|
self.settingsKey = None
|
||||||
|
|
||||||
|
def settingsUpdated(self, key: str):
|
||||||
|
if key != self.settingsKey:
|
||||||
|
return
|
||||||
|
|
||||||
|
# keep user selection
|
||||||
|
if self.__selectedFiles:
|
||||||
|
return
|
||||||
|
|
||||||
|
self.selectFile(Settings().value(key))
|
||||||
|
@ -5,15 +5,13 @@ import cv2
|
|||||||
from arcaea_offline_ocr.b30.chieri.v4.ocr import ChieriBotV4Ocr
|
from arcaea_offline_ocr.b30.chieri.v4.ocr import ChieriBotV4Ocr
|
||||||
from arcaea_offline_ocr.sift_db import SIFTDatabase
|
from arcaea_offline_ocr.sift_db import SIFTDatabase
|
||||||
from arcaea_offline_ocr.utils import imread_unicode
|
from arcaea_offline_ocr.utils import imread_unicode
|
||||||
|
|
||||||
# from paddleocr import PaddleOCR
|
|
||||||
from PySide6.QtCore import Signal, Slot
|
from PySide6.QtCore import Signal, Slot
|
||||||
from PySide6.QtWidgets import QWidget
|
from PySide6.QtWidgets import QWidget
|
||||||
|
|
||||||
from ui.designer.tabs.tabOcr.tabOcr_B30_ui import Ui_TabOcr_B30
|
from ui.designer.tabs.tabOcr.tabOcr_B30_ui import Ui_TabOcr_B30
|
||||||
from ui.extends.components.ocrQueue import OcrQueueModel
|
from ui.extends.components.ocrQueue import OcrQueueModel
|
||||||
from ui.extends.shared.cv2_utils import cv2BgrMatToQImage, qImageToCvMatBgr
|
from ui.extends.shared.cv2_utils import cv2BgrMatToQImage, qImageToCvMatBgr
|
||||||
from ui.extends.shared.settings import Settings
|
from ui.extends.shared.settings import KNN_MODEL_FILE, SIFT_DATABASE_FILE, Settings
|
||||||
from ui.extends.tabs.tabOcr.tabOcr_B30 import ChieriV4OcrRunnable, b30ResultToScore
|
from ui.extends.tabs.tabOcr.tabOcr_B30 import ChieriV4OcrRunnable, b30ResultToScore
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@ -30,16 +28,14 @@ class TabOcr_B30(Ui_TabOcr_B30, QWidget):
|
|||||||
self.b30TypeComboBox.setCurrentIndex(0)
|
self.b30TypeComboBox.setCurrentIndex(0)
|
||||||
self.b30TypeComboBox.setEnabled(False)
|
self.b30TypeComboBox.setEnabled(False)
|
||||||
|
|
||||||
# self.paddleFolderSelector.setMode(
|
|
||||||
# self.paddleFolderSelector.getExistingDirectory
|
|
||||||
# )
|
|
||||||
|
|
||||||
self.imageSelector.filesSelected.connect(self.imageSelected)
|
self.imageSelector.filesSelected.connect(self.imageSelected)
|
||||||
self.knnModelSelector.filesSelected.connect(self.knnModelSelected)
|
self.knnModelSelector.filesSelected.connect(self.knnModelSelected)
|
||||||
self.b30KnnModelSelector.filesSelected.connect(self.b30KnnModelSelected)
|
self.b30KnnModelSelector.filesSelected.connect(self.b30KnnModelSelected)
|
||||||
# self.paddleFolderSelector.filesSelected.connect(self.paddleFolderSelected)
|
|
||||||
self.siftDatabaseSelector.filesSelected.connect(self.siftDatabaseSelected)
|
self.siftDatabaseSelector.filesSelected.connect(self.siftDatabaseSelected)
|
||||||
|
|
||||||
|
self.knnModelSelector.connectSettings(KNN_MODEL_FILE)
|
||||||
|
self.siftDatabaseSelector.connectSettings(SIFT_DATABASE_FILE)
|
||||||
|
|
||||||
self.imagePath = None # for checking only
|
self.imagePath = None # for checking only
|
||||||
self.img = None
|
self.img = None
|
||||||
self.paddleFolder = None
|
self.paddleFolder = None
|
||||||
@ -61,59 +57,30 @@ class TabOcr_B30(Ui_TabOcr_B30, QWidget):
|
|||||||
self.ocrQueue.setModel(self.ocrQueueModel)
|
self.ocrQueue.setModel(self.ocrQueueModel)
|
||||||
|
|
||||||
def imageSelected(self):
|
def imageSelected(self):
|
||||||
selectedFiles = self.imageSelector.selectedFiles()
|
if selectedFiles := self.imageSelector.selectedFiles():
|
||||||
if selectedFiles:
|
|
||||||
imagePath = selectedFiles[0]
|
imagePath = selectedFiles[0]
|
||||||
self.imagePath = imagePath
|
self.imagePath = imagePath
|
||||||
self.img = imread_unicode(imagePath)
|
self.img = imread_unicode(imagePath)
|
||||||
self.tryPrepareOcr.emit()
|
self.tryPrepareOcr.emit()
|
||||||
|
|
||||||
def knnModelSelected(self):
|
def knnModelSelected(self):
|
||||||
selectedFiles = self.knnModelSelector.selectedFiles()
|
if selectedFiles := self.knnModelSelector.selectedFiles():
|
||||||
if selectedFiles:
|
|
||||||
knnModelPath = selectedFiles[0]
|
knnModelPath = selectedFiles[0]
|
||||||
self.knnModel = cv2.ml.KNearest.load(knnModelPath)
|
self.knnModel = cv2.ml.KNearest.load(knnModelPath)
|
||||||
self.tryPrepareOcr.emit()
|
self.tryPrepareOcr.emit()
|
||||||
|
|
||||||
def b30KnnModelSelected(self):
|
def b30KnnModelSelected(self):
|
||||||
selectedFiles = self.b30KnnModelSelector.selectedFiles()
|
if selectedFiles := self.b30KnnModelSelector.selectedFiles():
|
||||||
if selectedFiles:
|
|
||||||
b30KnnModelPath = selectedFiles[0]
|
b30KnnModelPath = selectedFiles[0]
|
||||||
self.b30KnnModel = cv2.ml.KNearest.load(b30KnnModelPath)
|
self.b30KnnModel = cv2.ml.KNearest.load(b30KnnModelPath)
|
||||||
self.tryPrepareOcr.emit()
|
self.tryPrepareOcr.emit()
|
||||||
|
|
||||||
def siftDatabaseSelected(self):
|
def siftDatabaseSelected(self):
|
||||||
selectedFiles = self.siftDatabaseSelector.selectedFiles()
|
if selectedFiles := self.siftDatabaseSelector.selectedFiles():
|
||||||
if selectedFiles:
|
|
||||||
siftDatabasePath = selectedFiles[0]
|
siftDatabasePath = selectedFiles[0]
|
||||||
self.siftDatabase = SIFTDatabase(siftDatabasePath)
|
self.siftDatabase = SIFTDatabase(siftDatabasePath)
|
||||||
self.tryPrepareOcr.emit()
|
self.tryPrepareOcr.emit()
|
||||||
|
|
||||||
def paddleFolderSelected(self):
|
|
||||||
selectedFiles = self.paddleFolderSelector.selectedFiles()
|
|
||||||
if selectedFiles:
|
|
||||||
self.paddleFolder = selectedFiles[0]
|
|
||||||
self.initPaddle()
|
|
||||||
self.tryPrepareOcr.emit()
|
|
||||||
|
|
||||||
def initPaddle(self):
|
|
||||||
paddleFolder = Path(self.paddleFolder)
|
|
||||||
paddleDetFolder = paddleFolder / "det"
|
|
||||||
paddleClsFolder = paddleFolder / "cls"
|
|
||||||
paddleRecFolder = paddleFolder / "rec"
|
|
||||||
|
|
||||||
if not (paddleDetFolder.exists() and paddleRecFolder.exists()):
|
|
||||||
logger.warning("paddleocr folder incomplete, aborting.")
|
|
||||||
return
|
|
||||||
|
|
||||||
self.paddle = PaddleOCR(
|
|
||||||
show_log=False,
|
|
||||||
use_angle_cls=False,
|
|
||||||
det_model_dir=str(paddleDetFolder),
|
|
||||||
cls_model_dir=str(paddleClsFolder),
|
|
||||||
rec_model_dir=str(paddleRecFolder),
|
|
||||||
)
|
|
||||||
|
|
||||||
def prepareOcr(self):
|
def prepareOcr(self):
|
||||||
b30Type = self.b30TypeComboBox.currentData()
|
b30Type = self.b30TypeComboBox.currentData()
|
||||||
if not b30Type:
|
if not b30Type:
|
||||||
|
@ -11,7 +11,12 @@ from PySide6.QtWidgets import QApplication, QFileDialog, QWidget
|
|||||||
|
|
||||||
from ui.designer.tabs.tabOcr.tabOcr_Device_ui import Ui_TabOcr_Device
|
from ui.designer.tabs.tabOcr.tabOcr_Device_ui import Ui_TabOcr_Device
|
||||||
from ui.extends.components.ocrQueue import OcrQueueModel
|
from ui.extends.components.ocrQueue import OcrQueueModel
|
||||||
from ui.extends.shared.settings import Settings
|
from ui.extends.shared.settings import (
|
||||||
|
DEVICES_JSON_FILE,
|
||||||
|
KNN_MODEL_FILE,
|
||||||
|
SIFT_DATABASE_FILE,
|
||||||
|
Settings,
|
||||||
|
)
|
||||||
from ui.extends.tabs.tabOcr.tabOcr_Device import (
|
from ui.extends.tabs.tabOcr.tabOcr_Device import (
|
||||||
ScoreConverter,
|
ScoreConverter,
|
||||||
TabDeviceV2AutoRoisOcrRunnable,
|
TabDeviceV2AutoRoisOcrRunnable,
|
||||||
@ -29,11 +34,12 @@ class TabOcr_Device(Ui_TabOcr_Device, QWidget):
|
|||||||
|
|
||||||
self.deviceFileSelector.filesSelected.connect(self.deviceFileSelected)
|
self.deviceFileSelector.filesSelected.connect(self.deviceFileSelected)
|
||||||
self.knnModelSelector.filesSelected.connect(self.knnModelFileSelected)
|
self.knnModelSelector.filesSelected.connect(self.knnModelFileSelected)
|
||||||
self.tesseractFileSelector.filesSelected.connect(
|
|
||||||
self.tesseractFileSelectorFilesSelected
|
|
||||||
)
|
|
||||||
self.siftDatabaseSelector.filesSelected.connect(self.siftDatabaseFileSelected)
|
self.siftDatabaseSelector.filesSelected.connect(self.siftDatabaseFileSelected)
|
||||||
|
|
||||||
|
self.deviceFileSelector.connectSettings(DEVICES_JSON_FILE)
|
||||||
|
self.knnModelSelector.connectSettings(KNN_MODEL_FILE)
|
||||||
|
self.siftDatabaseSelector.connectSettings(SIFT_DATABASE_FILE)
|
||||||
|
|
||||||
settings = Settings()
|
settings = Settings()
|
||||||
logger.info("Applying default settings...")
|
logger.info("Applying default settings...")
|
||||||
self.deviceFileSelector.selectFile(settings.devicesJsonFile())
|
self.deviceFileSelector.selectFile(settings.devicesJsonFile())
|
||||||
@ -74,24 +80,16 @@ class TabOcr_Device(Ui_TabOcr_Device, QWidget):
|
|||||||
self.deviceDependenciesStackedWidget.setCurrentIndex(device.version - 1)
|
self.deviceDependenciesStackedWidget.setCurrentIndex(device.version - 1)
|
||||||
|
|
||||||
def deviceFileSelected(self):
|
def deviceFileSelected(self):
|
||||||
selectedFiles = self.deviceFileSelector.selectedFiles()
|
if selectedFiles := self.deviceFileSelector.selectedFiles():
|
||||||
if selectedFiles:
|
|
||||||
file = selectedFiles[0]
|
file = selectedFiles[0]
|
||||||
self.deviceComboBox.loadDevicesJson(file)
|
self.deviceComboBox.loadDevicesJson(file)
|
||||||
|
|
||||||
def knnModelFileSelected(self):
|
def knnModelFileSelected(self):
|
||||||
selectedFiles = self.knnModelSelector.selectedFiles()
|
if selectedFiles := self.knnModelSelector.selectedFiles():
|
||||||
if selectedFiles:
|
|
||||||
self.knnModel = cv2.ml.KNearest.load(selectedFiles[0])
|
self.knnModel = cv2.ml.KNearest.load(selectedFiles[0])
|
||||||
|
|
||||||
def tesseractFileSelectorFilesSelected(self):
|
|
||||||
selectedFiles = self.tesseractFileSelector.selectedFiles()
|
|
||||||
if selectedFiles:
|
|
||||||
pytesseract.pytesseract.tesseract_cmd = selectedFiles[0]
|
|
||||||
|
|
||||||
def siftDatabaseFileSelected(self):
|
def siftDatabaseFileSelected(self):
|
||||||
selectedFiles = self.siftDatabaseSelector.selectedFiles()
|
if selectedFiles := self.siftDatabaseSelector.selectedFiles():
|
||||||
if selectedFiles:
|
|
||||||
self.siftDatabase = SIFTDatabase(selectedFiles[0])
|
self.siftDatabase = SIFTDatabase(selectedFiles[0])
|
||||||
|
|
||||||
@Slot()
|
@Slot()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user