feat(phase1): implement OpenCV image processing pipeline

- Create ImageProcessor service with EXIF orientation detection
- Implement smart cropping via OpenCV contour detection (10% padding)
- Add text orientation detection using Hough line transform
- Resize and compress images to 1200px with 85% JPEG quality
- Generate 200px square thumbnails with center crop
- Fallback to Pillow if OpenCV fails
- Comprehensive test suite: 28 tests all passing
- File size validation (reject >10MB)
- Graceful error handling for corrupted/invalid images
- Update requirements.txt with opencv-python, piexif, python-magic
This commit is contained in:
2026-04-20 22:17:11 +03:00
parent 01321bf607
commit 3aafacab12
1068 changed files with 720366 additions and 0 deletions

View File

@@ -0,0 +1,51 @@
__all__: list[str] = []
import cv2.typing
import typing as _typing
from cv2.gapi.ie import detail as detail
# Enumerations
TraitAs_TENSOR: int
TRAIT_AS_TENSOR: int
TraitAs_IMAGE: int
TRAIT_AS_IMAGE: int
TraitAs = int
"""One of [TraitAs_TENSOR, TRAIT_AS_TENSOR, TraitAs_IMAGE, TRAIT_AS_IMAGE]"""
Sync: int
SYNC: int
Async: int
ASYNC: int
InferMode = int
"""One of [Sync, SYNC, Async, ASYNC]"""
# Classes
class PyParams:
# Functions
@_typing.overload
def __init__(self) -> None: ...
@_typing.overload
def __init__(self, tag: str, model: str, weights: str, device: str) -> None: ...
@_typing.overload
def __init__(self, tag: str, model: str, device: str) -> None: ...
def constInput(self, layer_name: str, data: cv2.typing.MatLike, hint: TraitAs = ...) -> PyParams: ...
def cfgNumRequests(self, nireq: int) -> PyParams: ...
def cfgBatchSize(self, size: int) -> PyParams: ...
# Functions
@_typing.overload
def params(tag: str, model: str, weights: str, device: str) -> PyParams: ...
@_typing.overload
def params(tag: str, model: str, device: str) -> PyParams: ...

View File

@@ -0,0 +1,12 @@
__all__: list[str] = []
ParamDesc_Kind_Load: int
PARAM_DESC_KIND_LOAD: int
ParamDesc_Kind_Import: int
PARAM_DESC_KIND_IMPORT: int
ParamDesc_Kind = int
"""One of [ParamDesc_Kind_Load, PARAM_DESC_KIND_LOAD, ParamDesc_Kind_Import, PARAM_DESC_KIND_IMPORT]"""
# Classes