Sunday01's picture
up
9dce458
import numpy as np
from .default import DefaultDetector
from .dbnet_convnext import DBConvNextDetector
from .ctd import ComicTextDetector
from .craft import CRAFTDetector
from .none import NoneDetector
from .common import CommonDetector, OfflineDetector
DETECTORS = {
'default': DefaultDetector,
'dbconvnext': DBConvNextDetector,
'ctd': ComicTextDetector,
'craft': CRAFTDetector,
'none': NoneDetector,
}
detector_cache = {}
def get_detector(key: str, *args, **kwargs) -> CommonDetector:
if key not in DETECTORS:
raise ValueError(f'Could not find detector for: "{key}". Choose from the following: %s' % ','.join(DETECTORS))
if not detector_cache.get(key):
detector = DETECTORS[key]
detector_cache[key] = detector(*args, **kwargs)
return detector_cache[key]
async def prepare(detector_key: str):
detector = get_detector(detector_key)
if isinstance(detector, OfflineDetector):
await detector.download()
async def dispatch(detector_key: str, image: np.ndarray, detect_size: int, text_threshold: float, box_threshold: float, unclip_ratio: float,
invert: bool, gamma_correct: bool, rotate: bool, auto_rotate: bool = False, device: str = 'cpu', verbose: bool = False):
detector = get_detector(detector_key)
if isinstance(detector, OfflineDetector):
await detector.load(device)
return await detector.detect(image, detect_size, text_threshold, box_threshold, unclip_ratio, invert, gamma_correct, rotate, auto_rotate, verbose)