Deep-TEMPEST 合成数据生成教程:用 folder_simulation.py 模拟 HDMI 电磁泄漏捕获
【免费下载链接】deep-tempestRestoration for TEMPEST images using deep-learning项目地址: https://gitcode.com/gh_mirrors/de/deep-tempest
Deep-TEMPEST 是一个基于深度学习的图像复原开源项目,专门用于修复从 HDMI 电磁泄漏中捕获的 TEMPEST 图像。本教程将手把手教你使用项目自带的folder_simulation.py 合成数据生成脚本,在本地批量模拟 HDMI 电磁泄漏捕获过程,为训练 DRUNet 复原模型准备高质量数据集。
什么是 Deep-TEMPEST 合成数据生成
TEMPEST(又称 Van Eck Phreaking)是一种通过接收显示器线缆泄漏的电磁信号来"隔空窥屏"的技术。Deep-TEMPEST 在经典工具 gr-tempest 的基础上引入深度学习,将模糊难辨的捕获图像修复成可读的屏幕内容。
但深度学习模型需要大量"原始图 + 退化捕获图"配对数据,真实电磁捕获成本高、耗时久。为此,项目提供了folder_simulation.py 合成数据生成工具:只需一个普通图片文件夹,就能在本地模拟完整的 HDMI 电磁泄漏捕获链路,自动生成大量配对数据。
为什么需要模拟 HDMI 电磁泄漏捕获
- 成本极低:无需天线、SDR 接收机或屏蔽实验室,普通电脑即可完成。
- 批量高效:对文件夹内所有图片自动处理,且已生成的图片会被自动跳过,支持增量续跑。
- 参数可控:可自由调整帧率、SDR 采样率、像素谐波、频率/相位误差、噪声强度等信道参数。
- 配对天然:原始图与模拟捕获图一一对应,正是监督学习最需要的数据形态。
环境准备:最快配置方法
首先克隆仓库:
git clone https://gitcode.com/gh_mirrors/de/deep-tempest然后安装 Python 依赖(numpy、scipy、scikit-image、PIL 等),推荐使用项目根目录的 requirements.txt 或 tempest_conda.yml 创建环境。脚本核心逻辑位于 end-to-end/folder_simulation.py,信道仿真依赖 end-to-end/utils/DTutils.py 中的 TMDS 编码与串行化函数。
配置模拟参数:编辑 tempest_simulation.json
所有模拟参数都集中在 end-to-end/options/tempest_simulation.json 中,只需修改两个路径和若干信道参数:
{ "paths": { "folder_original_images": "path/to/original_images", "folder_simulated_images": "path/to/simulated_images" }, "options": { "blanking": true, "frames_per_second": 60, "sdr_rate": 50e6, "interpolator": 10, "differential_signaling": true, "random": { "harmonics": [3], "sigma": null, "freq_error": [0, 15], "phase_error": [-1, 1] } } }| 参数 | 含义 | 新手建议 |
|---|---|---|
folder_original_images | 原始图片输入目录 | 放入任意 PNG/JPG 图片 |
folder_simulated_images | 模拟捕获图输出目录 | 会自动创建 |
blanking | 是否模拟行/场消隐 | 开启时图片需符合 VESA 分辨率 |
frames_per_second | 视频帧率 | 默认 60 即可 |
sdr_rate | SDR 采样率 | 默认 50 MHz |
interpolator | 模拟脉冲内插倍数 | 越大越接近真实模拟信号 |
differential_signaling | 差分信号模拟 | HDMI 实际使用差分,建议开启 |
harmonics | 像素谐波列表 | 常用第 3 谐波(324 MHz) |
sigma | 高斯噪声标准差 | 可设[a, b]随机取值,null表示无噪声 |
freq_error/phase_error | 频率/相位误差范围 | 模拟接收机失准,增强数据多样性 |
一键运行 folder_simulation.py 生成捕获图
在end-to-end/目录下执行:
python folder_simulation.py脚本会自动完成以下 HDMI 电磁泄漏捕获模拟流程:
- 读取图片:遍历输入文件夹中所有 png、jpg、jpeg、tif、bmp 等格式图片。
- TMDS 编码:将 RGB 像素按 HDMI 的 TMDS 协议编码(含消隐处理)。
- 位串行化:将编码后的比特流串行化,叠加三通道信号。
- 信道仿真:按像素谐波频率进行 AM 调制,叠加频率/相位误差与高斯噪声。
- SDR 采样:用设定的采样率重采样,模拟软件无线电接收。
- 保存结果:将信号实部与虚部归一化后保存为图像,并写入
logfiles/日志。
生成的数据如何用于 DRUNet 训练
合成数据生成完成后,原始图片作为高分辨率参考(H),模拟捕获图作为退化输入(L),即可交给 DRUNet 训练:
- 编辑 end-to-end/options/train_drunet.json,将
datasets.train.dataset_type设为"drunet"(合成数据模式;若用真实捕获数据则设为"drunet_finetune")。 - 将
dataroot_H指向原始图片目录,dataroot_L指向模拟捕获图目录。 - 运行训练脚本:
python main_train_drunet.py
训练完成后,可用 main_test_drunet.py 进行推理,用 tempest_evaluation.py 评估复原质量。
常见问题与排错技巧
- 提示找不到输入文件夹:检查 JSON 中
folder_original_images路径是否正确、是否存在。 - blanking 开启后图片变形:开启消隐模拟时,图片需符合 VESA 标准分辨率。
- 输出图看起来是彩色条纹:这是模拟捕获图的正常形态(实部与虚部分别映射到两个通道),正是 DRUNet 要学习复原的退化样式。
- 想批量生成多样化数据:适当增大
freq_error、phase_error范围,或让sigma随机取值,可显著提升数据多样性。
结语
通过 folder_simulation.py 合成数据生成脚本,你可以零硬件成本地模拟 HDMI 电磁泄漏捕获,为 Deep-TEMPEST 的图像复原研究源源不断地提供训练数据。从配置 tempest_simulation.json 到运行脚本、再到训练 DRUNet,整个链路清晰且完全可复现。现在就动手生成你的第一批合成捕获数据吧!
【免费下载链接】deep-tempestRestoration for TEMPEST images using deep-learning项目地址: https://gitcode.com/gh_mirrors/de/deep-tempest
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考