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,32 @@
__all__: list[str] = []
import cv2
import typing as _typing
from cv2.gapi.ot import cpu as cpu
# Enumerations
NEW: int
TRACKED: int
LOST: int
TrackingStatus = int
"""One of [NEW, TRACKED, LOST]"""
# Classes
class ObjectTrackerParams:
max_num_objects: int
input_image_format: int
tracking_per_class: bool
# Functions
@_typing.overload
def track(mat: cv2.GMat, detected_rects: cv2.GArrayT, detected_class_labels: cv2.GArrayT, delta: float) -> tuple[cv2.GArrayT, cv2.GArrayT, cv2.GArrayT, cv2.GArrayT]: ...
@_typing.overload
def track(frame: cv2.GFrame, detected_rects: cv2.GArrayT, detected_class_labels: cv2.GArrayT, delta: float) -> tuple[cv2.GArrayT, cv2.GArrayT, cv2.GArrayT, cv2.GArrayT]: ...

View File

@@ -0,0 +1,9 @@
__all__: list[str] = []
import cv2
# Functions
def kernels() -> cv2.GKernelPackage: ...