Update README files
This commit is contained in:
parent
da5489fd20
commit
e9f5115ced
111
README.md
111
README.md
|
@ -1,99 +1,84 @@
|
||||||
# Deep-tempest 2023
|
# Deep-tempest: Using Deep Learning to Eavesdrop on HDMI from its Unintended Electromagnetic Emanations
|
||||||
|
|
||||||
<img src="deep-tempest.png"/>
|
<img src="deep-tempest.png"/>
|
||||||
|
|
||||||
Este trabajo corresponde al Proyecto de Fin de Carrera titulado *deep-tempest* de la carrera Ingeniería Eléctrica para la Facultad de Ingeniería de la Universidad de la República.
|
## Summary
|
||||||
|
|
||||||
Integrantes:
|
The [**gr-tempest**](https://github.com/git-artes/gr-tempest) project (*monitor image espionage in GNU Radio*) is extended using *deep learning* to improve the quality of the spied images. The main goal is to recover the text present in the image captured by the espionage system.
|
||||||
- Santiago Fernández
|
|
||||||
- Emilio Martínez
|
|
||||||
- Gabriel Varela
|
|
||||||
|
|
||||||
Tutores:
|
## Data
|
||||||
- Federico La Rocca
|
|
||||||
- Pablo Musé
|
|
||||||
|
|
||||||
## Resumen
|
The data used can be found in [this link](https://www.dropbox.com/scl/fi/7r2o8nbws45q30j5lkxjb/deeptempest_dataset.zip?rlkey=w7jvw275hu8tsyflgdkql7l1c&st=e8rdldz0&dl=0) within a ZIP file (~7GB). After unzipping, you will find synthetic and captured images used for experiments, training, and evaluation during the work.
|
||||||
|
|
||||||
Se extiende el proyecto [**gr-tempest**](https://github.com/git-artes/gr-tempest) (*espionaje a imágenes de monitores en GNU Radio*) utilizando *deep learning* para mejorar la calidad de las imágenes espiadas. El objetivo principal es recuperar el texto presente en la imagen capturada por el sistema espía.
|
The structure of the directories containing the data is **different** for **synthetic data** compared to **captured data**:
|
||||||
|
|
||||||
|
### Synthetic data
|
||||||
|
|
||||||
## Resultados
|
* *ground-truth* (directory with reference/monitor view images)
|
||||||
|
- image1.png
|
||||||
<img src="resultados.png"/>
|
|
||||||
|
|
||||||
Se evalúan las métricas **PSNR**, **SSIM**, **edgeJaccard** (*índice Jaccard entre los bordes de la referencia y de la reconstrucción*), **CER** y **WER** (*tasa de error en caracteres y palabras*) sobre la base de datos de capturas reales (1302 imágenes) son los de la siguiente tabla:
|
|
||||||
|
|
||||||
<img src="tabla_resultados.png" width="720px"/>
|
|
||||||
|
|
||||||
Más ejemplos se pueden ver en el directorio [deep-tempest_ejemplos](deep-tempest_ejemplos).
|
|
||||||
|
|
||||||
También se pueden visualizar desde [este enlace](https://finguy-my.sharepoint.com/:f:/g/personal/emilio_martinez_fing_edu_uy/Eo_2mmNwq0lHguqmzjq7MyABb9pBbuDV3_EPOA9xGC-7vg?e=kevSbM) *(no estable)*. Aquí las imágenes están estructuradas con el siguiente orden:
|
|
||||||
|
|
||||||
1. Imagen original
|
|
||||||
2. Imagen espiada (_gr-tempest2.0_)
|
|
||||||
3. Imagen inferida por método _End-to-End_
|
|
||||||
4. Imagen inferida por método de _umbralización por máxima entropía_
|
|
||||||
|
|
||||||
## Datos
|
|
||||||
|
|
||||||
Los datos utilizados [este enlace](https://finguy-my.sharepoint.com/:u:/g/personal/emilio_martinez_fing_edu_uy/EZ8KpQHJ7GZBvMRsBMtNj6gBkC3Fvivuz87-1fiQS6WKiw?e=LVjajm) dentro de un archivo ZIP (~7GB). Al descomprimirlo se pueden encontrar las imágenes sintéticas y capturadas realizadas para los experimentos, entrenamiento y evaluación durante el trabajo.
|
|
||||||
|
|
||||||
La **estructura** de los directorios es **diferente** para los **datos sintéticos** es diferente al de los **capturados**:
|
|
||||||
|
|
||||||
### Datos sintéticos
|
|
||||||
|
|
||||||
* *ground-truth* (directorio con imágenes de referencia/vistas del monitor)
|
|
||||||
- imagen1.png
|
|
||||||
- ...
|
- ...
|
||||||
- imagenN.png
|
- imageN.png
|
||||||
|
|
||||||
* *simulations* (directorio con imágenes sintéticas de degradación/captura)
|
* *simulations* (directory with synthetic degradation/capture images)
|
||||||
- imagen1.png
|
- image1_synthetic.png
|
||||||
- ...
|
- ...
|
||||||
- imagenN.png
|
- imageN_synthetic.png
|
||||||
|
|
||||||
### Datos reales
|
### Real data
|
||||||
|
|
||||||
* *Imagen 1* (directorio con capturas de imagen1.png)
|
- image1.png (*image1 ground-truth*)
|
||||||
- captura1_imagen1.png
|
- ...
|
||||||
|
- imageN.png (*imageN ground-truth*)
|
||||||
|
|
||||||
|
* *Image 1* (directory with captures of *image1.png*)
|
||||||
|
- capture1_image1.png
|
||||||
- ...
|
- ...
|
||||||
- capturaM_imagen1.png
|
- captureM_image1.png
|
||||||
|
|
||||||
* ...
|
* ...
|
||||||
|
|
||||||
* *Imagen N* (directorio con capturas de imagenN.png)
|
* *Image N* (directory with captures of *image1.png*)
|
||||||
- captura1_imagenN.png
|
- capture1_imageN.png
|
||||||
- ...
|
- ...
|
||||||
- capturaM_imagenN.png
|
- captureM_imageN.png
|
||||||
|
|
||||||
- imagen1.png
|
## Code and Requirements
|
||||||
- ...
|
|
||||||
- imagenN.png
|
|
||||||
|
|
||||||
## Código y requerimientos
|
Clone the repository:
|
||||||
|
|
||||||
Clonar el repositorio (solicitar acceso al mismo):
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
git clone https://gitlab.fing.edu.uy/jorge.varela/deep-tempest.git
|
git clone https://github.com/emidan19/deep-tempest.git
|
||||||
```
|
```
|
||||||
|
|
||||||
En cada una de los directorios se tiene una guía de cómo ejecutar las pruebas/entrenamiento/experimentos correspondientes.
|
Both [gr-tempest](./gr-tempest/) and [end-to-end](./end-to-end/) folders contains a guide on how to execute the corresponding files for image capturing, inference and train the deep learning architecture based on DRUNet from [KAIR](https://github.com/cszn/KAIR/tree/master) image restoration repository.
|
||||||
|
|
||||||
El código esta escrito en lenguaje Python versión 3.10, donde se utilizó ambientes de Anaconda. Para replicar el ambiente de trabajo crear uno nuevo con las bibliotecas del _requirements.txt_:
|
The code is written in Python version 3.10, using Anaconda environments. To replicate the working environment, create a new one with the libraries listed in [*requirements.txt*](./requirements.txt):
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
conda create --name deeptempest --file requirements.txt
|
conda create --name deeptempest --file requirements.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
Activarlo con:
|
Activate it with:
|
||||||
```shell
|
```shell
|
||||||
conda activate deeptempest
|
conda activate deeptempest
|
||||||
```
|
```
|
||||||
|
|
||||||
## Referencias
|
Regarding installations with GNU Radio, **it is necessary to follow the [gr-tempest](https://github.com/git-artes/gr-tempest) instructions** (detailed below) and then run the following flowcharts that activate *hierblocks*:
|
||||||
|
|
||||||
- [gr-tempest](https://github.com/git-artes/gr-tempest)
|
Finally run the flowgraph [deep-tempest_example.grc](~/gr-tempest/examples/deep-tempest_example.grc) to capture the monitor images and be able to recover them with better quality.
|
||||||
- [Deep Plug and Play Image Restoration](https://github.com/cszn/DPIR/tree/master) (DPIR)
|
|
||||||
- Maxima entropía [código en Python](https://github.com/imadtoubal/Maximum-Entropy-Thresholding-Implementation-in-Python/blob/master/entropy_thresholding.ipynb)
|
## References
|
||||||
|
```BibTex
|
||||||
|
@INPROCEEDINGS{larroca2022gr_tempest,
|
||||||
|
author={Larroca, Federico and Bertrand, Pablo and Carrau, Felipe and Severi, Victoria},
|
||||||
|
booktitle={2022 Asian Hardware Oriented Security and Trust Symposium (AsianHOST)},
|
||||||
|
title={gr-tempest: an open-source GNU Radio implementation of TEMPEST},
|
||||||
|
year={2022},
|
||||||
|
doi={10.1109/AsianHOST56390.2022.10022149}}
|
||||||
|
|
||||||
|
@article{zhang2021plug, % DPIR & DRUNet & IRCNN
|
||||||
|
title={Plug-and-Play Image Restoration with Deep Denoiser Prior},
|
||||||
|
author={Zhang, Kai and Li, Yawei and Zuo, Wangmeng and Zhang, Lei and Van Gool, Luc and Timofte, Radu},
|
||||||
|
journal={IEEE Transactions on Pattern Analysis and Machine Intelligence},
|
||||||
|
year={2021}
|
||||||
|
}
|
BIN
deep-tempest.png
BIN
deep-tempest.png
Binary file not shown.
Before Width: | Height: | Size: 528 KiB After Width: | Height: | Size: 139 KiB |
|
@ -1,38 +1,47 @@
|
||||||
# Método End-to-End
|
# End-to-End Method
|
||||||
|
|
||||||
<img src="end-to-end.png"/>
|
<img src="end-to-end.png"/>
|
||||||
|
|
||||||
## Guía de uso
|
## Usage Guide
|
||||||
|
|
||||||
A modo general, las opciones a usar (carpetas de imágenes de referencia/degradadas, modelos de la red, directorio de salida, etc) se encuentran en [end-to-end/options](../end-to-end/options).
|
In general, the options to use (reference/degraded image folders, network models, output directory, etc.) are located in[end-to-end/options](../end-to-end/options).
|
||||||
|
|
||||||
### Inferencia y Evaluación
|
### Inference and Evaluation
|
||||||
|
|
||||||
Para ejecutar la inferencia se debe editar el archivo [end-to-end/options/train_drunet.json](../end-to-end/options/train_drunet.json) y, una vez hechos los cambios, ejecutar:
|
To run inference, you need to edit the file [end-to-end/options/train_drunet.json](../end-to-end/options/train_drunet.json) and, once the changes are made, execute:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
python main_test_drunet.py
|
python main_test_drunet.py
|
||||||
```
|
```
|
||||||
Este comando dará un directorio nuevo como salida con las inferencias del directorio de entrada.
|
This command will output a new directory with the inferences from the input directory.
|
||||||
|
|
||||||
Para ejecutar la evaluación de un directorio con imágenes se debe editar el archivo [end-to-end/options/evaluation.json](../end-to-end/options/evaluation.json) y, una vez hechos los cambios, ejecutar:
|
To evaluate a directory with images (both reference and model's inference), you need to edit the file [end-to-end/options/evaluation.json](../end-to-end/options/evaluation.json) and, once the changes are made, execute:
|
||||||
```shell
|
```shell
|
||||||
python tempest_evaluation.py
|
python tempest_evaluation.py
|
||||||
```
|
```
|
||||||
|
|
||||||
### Entrenamiento
|
### Training
|
||||||
|
|
||||||
**Nota: antes de ejecutar el siguiente comando se debe seleccionar qué tipo de datos usar para el entrenamiento**
|
**Note: Before executing the following command, you must select which type of data to use for training**
|
||||||
|
|
||||||
|
#### Training with Real Data
|
||||||
|
|
||||||
|
To train with real data, the file [end-to-end/options/train_drunet.json](../end-to-end/options/train_drunet.json) must have the value __"drunet_finetune"__ in the *dataset_type* field (datasets-->train).
|
||||||
|
|
||||||
|
#### Training with Synthetic Data
|
||||||
|
|
||||||
|
To train with synthetic data, the file end-to-end/options/train_drunet.json](../end-to-end/options/train_drunet.json) must have the value __"drunet"__ in the *dataset_type* field (datasets-->train).
|
||||||
|
|
||||||
|
Once the data type was selected, use the following command to train the network:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
python main_train_drunet.py
|
python main_train_drunet.py
|
||||||
```
|
```
|
||||||
|
### Generating Synthetic Captures
|
||||||
|
|
||||||
#### Entrenamiento con datos reales
|
For synthetic captured images generation, first configure the options on [tempest_simulation.json](end-to-end/options/tempest_simulation.json) file. Be sure to include the path to the folder containing the images to run the simulation of direct capturing image from the EME of a monitor. Then run the following command:
|
||||||
|
|
||||||
Para entrenar con datos reales, el archivo [end-to-end/options/train_drunet.json](../end-to-end/options/train_drunet.json) debe tener en el campo __dataset_type__ (datasets-->train) el valor __"drunet_finetune"__.
|
```shell
|
||||||
|
python folder_simulation.py
|
||||||
#### Entrenamiento con datos sintéticos
|
```
|
||||||
|
Which outputs the synthetic captured in the specified folder.
|
||||||
Para entrenar con datos sinteticos, el archivo [end-to-end/options/train_drunet.json](../end-to-end/options/train_drunet.json) debe tener en el campo __dataset_type__ (datasets-->train) el valor __"drunet"__.
|
|
Binary file not shown.
Before Width: | Height: | Size: 917 KiB After Width: | Height: | Size: 444 KiB |
|
@ -1,20 +1,3 @@
|
||||||
# Uso de gr-tempest con deep-tempest
|
|
||||||
|
|
||||||
<img src="sistema.png"/>
|
|
||||||
|
|
||||||
Actualmente el único método integrado en GNU Radio es el End-to-End.
|
|
||||||
|
|
||||||
Para cambiar el modelo a usar durante la inferencia editar el archivo [KAIR/options/test_drunet.json](../KAIR/options/test_drunet.json).
|
|
||||||
|
|
||||||
Respecto a las instalaciones con GNU Radio, **es necesario seguir el instructivo de gr-tempest** (detallado más abajo) y luego correr los siguientes flowgraphs que activan *hierblocks*:
|
|
||||||
|
|
||||||
- [binary_serializer.grc](~/gr-tempest/examples/binary_serializer.grc)
|
|
||||||
- [FFT_autocorrelate.grc](~/gr-tempest/examples/FFT_autocorrelate.grc)
|
|
||||||
- [FFT_crosscorrelate.grc](~/gr-tempest/examples/FFT_crosscorrelate.grc)
|
|
||||||
- [Keep_1_in_N_frames.grc](~/gr-tempest/examples/Keep_1_in_N_frames.grc)
|
|
||||||
|
|
||||||
Finalemente correr el flowgraph [deep-tempest_example.grc](~/gr-tempest/examples/deep-tempest_example.grc) para capturar las imágenes de monitor y poder recuperarlas con una mejor calidad.
|
|
||||||
|
|
||||||
### gr-tempest
|
### gr-tempest
|
||||||
|
|
||||||
**An implementation of TEMPEST en GNU Radio.**
|
**An implementation of TEMPEST en GNU Radio.**
|
||||||
|
|
BIN
resultados.png
BIN
resultados.png
Binary file not shown.
Before Width: | Height: | Size: 3.7 MiB |
Loading…
Reference in New Issue