Skip to main content

Epistemic media forensics toolkit - structured uncertainty for courts

Project description

Wu - Epistemic Media Forensics Toolkit

Detects manipulated media with structural uncertainty output. Hopefully it will be suitable for court admissibility (Daubert standard).

Developed by Zane Hambly.

Named after Chien-Shiung Wu (1912-1997), who disproved parity conservation and found asymmetries everyone assumed didn't exist.

Installation

pip install wu-forensics

Quick Start

# Analyse a photo
wu analyze suspicious_photo.jpg

# JSON output
wu analyze photo.jpg --json

# Batch analysis
wu batch *.jpg --output reports/

Python API

from wu import WuAnalyzer

analyzer = WuAnalyzer()
result = analyzer.analyze("photo.jpg")

print(result.overall)  # OverallAssessment.NO_ANOMALIES
print(result.to_json())

Detection Dimensions

Wu analyses images across multiple forensic dimensions:

Dimension What It Detects
metadata Device impossibilities, editing software, AI signatures, timestamp issues
visual/ELA Error Level Analysis - compression inconsistencies from splicing
quantization JPEG quality table mismatches between image regions
copy-move Duplicated regions within the same image
PRNU Photo Response Non-Uniformity - sensor fingerprint anomalies
lighting Inconsistent light direction across image regions
blockgrid JPEG block boundary misalignment

Benchmark Performance

Tested on standard forensic datasets (CASIA 2.0, CoMoFoD):

CASIA 2.0 (Splice Forgeries)

Dimension Precision Recall FPR
quantization 95% 39% 2%
visual/ELA 91% 41% 4%
prnu 67% 6% 3%
copy-move 57% 47% 36%
lighting 57% 64% 48%

Combined Detection

Strategy Precision Recall FPR Use Case
ELA + Quantization 91% 41% 4% Conservative/Legal
All dimensions 57% 90% 67% Screening

Key finding: ELA + Quantization provides 91% precision with only 4% false positive rate on splice forgeries.

CoMoFoD (Copy-Move Forgeries)

Copy-move within the same image is harder to detect (identical compression/quality):

Dimension Precision Recall FPR
prnu 61% 38% 24%
copy-move 50% 68% 68%

Note: CoMoFoD includes "similar but genuine objects" designed to challenge detectors.

Epistemic States

Unlike binary classifiers, Wu reports structured uncertainty:

State Meaning
CONSISTENT No anomalies detected (not proof of authenticity)
INCONSISTENT Clear contradictions found
SUSPICIOUS Anomalies that warrant investigation
UNCERTAIN Insufficient data for analysis

Court Admissibility

Wu is designed with the Daubert standard in mind:

  1. Testable methodology: Every finding is reproducible
  2. Known error rates: Confidence levels are explicit
  3. Peer review: Academic citations throughout
  4. General acceptance: Based on EXIF standards (JEITA CP-3451C)

References

  • Wu, C.S. et al. (1957). Experimental Test of Parity Conservation in Beta Decay. Physical Review, 105(4), 1413-1415.
  • Farid, H. (2016). Photo Forensics. MIT Press.
  • JEITA CP-3451C (Exif 2.32 specification)
  • Daubert v. Merrell Dow Pharmaceuticals, 509 U.S. 579 (1993)
  • Wen, B. et al. (2016). COVERAGE - A Novel Database for Copy-Move Forgery Detection. IEEE ICIP.
  • Dong, J. et al. (2013). CASIA Image Tampering Detection Evaluation Database. IEEE ChinaSIP.

AI Usage

This project uses Claude (Anthropic) to assist with summarising test results across 700+ test cases. All code, forensic methodology, and documentation are human-authored by me.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wu_forensics-1.1.0.tar.gz (79.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wu_forensics-1.1.0-py3-none-any.whl (87.9 kB view details)

Uploaded Python 3

File details

Details for the file wu_forensics-1.1.0.tar.gz.

File metadata

  • Download URL: wu_forensics-1.1.0.tar.gz
  • Upload date:
  • Size: 79.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for wu_forensics-1.1.0.tar.gz
Algorithm Hash digest
SHA256 eb9a5817a174a40c1d818a4ccdf356c700f43e0cf1b77f3beca6d03e250eefc2
MD5 f4be22e27fa3cd584b983aa5891a2008
BLAKE2b-256 d51d690952701aa00debe53a0de12316a268a5dc3d87ff8a10513190facf6177

See more details on using hashes here.

File details

Details for the file wu_forensics-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: wu_forensics-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 87.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for wu_forensics-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8d2151ce03bfab7edf80c41757fa1810edc5d4a3d96398ebd12fcb6f996602bf
MD5 aa63088b61f7b5b91eb62d80c72c8704
BLAKE2b-256 232a7a6a96a0cb42c10db0aabad4503741ecb4d20ad5f7b6080c348de30714a1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page