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.
Files changed (57) hide show
  1. visual_verifier/__init__.py +80 -0
  2. visual_verifier/__main__.py +6 -0
  3. visual_verifier/api.py +122 -0
  4. visual_verifier/cli.py +883 -0
  5. visual_verifier/config/__init__.py +15 -0
  6. visual_verifier/config/defaults.py +45 -0
  7. visual_verifier/config/targets.py +101 -0
  8. visual_verifier/config/tracking.py +97 -0
  9. visual_verifier/demo.py +310 -0
  10. visual_verifier/detection/__init__.py +29 -0
  11. visual_verifier/detection/filtering.py +203 -0
  12. visual_verifier/detection/region_extraction.py +537 -0
  13. visual_verifier/detection/severity.py +274 -0
  14. visual_verifier/exceptions.py +108 -0
  15. visual_verifier/integrations/__init__.py +8 -0
  16. visual_verifier/media/__init__.py +29 -0
  17. visual_verifier/media/metadata.py +307 -0
  18. visual_verifier/media/normalization.py +243 -0
  19. visual_verifier/media/thumbnails.py +90 -0
  20. visual_verifier/media/video_reader.py +320 -0
  21. visual_verifier/media/video_writer.py +127 -0
  22. visual_verifier/metrics/__init__.py +51 -0
  23. visual_verifier/metrics/geometry.py +209 -0
  24. visual_verifier/metrics/pixel.py +345 -0
  25. visual_verifier/metrics/sharpness.py +249 -0
  26. visual_verifier/models.py +537 -0
  27. visual_verifier/pipeline/__init__.py +9 -0
  28. visual_verifier/pipeline/image_pipeline.py +502 -0
  29. visual_verifier/pipeline/video_pipeline.py +1232 -0
  30. visual_verifier/policies/__init__.py +8 -0
  31. visual_verifier/py.typed +0 -0
  32. visual_verifier/reporting/__init__.py +17 -0
  33. visual_verifier/reporting/annotations.py +302 -0
  34. visual_verifier/reporting/console.py +266 -0
  35. visual_verifier/reporting/csv_report.py +98 -0
  36. visual_verifier/reporting/html_report.py +895 -0
  37. visual_verifier/reporting/json_report.py +133 -0
  38. visual_verifier/reporting/track_report.py +209 -0
  39. visual_verifier/targets/__init__.py +38 -0
  40. visual_verifier/targets/coverage.py +219 -0
  41. visual_verifier/targets/interpolation.py +172 -0
  42. visual_verifier/targets/loading.py +410 -0
  43. visual_verifier/targets/models.py +188 -0
  44. visual_verifier/targets/validation.py +216 -0
  45. visual_verifier/tracking/__init__.py +37 -0
  46. visual_verifier/tracking/analysis.py +337 -0
  47. visual_verifier/tracking/association.py +145 -0
  48. visual_verifier/tracking/events.py +203 -0
  49. visual_verifier/tracking/models.py +387 -0
  50. visual_verifier/tracking/tracker.py +584 -0
  51. visual_verifier/type_aliases.py +37 -0
  52. visual_verifier-0.3.0.dist-info/METADATA +544 -0
  53. visual_verifier-0.3.0.dist-info/RECORD +57 -0
  54. visual_verifier-0.3.0.dist-info/WHEEL +5 -0
  55. visual_verifier-0.3.0.dist-info/entry_points.txt +2 -0
  56. visual_verifier-0.3.0.dist-info/licenses/LICENSE +201 -0
  57. 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
+ ]
@@ -0,0 +1,6 @@
1
+ """Run the Visual Verifier command-line interface as a module."""
2
+
3
+ from visual_verifier.cli import main
4
+
5
+ if __name__ == "__main__":
6
+ raise SystemExit(main())
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
+ ]