File size: 2,529 Bytes
23d337e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | """Provider tests for ImageQualityProvider."""
from __future__ import annotations
import cv2
import numpy as np
import pytest
from config.settings import Settings
from pipeline.feature_extraction import PipelineOutput
from providers.image_analysis.image_quality import ImageQualityProvider
@pytest.fixture
def quality_provider():
return ImageQualityProvider(settings=Settings(environment="test", db_path=":memory:"))
@pytest.fixture
def pipeline_output(sample_image_bytes):
img = cv2.imdecode(np.frombuffer(sample_image_bytes, np.uint8), cv2.IMREAD_COLOR)
return PipelineOutput(
image=img, image_hash="h", width=img.shape[1], height=img.shape[0], source="bytes",
original_bytes=sample_image_bytes, original_format=".jpg",
)
class TestImageQualityProvider:
def test_name(self, quality_provider):
assert quality_provider.name == "image_quality"
def test_capability(self, quality_provider):
from models.providers import ProviderCapability
assert quality_provider.capability == ProviderCapability.IMAGE_ANALYSIS
def test_is_available(self, quality_provider):
assert quality_provider.is_available() is True
def test_execute_returns_metrics(self, quality_provider, pipeline_output):
result = quality_provider.execute(pipeline_output)
assert result.success is True
n = result.normalized
assert "brightness" in n
assert "contrast" in n
assert "sharpness" in n
assert "noise_level" in n
assert "quality_score" in n
assert isinstance(n["brightness"], float)
assert isinstance(n["quality_score"], float)
def test_quality_score_in_range(self, quality_provider, pipeline_output):
result = quality_provider.execute(pipeline_output)
q = result.normalized["quality_score"]
assert 0.0 <= q <= 1.0
def test_black_image_low_brightness(self, quality_provider):
img = np.zeros((200, 200, 3), dtype=np.uint8)
po = PipelineOutput(image=img, image_hash="h", width=200, height=200, source="bytes")
result = quality_provider.execute(po)
assert result.normalized["brightness"] < 10.0 # near-black
def test_white_image_high_brightness(self, quality_provider):
img = np.full((200, 200, 3), 255, dtype=np.uint8)
po = PipelineOutput(image=img, image_hash="h", width=200, height=200, source="bytes")
result = quality_provider.execute(po)
assert result.normalized["brightness"] > 240.0
|