# 🎙️ 基于 AI 的音频篡改取证检测
**检测语音录音是否被篡改,指出具体篡改的秒数,并生成带有 SHA-256 哈希值的鉴定报告。**
[](https://tfg-audio-splicing-demo.streamlit.app/)
[](https://www.python.org/)
[](https://scikit-learn.org/)
[](https://librosa.org/)
[](https://streamlit.io/)
[-informational?style=flat-square)](#-结果)
[](LICENSE)
*如今任何人都可以篡改音频。但**要证明音频未被篡改,却并非易事。***
## ⚡ 30秒简介
上传一段录音,系统会告诉你**是否被篡改、具体在哪里以及置信度如何** —— 并将其作为可验证的文档提供给你。
此外,它还能**定位拼接点**:检测到的区间为 34.5 s – 38.0 s · 实际区间为 35.46 s – 37.13 s ✅
Análisis real: el pico de sospecha cae justo sobre el empalme.
## 🎯 用途
*音频拼接*(audio splicing)是指将一段语音片段插入到另一段录音中,以改变其原本表达的信息。常见于以下场景:
| 领域 | 实际问题 |
|:---|:---|
| ⚖️ **司法鉴定** | 作为证据提交的音频:完整吗?需要重点核查哪些秒数? |
| 🏦 **欺诈与身份** | 电话银行和客户验证中的语音冒充 |
| 📰 **媒体与核查** | 经过剪辑而改变原意的声明 |
| 🔐 **事件响应** | 快速筛查海量音视频材料 |
## 🔍 检测详情
可疑峰值**恰好出现在拼接处**。蓝色显示实际区间;红色显示系统预测的区间:
在频谱图上标记出的同一区域:
## 📄 带有证据保管链的鉴定报告
每次分析都会生成一份**附有原始音频 SHA-256 哈希签名**的 **PDF**。这样,输出结果就不再仅仅是一个预测,而是变成了**一份可验证的文档**,可纳入证据保管链(chain of custody)。
并附带一个**包含逐窗口结果的 CSV** 文件。
## 📊 结果
使用**按说话人分组的 GroupKFold** 进行验证:模型始终使用**从未见过的声音**进行评估。无数据泄露。
| 指标 | 数值 |
|:---|:---:|
| **各文件的 ROC-AUC** | **0.722** |
| **PR-AUC** | **0.896** |
| 种子间稳定性 | 0.71 ± 0.02 |
**检测器的表现完全符合理论预测:**
也就是说:**当片段来自其他声学环境时,它几乎能完美检测到**,这才是鉴定工作中真正重要的情形;同时,它也诚实地承认,在同一个音频内部是无法检测的。
**时间定位:** 严格操作阈值下为 38/90 · 筛查模式下为 78/90。
## ⚙️ 工作原理
每个窗口的 36 个描述符是 MFCC、ZCR、RMS、频谱质心、带宽和滚降系数;72 个 delta 衡量的是与前一个和后一个窗口的差异。0.50 的阈值是通过 **Youden 指数** 设定的,而选择 Random Forest 是因为它在数据量较少的情况下表现良好,**并且具有可解释性**。
**Delta 集中了模型 66% 的重要性** —— 并且置换重要性和 SHAP 的结果是一致的。也就是说:系统是基于正确的原因(即不连续性)做出的决定,而不是基于音频内容。
## 🧪 让我学到最多的部分
我的首次评估得到了 **0.84 的 F1 分数**。数字好看,但测量方法不对。
每段基础录音生成了三个几乎相同的文件。当将它们分配到训练集和测试集时,模型相当于在使用它已经知道来源的音频进行测试:这是影响 **63 个文件中 45 个**的**数据泄露**。
我没有掩盖这个问题,而是**记录了错误,修正了验证协议,并利用这一发现**证实了同一音频内的拼接无法使用此方法检测的假设。从那时起,我将工作重心转移到了确实可以检测到、并且在鉴定工作中至关重要的场景上。
这是该项目在方法论上的主要贡献。
## 🔬 评估的严谨性
这不是单一指标的单次实验:本代码库包含了 **11 项独立分析** (`analisis_avanzado/`)。
| 分析 | 检验内容 |
|:---|:---|
| **分组交叉验证** | 按说话人划分的 GroupKFold —— 无数据泄露 |
| **消融与基线测试** | 与基准相比,每个特征块的贡献 |
| **鲁棒性** | MP3 压缩、加性噪声和重采样 |
| **可解释性** | 置换重要性 **与** SHAP(结果一致) |
| **多种子** | 不同种子下结果的稳定性 |
| **跨来源细分** | 根据插入片段来源的性能表现 |
| **定位的 IoU** | 预测区间与 ground truth 之间的实际重叠度 |
| **外部验证** | 语料库之外的真实西班牙语语音备忘录 |
| **迁移能力** | PartialSpoof(合成语音)—— 已记录的局限性 |
## 🛡️ 鲁棒性
针对现实材料中出现的劣化情况进行了测试:
它能经受住现实材料中常见的压缩和噪声。**在电话频带(8 kHz)下会失效** —— 这是一个已被测量和记录的局限性,并未被掩盖。
## 🚀 安装与使用
要求 **Python 3.10 或更高版本**。
```
git clone https://github.com/AngelorumCSE/tfg-audio-splicing-demo.git
cd tfg-audio-splicing-demo
python3 -m pip install -r requirements.txt
python3 -m streamlit run app_tfg.py
```
**三种分析模式:**
| 模式 | 作用 |
|:---|:---|
| 📁 **预加载示例** | 带有已知 *ground truth* 的音频,用于验证系统 |
| 🎵 **自定义音频** | 上传任何录音,获取预测结果、区间和报告 |
| 📊 **批处理** | 包含多个音频的预测结果和 *篡改分数* 的汇总表格 |
**支持格式:** 推荐使用 WAV、FLAC 和 OGG。MP3 和 M4A 会在内部通过 FFmpeg 转换为 16 kHz 单声道 WAV。网页版限制文件大小为 20 MB,并仅分析前 120 秒。
## 📁 结构
```
app_tfg.py Aplicación Streamlit (pipeline de inferencia comentado)
Makefile Orquestador del pipeline completo (make all)
requirements.txt Dependencias con versiones fijadas
src/ Generación del dataset, extracción de características,
etiquetado, entrenamiento y evaluación
analisis_avanzado/ 11 scripts de análisis: validación cruzada, ablación,
robustez, explicabilidad (SHAP + permutación),
multisemilla, IoU de localización y transferencia
reconstruccion/ Reproducción del experimento cross-source (LibriSpeech)
tests/ Tests del pipeline
data/demo/ Ejemplos precargados de la aplicación
data/libri/ Conjunto cross-source derivado de LibriSpeech
data/processed/ Características por ventana
data/manifests/ Manifiestos con ground truth temporal
models/ Bundles entrenados (clasificador + columnas + umbral)
reports/ Métricas, gráficos y capturas del experimento
```
### 复现完整实验
整个 pipeline 使用 `make` 和固定种子进行编排,实现端到端运行:
```
make all # dataset → características → etiquetas → entrenamiento → evaluación
make test # tests del pipeline
make app # lanza la aplicación
make help # todos los objetivos disponibles
```
模型通过 `joblib` 持久化为**完整的 bundle**(分类器、预期列和阈值),从而确保应用程序和实验使用完全相同的配置。**这不是模拟演示:** 它加载的是同一个已训练的模型。
## 📚 数据
主要验证基于 **LibriSpeech**,其中**保留了 10 个声音专门用于插入操作**并按说话人进行评估,确保模型绝不会使用在训练中见过的声音进行测试。
## 🗺️ 与最先进技术的对比定位
现有方法要么**只检测不定位**,要么**能定位但需要海量语料库和庞大的模型**。本研究填补了这一实用空白:**使用轻量且可解释的模型定位拼接点**,在司法鉴定环境中具有可审计性。
## ⚠️ 适用范围与局限性
本系统是**辅助鉴定筛查的工具,绝非最终判决**。最终决定始终由人工做出。
**领域外情况:** 同一音频内部的拼接、窄带(8 kHz)以及部分合成语音。数据集规模适中,且篡改样本是在受控环境下生成的。
**未来工作方向:** 结合领域重校准的真实语料库 · 利用自相似性进行 *copy-move* 检测 · 重压缩和速度变化 · 在数据充足时与 *deep learning* 进行严格比较。
### 关于项目
**计算机工程** 学士毕业设计
Universidad Internacional de La Rioja (UNIR) · 2026年7月 · 成绩 **9.0**
**Ángel Carlos Soler Encinas** · 导师:Josefina Guerrero García
许可证 [MIT](LICENSE)
[](https://tfg-audio-splicing-demo.streamlit.app/)