feat: ImagePHashDatabase

This commit is contained in:
2023-09-27 18:04:38 +08:00
parent 9c06c6d9f1
commit 34e56395ab
6 changed files with 159 additions and 72 deletions

View File

@ -45,6 +45,17 @@ class SettingsOcr(SettingsBaseWidget):
self.knnModelFileResetButton,
)
if self.settings.b30KnnModelFile():
self.b30KnnModelFileValueWidget.selectFile(self.settings.b30KnnModelFile())
self.b30KnnModelFileValueWidget.filesSelected.connect(self.setB30KnnModelFile)
self.b30KnnModelFileResetButton.clicked.connect(self.resetB30KnnModelFile)
self.insertItem(
"b30KnnModelFile",
self.b30KnnModelFileLabel,
self.b30KnnModelFileValueWidget,
self.b30KnnModelFileResetButton,
)
if self.settings.siftDatabaseFile():
self.siftDatabaseFileValueWidget.selectFile(
self.settings.siftDatabaseFile()
@ -58,6 +69,21 @@ class SettingsOcr(SettingsBaseWidget):
self.siftDatabaseFileResetButton,
)
if self.settings.phashDatabaseFile():
self.phashDatabaseFileValueWidget.selectFile(
self.settings.phashDatabaseFile()
)
self.phashDatabaseFileValueWidget.filesSelected.connect(
self.setPHashDatabaseFile
)
self.phashDatabaseFileResetButton.clicked.connect(self.resetPHashDatabaseFile)
self.insertItem(
"phashDatabaseFile",
self.phashDatabaseFileLabel,
self.phashDatabaseFileValueWidget,
self.phashDatabaseFileResetButton,
)
def setDevicesJson(self):
selectedFile = self.devicesJsonValueWidget.selectedFiles()
if selectedFile and selectedFile[0]:
@ -79,8 +105,7 @@ class SettingsOcr(SettingsBaseWidget):
self.settings.resetDevicesJsonFile()
def setDeviceUuid(self):
device = self.deviceUuidValueWidget.currentData()
if device:
if device := self.deviceUuidValueWidget.currentData():
self.settings.setDeviceUuid(device.uuid)
def resetDeviceUuid(self):
@ -97,6 +122,16 @@ class SettingsOcr(SettingsBaseWidget):
self.knnModelFileValueWidget.reset()
self.settings.resetKnnModelFile()
def setB30KnnModelFile(self):
selectedFile = self.b30KnnModelFileValueWidget.selectedFiles()
if selectedFile and selectedFile[0]:
file = selectedFile[0]
self.settings.setB30KnnModelFile(file)
def resetB30KnnModelFile(self):
self.b30KnnModelFileValueWidget.reset()
self.settings.resetB30KnnModelFile()
def setSiftDatabaseFile(self):
selectedFile = self.siftDatabaseFileValueWidget.selectedFiles()
if selectedFile and selectedFile[0]:
@ -107,6 +142,16 @@ class SettingsOcr(SettingsBaseWidget):
self.siftDatabaseFileValueWidget.reset()
self.settings.resetSiftDatabaseFile()
def setPHashDatabaseFile(self):
selectedFile = self.phashDatabaseFileValueWidget.selectedFiles()
if selectedFile and selectedFile[0]:
file = selectedFile[0]
self.settings.setPHashDatabaseFile(file)
def resetPHashDatabaseFile(self):
self.phashDatabaseFileValueWidget.reset()
self.settings.resetPHashDatabaseFile()
def setupUi(self, *args):
self.devicesJsonLabel = QLabel(self)
self.devicesJsonValueWidget = FileSelector(self)
@ -120,10 +165,18 @@ class SettingsOcr(SettingsBaseWidget):
self.knnModelFileValueWidget = FileSelector(self)
self.knnModelFileResetButton = QPushButton(self)
self.b30KnnModelFileLabel = QLabel(self)
self.b30KnnModelFileValueWidget = FileSelector(self)
self.b30KnnModelFileResetButton = QPushButton(self)
self.siftDatabaseFileLabel = QLabel(self)
self.siftDatabaseFileValueWidget = FileSelector(self)
self.siftDatabaseFileResetButton = QPushButton(self)
self.phashDatabaseFileLabel = QLabel(self)
self.phashDatabaseFileValueWidget = FileSelector(self)
self.phashDatabaseFileResetButton = QPushButton(self)
super().setupUi(self)
self.retranslateUi()
@ -142,6 +195,12 @@ class SettingsOcr(SettingsBaseWidget):
self.knnModelFileLabel.setText(QCoreApplication.translate("Settings", "ocr.knnModelFile.label"))
self.knnModelFileResetButton.setText(QCoreApplication.translate("Settings", "resetButton"))
self.b30KnnModelFileLabel.setText(QCoreApplication.translate("Settings", "ocr.b30KnnModelFile.label"))
self.b30KnnModelFileResetButton.setText(QCoreApplication.translate("Settings", "resetButton"))
self.siftDatabaseFileLabel.setText(QCoreApplication.translate("Settings", "ocr.siftDatabaseFile.label"))
self.siftDatabaseFileResetButton.setText(QCoreApplication.translate("Settings", "resetButton"))
self.phashDatabaseFileLabel.setText(QCoreApplication.translate("Settings", "ocr.phashDatabaseFile.label"))
self.phashDatabaseFileResetButton.setText(QCoreApplication.translate("Settings", "resetButton"))
# fmt: on

View File

@ -12,7 +12,11 @@ from ui.designer.tabs.tabOcr.tabOcr_B30_ui import Ui_TabOcr_B30
from ui.extends.components.ocrQueue import OcrQueueModel
from ui.extends.shared.cv2_utils import cv2BgrMatToQImage, qImageToCvMatBgr
from ui.extends.shared.language import LanguageChangeEventFilter
from ui.extends.shared.settings import KNN_MODEL_FILE, SIFT_DATABASE_FILE, Settings
from ui.extends.shared.settings import (
B30_KNN_MODEL_FILE,
KNN_MODEL_FILE,
PHASH_DATABASE_FILE,
)
from ui.extends.tabs.tabOcr.tabOcr_B30 import ChieriV4OcrRunnable, b30ResultToScore
logger = logging.getLogger(__name__)
@ -35,12 +39,8 @@ class TabOcr_B30(Ui_TabOcr_B30, QWidget):
self.imageSelector.filesSelected.connect(self.imageSelected)
self.knnModelSelector.filesSelected.connect(self.knnModelSelected)
self.b30KnnModelSelector.filesSelected.connect(self.b30KnnModelSelected)
# self.siftDatabaseSelector.filesSelected.connect(self.siftDatabaseSelected)
self.phashDatabaseSelector.filesSelected.connect(self.phashDatabaseSelected)
self.knnModelSelector.connectSettings(KNN_MODEL_FILE)
# self.siftDatabaseSelector.connectSettings(SIFT_DATABASE_FILE)
self.imagePath = None # for checking only
self.img = None
self.paddleFolder = None
@ -54,10 +54,10 @@ class TabOcr_B30(Ui_TabOcr_B30, QWidget):
self.tryPrepareOcr.connect(self.prepareOcr)
settings = Settings()
logger.info("Applying default settings...")
self.knnModelSelector.selectFile(settings.knnModelFile())
# self.siftDatabaseSelector.selectFile(settings.siftDatabaseFile())
self.knnModelSelector.connectSettings(KNN_MODEL_FILE)
self.b30KnnModelSelector.connectSettings(B30_KNN_MODEL_FILE)
self.phashDatabaseSelector.connectSettings(PHASH_DATABASE_FILE)
self.ocrQueueModel = OcrQueueModel(self)
self.ocrQueue.setModel(self.ocrQueueModel)
@ -81,12 +81,6 @@ class TabOcr_B30(Ui_TabOcr_B30, QWidget):
self.b30KnnModel = cv2.ml.KNearest.load(b30KnnModelPath)
self.tryPrepareOcr.emit()
def siftDatabaseSelected(self):
if selectedFiles := self.siftDatabaseSelector.selectedFiles():
siftDatabasePath = selectedFiles[0]
self.siftDatabase = SIFTDatabase(siftDatabasePath)
self.tryPrepareOcr.emit()
def phashDatabaseSelected(self):
if selectedFiles := self.phashDatabaseSelector.selectedFiles():
phashDatabasePath = selectedFiles[0]

View File

@ -5,8 +5,8 @@ import cv2
# from arcaea_offline_ocr_device_creation_wizard.implements.wizard import Wizard
from arcaea_offline_ocr.device.v1.definition import DeviceV1
from arcaea_offline_ocr.device.v2.definition import DeviceV2
from arcaea_offline_ocr.sift_db import SIFTDatabase
from arcaea_offline_ocr.phash_db import ImagePHashDatabase
from arcaea_offline_ocr.sift_db import SIFTDatabase
from PySide6.QtCore import Qt, Slot
from PySide6.QtWidgets import QApplication, QFileDialog, QWidget
@ -16,7 +16,8 @@ from ui.extends.shared.language import LanguageChangeEventFilter
from ui.extends.shared.settings import (
DEVICES_JSON_FILE,
KNN_MODEL_FILE,
SIFT_DATABASE_FILE,
PHASH_DATABASE_FILE,
TESSERACT_FILE,
Settings,
)
from ui.extends.tabs.tabOcr.tabOcr_Device import (
@ -39,20 +40,15 @@ class TabOcr_Device(Ui_TabOcr_Device, QWidget):
self.deviceFileSelector.filesSelected.connect(self.deviceFileSelected)
self.knnModelSelector.filesSelected.connect(self.knnModelFileSelected)
# self.siftDatabaseSelector.filesSelected.connect(self.siftDatabaseFileSelected)
self.phashDatabaseSelector.filesSelected.connect(self.phashDatabaseFileSelected)
logger.info("Applying settings...")
self.deviceFileSelector.connectSettings(DEVICES_JSON_FILE)
self.knnModelSelector.connectSettings(KNN_MODEL_FILE)
# self.siftDatabaseSelector.connectSettings(SIFT_DATABASE_FILE)
self.tesseractFileSelector.connectSettings(TESSERACT_FILE)
self.phashDatabaseSelector.connectSettings(PHASH_DATABASE_FILE)
settings = Settings()
logger.info("Applying default settings...")
self.deviceFileSelector.selectFile(settings.devicesJsonFile())
self.tesseractFileSelector.selectFile(settings.tesseractPath())
self.deviceComboBox.selectDevice(settings.deviceUuid())
self.knnModelSelector.selectFile(settings.knnModelFile())
# vself.siftDatabaseSelector.selectFile(settings.siftDatabaseFile())
self.ocrQueueModel = OcrQueueModel(self)
self.ocrQueue.setModel(self.ocrQueueModel)
@ -94,10 +90,6 @@ class TabOcr_Device(Ui_TabOcr_Device, QWidget):
if selectedFiles := self.knnModelSelector.selectedFiles():
self.knnModel = cv2.ml.KNearest.load(selectedFiles[0])
def siftDatabaseFileSelected(self):
if selectedFiles := self.siftDatabaseSelector.selectedFiles():
self.siftDatabase = SIFTDatabase(selectedFiles[0])
def phashDatabaseFileSelected(self):
if selectedFiles := self.phashDatabaseSelector.selectedFiles():
self.phashDatabase = ImagePHashDatabase(selectedFiles[0])