Spaces:
Runtime error
Runtime error
| """Обёртка над fast-plate-ocr с устойчивостью к разным версиям API.""" | |
| import tempfile | |
| from pathlib import Path | |
| import cv2 | |
| import numpy as np | |
| from fast_plate_ocr import LicensePlateRecognizer | |
| # Доступные модели от лучшей к самой быстрой: | |
| # "global-plates-mobile-vit-v2-model" — самая точная, ~30 ms на CPU | |
| # "cct-s-v2-global-model" — баланс, ~10 ms | |
| # "cct-xs-v2-global-model" — самая быстрая, ~5 ms | |
| DEFAULT_OCR_MODEL = "global-plates-mobile-vit-v2-model" | |
| class PlateOCR: | |
| def __init__(self, model_name: str = DEFAULT_OCR_MODEL): | |
| self.model = LicensePlateRecognizer(model_name) | |
| def _extract_text(self, pred) -> str: | |
| """API менялся между версиями fast-plate-ocr.""" | |
| if isinstance(pred, str): | |
| return pred | |
| for attr in ("plate", "text", "label", "plate_text"): | |
| v = getattr(pred, attr, None) | |
| if isinstance(v, str): | |
| return v | |
| return str(pred) | |
| def recognize(self, image: np.ndarray) -> str: | |
| """Принимает np.ndarray (BGR), возвращает raw текст.""" | |
| with tempfile.NamedTemporaryFile(suffix=".jpg", delete=False) as f: | |
| tmp_path = Path(f.name) | |
| try: | |
| cv2.imwrite(str(tmp_path), image) | |
| preds = self.model.run(str(tmp_path)) | |
| if not preds: | |
| return "" | |
| return self._extract_text(preds[0]) | |
| finally: | |
| tmp_path.unlink(missing_ok=True) |