mirror of
https://github.com/283375/arcaea-offline-ocr.git
synced 2025-07-01 12:26:27 +00:00
refactor: scenario base
This commit is contained in:
22
src/arcaea_offline_ocr/scenarios/b30/base.py
Normal file
22
src/arcaea_offline_ocr/scenarios/b30/base.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
from abc import abstractmethod
|
||||||
|
from typing import TYPE_CHECKING, List
|
||||||
|
|
||||||
|
from arcaea_offline_ocr.scenarios.base import OcrScenario, OcrScenarioResult
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from arcaea_offline_ocr.types import Mat
|
||||||
|
|
||||||
|
|
||||||
|
class Best30Scenario(OcrScenario):
|
||||||
|
@abstractmethod
|
||||||
|
def components(self, img: "Mat", /) -> List["Mat"]: ...
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def result(self, component_img: "Mat", /, *args, **kwargs) -> OcrScenarioResult: ...
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def results(self, img: "Mat", /, *args, **kwargs) -> List[OcrScenarioResult]:
|
||||||
|
"""
|
||||||
|
Commonly a shorthand for `[self.result(comp) for comp in self.components(img)]`
|
||||||
|
"""
|
||||||
|
...
|
38
src/arcaea_offline_ocr/scenarios/base.py
Normal file
38
src/arcaea_offline_ocr/scenarios/base.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
from abc import ABC
|
||||||
|
from dataclasses import dataclass, field
|
||||||
|
from datetime import datetime
|
||||||
|
from typing import Sequence, Optional
|
||||||
|
|
||||||
|
from arcaea_offline_ocr.providers import ImageIdProviderResult
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass(kw_only=True)
|
||||||
|
class OcrScenarioResult:
|
||||||
|
song_id: str
|
||||||
|
rating_class: int
|
||||||
|
score: int
|
||||||
|
|
||||||
|
song_id_results: Sequence[ImageIdProviderResult] = field(default_factory=lambda: [])
|
||||||
|
partner_id_results: Sequence[ImageIdProviderResult] = field(
|
||||||
|
default_factory=lambda: []
|
||||||
|
)
|
||||||
|
|
||||||
|
pure: Optional[int] = None
|
||||||
|
pure_inaccurate: Optional[int] = None
|
||||||
|
pure_early: Optional[int] = None
|
||||||
|
pure_late: Optional[int] = None
|
||||||
|
far: Optional[int] = None
|
||||||
|
far_inaccurate: Optional[int] = None
|
||||||
|
far_early: Optional[int] = None
|
||||||
|
far_late: Optional[int] = None
|
||||||
|
lost: Optional[int] = None
|
||||||
|
|
||||||
|
played_at: Optional[datetime] = None
|
||||||
|
max_recall: Optional[int] = None
|
||||||
|
clear_status: Optional[int] = None
|
||||||
|
clear_type: Optional[int] = None
|
||||||
|
modifier: Optional[int] = None
|
||||||
|
|
||||||
|
|
||||||
|
class OcrScenario(ABC):
|
||||||
|
pass
|
8
src/arcaea_offline_ocr/scenarios/device/base.py
Normal file
8
src/arcaea_offline_ocr/scenarios/device/base.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
from abc import abstractmethod
|
||||||
|
|
||||||
|
from arcaea_offline_ocr.scenarios.base import OcrScenario, OcrScenarioResult
|
||||||
|
|
||||||
|
|
||||||
|
class DeviceScenarioBase(OcrScenario):
|
||||||
|
@abstractmethod
|
||||||
|
def result(self) -> OcrScenarioResult: ...
|
Reference in New Issue
Block a user