erichare/verity

GitHub: erichare/verity

Verity 是一个开放的法庭科学表面比对引擎,通过校准的似然比替代黑盒匹配来量化弹头、弹壳和工具痕迹的证据强度。

Stars: 0 | Forks: 0

# Verity **一个开放、领域通用的法庭科学表面比对引擎 —— 提供透明且经过校准的_似然比_,而非黑盒“匹配”。** [![License: MIT/Apache-2.0](https://img.shields.io/badge/license-MIT%20%2F%20Apache--2.0-blue.svg)](#license) [![Live: verity.codes](https://img.shields.io/badge/live-verity.codes-22d3ee.svg)](https://verity.codes) [![API](https://img.shields.io/badge/API-reference-818cf8.svg)](https://api.verity.codes/scalar) [![Status: early](https://img.shields.io/badge/status-early%20%2F%20active-f59e0b.svg)](#status--roadmap) ![Rust](https://img.shields.io/badge/Rust-core-000000.svg?logo=rust) ![Python](https://img.shields.io/badge/Python-engine-3776AB.svg?logo=python&logoColor=white) ![R](https://img.shields.io/badge/R-binding-276DC3.svg?logo=r&logoColor=white) [**在线应用**](https://verity.codes) · [工作原理](https://verity.codes/method) · [设计初衷](https://verity.codes/why) · [文档](https://verity.codes/docs) · [API 参考](https://api.verity.codes/scalar) ![Verity — forensic marks, weighed as evidence](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/c62289bc87101333.svg)
Verity 比较直接来自 [X3P](https://www.iso.org/standard/62395.html) 文件 (ISO 25178-72) 的 3D 表面形貌扫描 —— 包括弹头阳膛表面、弹壳底火台印痕、线条状和凹陷状工具痕迹,以及(未来计划支持的)鞋印和断裂表面。它将领域通用的表面比对与**透明、经过校准的似然比决策层**及区域级归因相结合。该机器从不报告“匹配”;它报告的是一个*可审计的证据权重*,并在指定的数据集上进行表征。 ## 设计初衷 如今的法庭科学枪械/工具痕迹比对,要么是主观的检验员判断,要么是专有的黑盒关联 (IBIS),而开放的工具只是一堆*特定领域*的 R 包,缺乏统一、可部署的平台。法院对未经证实的模式匹配证词越来越持怀疑态度 (*Abruquah v. Maryland*, 2023; FRE 702 的 2023 年修正案),并且**目前还没有任何学科具有充分表征的错误率** (Cuellar et al., 2024)。Verity 的押注是:**一种通用、经过校准、可解释的方法** —— 首先在基准真相最可靠的地方(枪械)得到证明,然后跨领域转移。 **设计原则** - **由统计学决定,而非黑盒。** 一种表示产生一个*分数*;一个透明且经验上限的校准将该分数转换为可报告的似然比。无论分数是如何计算的,该报告都是可解释的 —— 这就是抵御黑盒的防火墙。 - **结构化的可复现性。** 确定性、版本锁定、内容哈希。 - **开放且语言无关。** 基于 X3P 标准;MIT/Apache-2.0。 ## 你会得到什么 不是一个裁定 —— 而是一份经过校准的 **`ComparisonReport`**:一个带有其文字等价物和**可信区间**的似然比(对参考进行聚类 bootstrap,因此 LR 带有自身的校准不确定性),在*指定的*参考人群上表征的成本 (**Cllr**),关于数据能支持多强声明的**经验上限**(受 ELUB 启发),以及驱动该分数的**区域级归因**。 ``` { "likelihood_ratio": 146.0, "log10_lr": 2.16, "verbal": "moderately strong support for same source", "lr_bound_log10": 2.16, // a percentile credible interval on log10 LR — the reference is bootstrapped (clustered // by source/barrel) and refit, so the number carries its own calibration uncertainty "log10_lr_ci_lo": 1.74, "log10_lr_ci_hi": 2.16, "lr_ci_method": "bootstrap-clustered", // reference diagnostics are the *in-sample* fit of the named reference; the honest // validation figure is the source-disjoint Cllr ≈ 0.19 pooled (≈ 0.11 on Hamby-252 // alone) — every number, with its protocol, lives in docs/headline-numbers.md "reference": { "name": "pooled bullet-land", "n_km": 146, "n_knm": 1755, "auc": 0.984, "cllr": 0.193, "cllr_min": 0.168 }, "attribution": [ /* the matched regions — the explanation */ ], "scope_note": "Not a claim about the error rate of examination, which remains unknown." } ``` ## 方法 —— 一致匹配区域 (CMR) CMR 将 Song 的**一致匹配单元**(标准的弹壳方法)从 2D 单元和固定的平移+旋转推广到**任意变换组**下的**任意维度区域** —— 因此一个算法可以对线条状、凹陷状和(研究中的)断裂痕迹进行评分。将痕迹划分为多个区域,将每个区域与另一个痕迹进行配准,并计算在同一个共同几何结构上达成一致的区域数量。一致的区域*即是*归因图。 | 形态 | 区域 | 变换组 | 归约为 | |------------|---------------------|---------------------------|-------------------| | 线条状 | 1D 轮廓窗口 | 1D 平移 | ≈ Chumbley / CMS | | 凹陷状 | 2D 网格单元 | 2D 平移+旋转 | ≈ CMC | | 断裂状 | 3D 网格面片 | 3D 刚体姿态 | (研究中) | 完整说明:[`docs/congruent-matching-regions.md`](docs/congruent-matching-regions.md)。 ## 验证(实事求是) - **来源分离、第一性原理(无学习表示)。** 在枪管分离协议下(没有任何枪管同时出现在训练集和测试集中;按研究报告,从不跨品牌混合),生产级 `diag_contrast` 评分器在留出的枪管上取得了 **AUC ≈ 1.00 且测试 Cllr ≈ 0.11(在 Hamby-252 上)**(这是最强的单项研究;四项研究混合后的来源分离 Cllr ≈ 0.19,且冻结的 `bullets-v1` 基准测试复现为 ≈ 0.21),并且在四项 NBTRD 子弹研究(Hamby-252/173, PGPD Beretta, Phoenix Ruger)中,**测试 Cllr ≈ 0.11–0.35,AUC ≈ 0.97–1.00** —— 这完全基于测量学,提供了一种信息丰富且经过校准的证据权重。(`Cllr < 1` = 提供有效信息;`Cllr − Cllr_min` 的差距是来源分离拆分所暴露的校准损失,从而正面回应了 Cuellar et al. 的批评。)该评分器是通过显式的枪管分离消融(`verity-margin`)被选中,而非第一阶段的 `diag_mean` 或多变量融合 —— 坦白说,该消融重用了与本次验证相同的四项研究,因此在未接触过的数据上进行一次性确认是下一个里程碑(见白皮书的局限性);`verity-validation-report` 会重新生成完整的表征 —— Tippett、DET、校准以及来源分离总结 —— 作为法庭就绪的 PDF。经过训练的 `bulletxtrctr` 随机森林专家模型在运行相同协议后,在 Hamby-252 上达到了 **Cllr ≈ 0.06** —— 专家模型在其主场上依然领先;Verity 在子弹方面的贡献在于经过校准、有边界、可部署的 LR 层,而不是一个更好的匹配器。 - **学习表示(Phase-2b)。** 在 210 个 Hamby 扫描上进行了枪管分离训练,它**并没有超越互相关基准** —— 它过拟合了(留出集 AUC 崩溃至 ≈ 0.67)。合成测试证实,如果给足信号,流水线*确实能*学习:这是一个**数据限制,而非缺陷**。下一步:扩大数据集并重新测试。 这里没有任何内容是对法庭科学检验错误率的声明,该错误率目前仍然未知。 ## 仓库结构 一个多语言 monorepo:一个 Rust 编解码核心,轻量级的语言绑定,以及构建在其上的 Python 科学计算与服务栈。 | 包 | 语言 | 作用 | |---|---|---| | [`crates/verity-x3p`](crates/verity-x3p) | Rust | 原生 X3P (ISO 25178-72) 读取器/写入器 —— 该格式的唯一事实来源。 | | [`bindings/python`](bindings/python) | PyO3 + NumPy | 核心的 Python 绑定(位级一致的 I/O)。 | | [`bindings/r/verityx3p`](bindings/r/verityx3p) | extendr | 核心的 R 绑定(兼容 `x3ptools` 的布局)。 | | [`services/engine`](services/engine) | Python | 测量学预处理、配准、CMR、校准的 LR 决策层。 | | [`services/api`](services/api) | FastAPI | 提供 `ComparisonReport` 服务的比对 HTTP API。 | | [`services/catalog`](services/catalog) | Python | 标准化目录 + 内容寻址存储 + 数据摄取 (NBTRD/Figshare)。 | | [`services/web`](services/web) | Next.js | [verity.codes](https://verity.codes) 和交互式比对 UI。 | ## 快速入门 ### X3P 编解码器 —— Rust / Python / R ``` use verity_x3p::{read_x3p, write_x3p, WriteOptions}; let surface = read_x3p("scan.x3p")?; // verifies the stored MD5 write_x3p(&surface, "copy.x3p", &WriteOptions::default())?; ``` ``` import verity_x3p s = verity_x3p.read_x3p("scan.x3p") # s.data, s.mask are (ny, nx) NumPy arrays verity_x3p.write_x3p(s, "copy.x3p", z_type="D") ``` ``` library(verityx3p) s <- read_x3p("scan.x3p") # s$surface is an nx-by-ny matrix write_x3p(s, "copy.x3p") ``` 从任何绑定写入的文件在其他绑定中都能**位级一致**地读回。 ### 通过 HTTP 比较两个痕迹 ``` curl -s -X POST https://api.verity.codes/compare \ -F domain=striated \ -F mark_a=@bulletA_land1.x3p -F mark_a=@bulletA_land2.x3p \ -F mark_b=@bulletB_land1.x3p -F mark_b=@bulletB_land2.x3p ``` 请查看完整的 **[文档](https://verity.codes/docs)** 和交互式 **[API 参考](https://api.verity.codes/scalar)**。 ### 开发 ``` cargo test -p verity-x3p # the Rust core cd services/engine && uv venv --python 3.12 && uv pip install -e ".[dev]" && uv run pytest cd services/api && uv run --extra dev verity-api # API on :8000 cd services/web && pnpm install && pnpm dev # web on :3000 ``` 部署(Vercel + 用于 API 的容器托管)已在 [`DEPLOY.md`](DEPLOY.md) 中记录。 ## 状态与路线图 - ✅ **`verity-x3p`** 原生编解码器 + Python/R 绑定(位级一致的往返)。 - ✅ **引擎**:ISO 16610 预处理、配准、校准的 LR 决策层、CMR;来源分离的 Hamby 验证。 - ✅ **平台**:比对 API + Web 应用,已在 verity.codes 上线。 - 🔜 扩充子弹/弹壳/工具痕迹数据集(NBTRD 收集)并重新测试学习表示;在 Fadul 上实现 CMR-2D → CMC 的一致性;TypeScript/Swift/Java 编解码绑定。 ## 许可证 根据您的选择,在 [**MIT**](LICENSE-MIT) 或 [**Apache-2.0**](LICENSE-APACHE) 双重许可下授权。捆绑的参考数据带有其各自的上游归属 —— 请参阅 [`services/api/verity_api/references/NOTICE.md`](services/api/verity_api/references/NOTICE.md)。
标签:Python, R, Rust, 三维形貌分析, 似然比, 可视化界面, 司法科学, 无后门, 网络流量审计, 逆向工具