visual-verifier 0.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- visual_verifier/__init__.py +80 -0
- visual_verifier/__main__.py +6 -0
- visual_verifier/api.py +122 -0
- visual_verifier/cli.py +883 -0
- visual_verifier/config/__init__.py +15 -0
- visual_verifier/config/defaults.py +45 -0
- visual_verifier/config/targets.py +101 -0
- visual_verifier/config/tracking.py +97 -0
- visual_verifier/demo.py +310 -0
- visual_verifier/detection/__init__.py +29 -0
- visual_verifier/detection/filtering.py +203 -0
- visual_verifier/detection/region_extraction.py +537 -0
- visual_verifier/detection/severity.py +274 -0
- visual_verifier/exceptions.py +108 -0
- visual_verifier/integrations/__init__.py +8 -0
- visual_verifier/media/__init__.py +29 -0
- visual_verifier/media/metadata.py +307 -0
- visual_verifier/media/normalization.py +243 -0
- visual_verifier/media/thumbnails.py +90 -0
- visual_verifier/media/video_reader.py +320 -0
- visual_verifier/media/video_writer.py +127 -0
- visual_verifier/metrics/__init__.py +51 -0
- visual_verifier/metrics/geometry.py +209 -0
- visual_verifier/metrics/pixel.py +345 -0
- visual_verifier/metrics/sharpness.py +249 -0
- visual_verifier/models.py +537 -0
- visual_verifier/pipeline/__init__.py +9 -0
- visual_verifier/pipeline/image_pipeline.py +502 -0
- visual_verifier/pipeline/video_pipeline.py +1232 -0
- visual_verifier/policies/__init__.py +8 -0
- visual_verifier/py.typed +0 -0
- visual_verifier/reporting/__init__.py +17 -0
- visual_verifier/reporting/annotations.py +302 -0
- visual_verifier/reporting/console.py +266 -0
- visual_verifier/reporting/csv_report.py +98 -0
- visual_verifier/reporting/html_report.py +895 -0
- visual_verifier/reporting/json_report.py +133 -0
- visual_verifier/reporting/track_report.py +209 -0
- visual_verifier/targets/__init__.py +38 -0
- visual_verifier/targets/coverage.py +219 -0
- visual_verifier/targets/interpolation.py +172 -0
- visual_verifier/targets/loading.py +410 -0
- visual_verifier/targets/models.py +188 -0
- visual_verifier/targets/validation.py +216 -0
- visual_verifier/tracking/__init__.py +37 -0
- visual_verifier/tracking/analysis.py +337 -0
- visual_verifier/tracking/association.py +145 -0
- visual_verifier/tracking/events.py +203 -0
- visual_verifier/tracking/models.py +387 -0
- visual_verifier/tracking/tracker.py +584 -0
- visual_verifier/type_aliases.py +37 -0
- visual_verifier-0.3.0.dist-info/METADATA +544 -0
- visual_verifier-0.3.0.dist-info/RECORD +57 -0
- visual_verifier-0.3.0.dist-info/WHEEL +5 -0
- visual_verifier-0.3.0.dist-info/entry_points.txt +2 -0
- visual_verifier-0.3.0.dist-info/licenses/LICENSE +201 -0
- visual_verifier-0.3.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"""Expose the stable public interface for the Visual Verifier package.
|
|
2
|
+
|
|
3
|
+
Application code should import verification functions, configuration
|
|
4
|
+
objects, result models, and structured errors from this module rather than
|
|
5
|
+
depending on internal pipeline implementations.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from typing import Final
|
|
11
|
+
|
|
12
|
+
from visual_verifier.api import verify_image, verify_video
|
|
13
|
+
from visual_verifier.config.defaults import DEFAULT_DETECTION_CONFIG
|
|
14
|
+
from visual_verifier.config.targets import (
|
|
15
|
+
DEFAULT_TARGET_CONFIG,
|
|
16
|
+
TargetConfig,
|
|
17
|
+
)
|
|
18
|
+
from visual_verifier.config.tracking import (
|
|
19
|
+
DEFAULT_TRACKING_CONFIG,
|
|
20
|
+
TrackingConfig,
|
|
21
|
+
)
|
|
22
|
+
from visual_verifier.exceptions import (
|
|
23
|
+
ConfigurationError,
|
|
24
|
+
MediaCompatibilityError,
|
|
25
|
+
MediaReadError,
|
|
26
|
+
PolicyEvaluationError,
|
|
27
|
+
ReportWriteError,
|
|
28
|
+
TargetValidationError,
|
|
29
|
+
VerificationFailedError,
|
|
30
|
+
VisualVerifierError,
|
|
31
|
+
)
|
|
32
|
+
from visual_verifier.models import (
|
|
33
|
+
BoundingBox,
|
|
34
|
+
DetectionConfig,
|
|
35
|
+
FrameVerification,
|
|
36
|
+
MediaMetadata,
|
|
37
|
+
RegionMeasurement,
|
|
38
|
+
VerificationFailure,
|
|
39
|
+
VerificationResult,
|
|
40
|
+
VerificationStatus,
|
|
41
|
+
)
|
|
42
|
+
from visual_verifier.targets.models import (
|
|
43
|
+
Target,
|
|
44
|
+
TargetCoverage,
|
|
45
|
+
TargetSource,
|
|
46
|
+
TargetSummary,
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
__version__: Final[str] = "0.3.0"
|
|
50
|
+
|
|
51
|
+
__all__ = [
|
|
52
|
+
"DEFAULT_DETECTION_CONFIG",
|
|
53
|
+
"DEFAULT_TARGET_CONFIG",
|
|
54
|
+
"DEFAULT_TRACKING_CONFIG",
|
|
55
|
+
"BoundingBox",
|
|
56
|
+
"ConfigurationError",
|
|
57
|
+
"DetectionConfig",
|
|
58
|
+
"FrameVerification",
|
|
59
|
+
"MediaCompatibilityError",
|
|
60
|
+
"MediaMetadata",
|
|
61
|
+
"MediaReadError",
|
|
62
|
+
"PolicyEvaluationError",
|
|
63
|
+
"RegionMeasurement",
|
|
64
|
+
"ReportWriteError",
|
|
65
|
+
"Target",
|
|
66
|
+
"TargetConfig",
|
|
67
|
+
"TargetCoverage",
|
|
68
|
+
"TargetSource",
|
|
69
|
+
"TargetSummary",
|
|
70
|
+
"TargetValidationError",
|
|
71
|
+
"TrackingConfig",
|
|
72
|
+
"VerificationFailedError",
|
|
73
|
+
"VerificationFailure",
|
|
74
|
+
"VerificationResult",
|
|
75
|
+
"VerificationStatus",
|
|
76
|
+
"VisualVerifierError",
|
|
77
|
+
"__version__",
|
|
78
|
+
"verify_image",
|
|
79
|
+
"verify_video",
|
|
80
|
+
]
|
visual_verifier/api.py
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"""Expose the stable Python entry points for Visual Verifier."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Sequence
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
from visual_verifier.config.defaults import DEFAULT_DETECTION_CONFIG
|
|
9
|
+
from visual_verifier.config.targets import (
|
|
10
|
+
DEFAULT_TARGET_CONFIG,
|
|
11
|
+
TargetConfig,
|
|
12
|
+
)
|
|
13
|
+
from visual_verifier.config.tracking import (
|
|
14
|
+
DEFAULT_TRACKING_CONFIG,
|
|
15
|
+
TrackingConfig,
|
|
16
|
+
)
|
|
17
|
+
from visual_verifier.models import DetectionConfig, VerificationResult
|
|
18
|
+
from visual_verifier.pipeline.image_pipeline import verify_image_pipeline
|
|
19
|
+
from visual_verifier.pipeline.video_pipeline import verify_video_pipeline
|
|
20
|
+
from visual_verifier.targets.loading import load_targets
|
|
21
|
+
from visual_verifier.targets.models import Target
|
|
22
|
+
from visual_verifier.type_aliases import PathInput
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def verify_image(
|
|
26
|
+
reference: PathInput,
|
|
27
|
+
candidate: PathInput,
|
|
28
|
+
*,
|
|
29
|
+
output_dir: PathInput | None = None,
|
|
30
|
+
expect_processing: bool = True,
|
|
31
|
+
config: DetectionConfig = DEFAULT_DETECTION_CONFIG,
|
|
32
|
+
) -> VerificationResult:
|
|
33
|
+
"""Verify one candidate image against one reference image."""
|
|
34
|
+
|
|
35
|
+
return verify_image_pipeline(
|
|
36
|
+
reference,
|
|
37
|
+
candidate,
|
|
38
|
+
output_dir=output_dir,
|
|
39
|
+
expect_processing=expect_processing,
|
|
40
|
+
config=config,
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def verify_video(
|
|
45
|
+
reference: PathInput,
|
|
46
|
+
candidate: PathInput,
|
|
47
|
+
*,
|
|
48
|
+
output_dir: PathInput | None = None,
|
|
49
|
+
expect_processing_every_frame: bool = True,
|
|
50
|
+
save_annotated_video: bool = True,
|
|
51
|
+
save_html_report: bool = True,
|
|
52
|
+
config: DetectionConfig = DEFAULT_DETECTION_CONFIG,
|
|
53
|
+
enable_tracking: bool = True,
|
|
54
|
+
tracking_config: TrackingConfig = DEFAULT_TRACKING_CONFIG,
|
|
55
|
+
targets: PathInput | Sequence[Target] | None = None,
|
|
56
|
+
target_config: TargetConfig = DEFAULT_TARGET_CONFIG,
|
|
57
|
+
) -> VerificationResult:
|
|
58
|
+
"""Verify one candidate video and produce temporal integrity evidence.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
reference: Path to the original video.
|
|
62
|
+
candidate: Path to the processed video being verified.
|
|
63
|
+
output_dir: Optional directory for reports and annotated evidence.
|
|
64
|
+
expect_processing_every_frame: Require change in every frame.
|
|
65
|
+
save_annotated_video: Write annotated MP4 evidence when set.
|
|
66
|
+
save_html_report: Write ``index.html`` when output is set.
|
|
67
|
+
config: Region-detection and severity thresholds.
|
|
68
|
+
enable_tracking: Associate accepted regions through time.
|
|
69
|
+
tracking_config: Temporal association and lifecycle settings.
|
|
70
|
+
targets: Reviewed targets that must be anonymized, as a target
|
|
71
|
+
CSV path or a loaded sequence. These can change the verdict.
|
|
72
|
+
target_config: Target coverage and interpolation settings.
|
|
73
|
+
|
|
74
|
+
Returns:
|
|
75
|
+
Immutable verification result containing frame and track evidence.
|
|
76
|
+
|
|
77
|
+
Raises:
|
|
78
|
+
TargetValidationError: When a target file cannot be loaded.
|
|
79
|
+
"""
|
|
80
|
+
|
|
81
|
+
return verify_video_pipeline(
|
|
82
|
+
reference,
|
|
83
|
+
candidate,
|
|
84
|
+
output_dir=output_dir,
|
|
85
|
+
expect_processing_every_frame=expect_processing_every_frame,
|
|
86
|
+
save_annotated_video=save_annotated_video,
|
|
87
|
+
save_html_report=save_html_report,
|
|
88
|
+
config=config,
|
|
89
|
+
enable_tracking=enable_tracking,
|
|
90
|
+
tracking_config=tracking_config,
|
|
91
|
+
targets=_resolve_targets(targets),
|
|
92
|
+
target_config=target_config,
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def _resolve_targets(
|
|
97
|
+
targets: PathInput | Sequence[Target] | None,
|
|
98
|
+
) -> tuple[Target, ...]:
|
|
99
|
+
"""Accept either a target file path or already-loaded targets.
|
|
100
|
+
|
|
101
|
+
Args:
|
|
102
|
+
targets: Path to a target CSV file, a sequence of targets, or
|
|
103
|
+
``None``.
|
|
104
|
+
|
|
105
|
+
Returns:
|
|
106
|
+
The targets to verify against, empty when none were supplied.
|
|
107
|
+
|
|
108
|
+
Raises:
|
|
109
|
+
TargetValidationError: When a supplied file cannot be loaded.
|
|
110
|
+
"""
|
|
111
|
+
|
|
112
|
+
if targets is None:
|
|
113
|
+
return ()
|
|
114
|
+
if isinstance(targets, str | Path):
|
|
115
|
+
return load_targets(targets)
|
|
116
|
+
return tuple(targets)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
__all__ = [
|
|
120
|
+
"verify_image",
|
|
121
|
+
"verify_video",
|
|
122
|
+
]
|