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:
- Testable methodology: Every finding is reproducible
- Known error rates: Confidence levels are explicit
- Peer review: Academic citations throughout
- 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eb9a5817a174a40c1d818a4ccdf356c700f43e0cf1b77f3beca6d03e250eefc2
|
|
| MD5 |
f4be22e27fa3cd584b983aa5891a2008
|
|
| BLAKE2b-256 |
d51d690952701aa00debe53a0de12316a268a5dc3d87ff8a10513190facf6177
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d2151ce03bfab7edf80c41757fa1810edc5d4a3d96398ebd12fcb6f996602bf
|
|
| MD5 |
aa63088b61f7b5b91eb62d80c72c8704
|
|
| BLAKE2b-256 |
232a7a6a96a0cb42c10db0aabad4503741ecb4d20ad5f7b6080c348de30714a1
|