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,42 @@
__all__: list[str] = []
import cv2
import typing as _typing
# Enumerations
sync_policy_dont_sync: int
SYNC_POLICY_DONT_SYNC: int
sync_policy_drop: int
SYNC_POLICY_DROP: int
sync_policy = int
"""One of [sync_policy_dont_sync, SYNC_POLICY_DONT_SYNC, sync_policy_drop, SYNC_POLICY_DROP]"""
# Classes
class queue_capacity:
capacity: int
# Functions
def __init__(self, cap: int = ...) -> None: ...
# Functions
def desync(g: cv2.GMat) -> cv2.GMat: ...
def seqNo(arg1: cv2.GMat) -> cv2.GOpaqueT: ...
def seq_id(arg1: cv2.GMat) -> cv2.GOpaqueT: ...
@_typing.overload
def size(src: cv2.GMat) -> cv2.GOpaqueT: ...
@_typing.overload
def size(r: cv2.GOpaqueT) -> cv2.GOpaqueT: ...
@_typing.overload
def size(src: cv2.GFrame) -> cv2.GOpaqueT: ...
def timestamp(arg1: cv2.GMat) -> cv2.GOpaqueT: ...