AngelorumCSE/tfg-audio-splicing-demo

GitHub: AngelorumCSE/tfg-audio-splicing-demo

基于 Random Forest 的音频拼接篡改检测系统,能定位篡改秒数并生成带 SHA-256 哈希的 PDF 鉴定报告,适用于司法取证和反欺诈筛查。

Stars: 1 | Forks: 0

# 🎙️ 基于 AI 的音频篡改取证检测 **检测语音录音是否被篡改,指出具体篡改的秒数,并生成带有 SHA-256 哈希值的鉴定报告。** [![在线演示](https://img.shields.io/badge/▶_PROBAR_LA_DEMO-online-2ea44f?style=for-the-badge)](https://tfg-audio-splicing-demo.streamlit.app/) [![Python](https://img.shields.io/badge/Python-3.10-3776AB?style=flat-square&logo=python&logoColor=white)](https://www.python.org/) [![scikit-learn](https://img.shields.io/badge/scikit--learn-Random_Forest-F7931E?style=flat-square&logo=scikitlearn&logoColor=white)](https://scikit-learn.org/) [![librosa](https://img.shields.io/badge/librosa-audio-8A2BE2?style=flat-square)](https://librosa.org/) [![Streamlit](https://img.shields.io/badge/Streamlit-desplegado-FF4B4B?style=flat-square&logo=streamlit&logoColor=white)](https://streamlit.io/) [![ROC-AUC](https://img.shields.io/badge/ROC--AUC-0.72_(0.999_caso_fuerte)-informational?style=flat-square)](#-结果) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](LICENSE) *如今任何人都可以篡改音频。但**要证明音频未被篡改,却并非易事。***
## ⚡ 30秒简介 上传一段录音,系统会告诉你**是否被篡改、具体在哪里以及置信度如何** —— 并将其作为可验证的文档提供给你。
Comparación: el mismo audio antes y después de ser manipulado
此外,它还能**定位拼接点**:检测到的区间为 34.5 s – 38.0 s · 实际区间为 35.46 s – 37.13 s
Demostración: análisis de un audio manipulado, curva de sospecha y localización del empalme
Análisis real: el pico de sospecha cae justo sobre el empalme.
## 🎯 用途 *音频拼接*(audio splicing)是指将一段语音片段插入到另一段录音中,以改变其原本表达的信息。常见于以下场景: | 领域 | 实际问题 | |:---|:---| | ⚖️ **司法鉴定** | 作为证据提交的音频:完整吗?需要重点核查哪些秒数? | | 🏦 **欺诈与身份** | 电话银行和客户验证中的语音冒充 | | 📰 **媒体与核查** | 经过剪辑而改变原意的声明 | | 🔐 **事件响应** | 快速筛查海量音视频材料 |
Anatomía del audio splicing: qué es, por qué es difícil y por qué es abordable
## 🔍 检测详情 可疑峰值**恰好出现在拼接处**。蓝色显示实际区间;红色显示系统预测的区间:
Curva temporal del score de sospecha
在频谱图上标记出的同一区域:
Espectrograma con la zona manipulada marcada
## 📄 带有证据保管链的鉴定报告 每次分析都会生成一份**附有原始音频 SHA-256 哈希签名**的 **PDF**。这样,输出结果就不再仅仅是一个预测,而是变成了**一份可验证的文档**,可纳入证据保管链(chain of custody)。
Cadena de custodia: del audio original al informe forense con hash SHA-256
Informe forense generado automáticamente
并附带一个**包含逐窗口结果的 CSV** 文件。 ## 📊 结果 使用**按说话人分组的 GroupKFold** 进行验证:模型始终使用**从未见过的声音**进行评估。无数据泄露。
| 指标 | 数值 | |:---|:---:| | **各文件的 ROC-AUC** | **0.722** | | **PR-AUC** | **0.896** | | 种子间稳定性 | 0.71 ± 0.02 |
**检测器的表现完全符合理论预测:**
Resultados por tipo de empalme: 0.999 cambio de entorno, 0.634 otra voz, 0.534 mismo origen
也就是说:**当片段来自其他声学环境时,它几乎能完美检测到**,这才是鉴定工作中真正重要的情形;同时,它也诚实地承认,在同一个音频内部是无法检测的。 **时间定位:** 严格操作阈值下为 38/90 · 筛查模式下为 78/90。 ## ⚙️ 工作原理
Pipeline: de la señal a la decisión
每个窗口的 36 个描述符是 MFCC、ZCR、RMS、频谱质心、带宽和滚降系数;72 个 delta 衡量的是与前一个和后一个窗口的差异。0.50 的阈值是通过 **Youden 指数** 设定的,而选择 Random Forest 是因为它在数据量较少的情况下表现良好,**并且具有可解释性**。 **Delta 集中了模型 66% 的重要性** —— 并且置换重要性和 SHAP 的结果是一致的。也就是说:系统是基于正确的原因(即不连续性)做出的决定,而不是基于音频内容。 ## 🧪 让我学到最多的部分 我的首次评估得到了 **0.84 的 F1 分数**。数字好看,但测量方法不对。 每段基础录音生成了三个几乎相同的文件。当将它们分配到训练集和测试集时,模型相当于在使用它已经知道来源的音频进行测试:这是影响 **63 个文件中 45 个**的**数据泄露**。
El espejismo y la realidad: F1 de 0.84 in-sample frente a 0.31 out-of-fold
我没有掩盖这个问题,而是**记录了错误,修正了验证协议,并利用这一发现**证实了同一音频内的拼接无法使用此方法检测的假设。从那时起,我将工作重心转移到了确实可以检测到、并且在鉴定工作中至关重要的场景上。 这是该项目在方法论上的主要贡献。 ## 🔬 评估的严谨性 这不是单一指标的单次实验:本代码库包含了 **11 项独立分析** (`analisis_avanzado/`)。 | 分析 | 检验内容 | |:---|:---| | **分组交叉验证** | 按说话人划分的 GroupKFold —— 无数据泄露 | | **消融与基线测试** | 与基准相比,每个特征块的贡献 | | **鲁棒性** | MP3 压缩、加性噪声和重采样 | | **可解释性** | 置换重要性 **与** SHAP(结果一致) | | **多种子** | 不同种子下结果的稳定性 | | **跨来源细分** | 根据插入片段来源的性能表现 | | **定位的 IoU** | 预测区间与 ground truth 之间的实际重叠度 | | **外部验证** | 语料库之外的真实西班牙语语音备忘录 | | **迁移能力** | PartialSpoof(合成语音)—— 已记录的局限性 | ## 🛡️ 鲁棒性 针对现实材料中出现的劣化情况进行了测试:
Robustez frente a compresión MP3, ruido y remuestreo
它能经受住现实材料中常见的压缩和噪声。**在电话频带(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**(分类器、预期列和阈值),从而确保应用程序和实验使用完全相同的配置。**这不是模拟演示:** 它加载的是同一个已训练的模型。 ## 📚 数据
Cuatro conjuntos de datos, cuatro papeles
主要验证基于 **LibriSpeech**,其中**保留了 10 个声音专门用于插入操作**并按说话人进行评估,确保模型绝不会使用在训练中见过的声音进行测试。 ## 🗺️ 与最先进技术的对比定位
Estado del arte: cuatro familias según qué localizan y cuánto pesan sus modelos
现有方法要么**只检测不定位**,要么**能定位但需要海量语料库和庞大的模型**。本研究填补了这一实用空白:**使用轻量且可解释的模型定位拼接点**,在司法鉴定环境中具有可审计性。 ## ⚠️ 适用范围与局限性 本系统是**辅助鉴定筛查的工具,绝非最终判决**。最终决定始终由人工做出。 **领域外情况:** 同一音频内部的拼接、窄带(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://img.shields.io/badge/▶_PROBAR_LA_DEMO-2ea44f?style=for-the-badge)](https://tfg-audio-splicing-demo.streamlit.app/)
标签:Apex, Kubernetes, Streamlit, 人工智能, 数字取证, 机器学习, 深度伪造检测, 用户模式Hook绕过, 自动化脚本, 访问控制, 逆向工具, 音频处理