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,31 @@
__all__: list[str] = []
import cv2
# Functions
def getBackendName(api: cv2.VideoCaptureAPIs) -> str: ...
def getBackends() -> _typing.Sequence[cv2.VideoCaptureAPIs]: ...
def getCameraBackendPluginVersion(api: cv2.VideoCaptureAPIs) -> tuple[str, int, int]: ...
def getCameraBackends() -> _typing.Sequence[cv2.VideoCaptureAPIs]: ...
def getStreamBackendPluginVersion(api: cv2.VideoCaptureAPIs) -> tuple[str, int, int]: ...
def getStreamBackends() -> _typing.Sequence[cv2.VideoCaptureAPIs]: ...
def getStreamBufferedBackendPluginVersion(api: cv2.VideoCaptureAPIs) -> tuple[str, int, int]: ...
def getStreamBufferedBackends() -> _typing.Sequence[cv2.VideoCaptureAPIs]: ...
def getWriterBackendPluginVersion(api: cv2.VideoCaptureAPIs) -> tuple[str, int, int]: ...
def getWriterBackends() -> _typing.Sequence[cv2.VideoCaptureAPIs]: ...
def hasBackend(api: cv2.VideoCaptureAPIs) -> bool: ...
def isBackendBuiltIn(api: cv2.VideoCaptureAPIs) -> bool: ...