forensic-graphology / docs /technical_docs.md
Fabio Antonini
First implementation
c7ccdd9
# Documentazione Tecnica - Applicazione di Grafologia Forense
## Architettura del Sistema
L'applicazione di Grafologia Forense è strutturata in moduli indipendenti che lavorano insieme per fornire un'analisi completa di firme e documenti. L'architettura è basata su Python con un'interfaccia utente Gradio.
### Struttura delle Directory
```
forensic_graphology/
├── app.py # Punto di ingresso dell'applicazione
├── requirements.txt # Dipendenze Python
├── README.md # Documentazione generale
├── hf-space.yaml # Configurazione per Hugging Face Spaces
├── src/ # Codice sorgente
│ ├── preprocessing.py # Pre-elaborazione delle immagini
│ ├── signature_analysis.py # Analisi delle firme
│ ├── font_analysis.py # Analisi di font e inchiostro
│ ├── measurement.py # Strumenti di misurazione
│ ├── image_enhancer.py # Miglioramento delle immagini
│ ├── ml_models.py # Modelli di machine learning
│ └── rag_system.py # Sistema RAG
├── models/ # Directory per i modelli addestrati
├── uploads/ # Directory per i file caricati
├── results/ # Directory per i risultati generati
├── vector_store/ # Directory per il vector store
└── docs/ # Documentazione
├── user_guide.md # Guida utente
└── technical_docs.md # Documentazione tecnica
```
## Moduli Principali
### 1. Preprocessing (preprocessing.py)
Questo modulo gestisce la pre-elaborazione delle immagini di firme e documenti.
**Classi principali:**
- `ImagePreprocessor`: Classe per la pre-elaborazione delle immagini
**Metodi principali:**
- `load_image(image_path)`: Carica un'immagine da un percorso
- `convert_to_grayscale(image)`: Converte un'immagine in scala di grigi
- `normalize_image(image)`: Normalizza un'immagine
- `denoise_image(image)`: Riduce il rumore in un'immagine
- `binarize_image(image)`: Converte un'immagine in bianco e nero
- `preprocess_signature(image_path)`: Applica tutte le fasi di pre-elaborazione a un'immagine di firma
### 2. Signature Analysis (signature_analysis.py)
Questo modulo fornisce funzionalità per l'analisi e la comparazione di firme.
**Classi principali:**
- `SignatureAnalyzer`: Classe per l'analisi delle firme
**Metodi principali:**
- `extract_features_orb(image)`: Estrae caratteristiche ORB da un'immagine
- `extract_signature_metrics(image)`: Estrae metriche grafometriche da una firma
- `compare_signatures(image1_path, image2_path)`: Confronta due firme
- `visualize_comparison(comparison_result)`: Visualizza il risultato del confronto
- `generate_comparison_report(comparison_result)`: Genera un report testuale del confronto
### 3. Font Analysis (font_analysis.py)
Questo modulo analizza il tipo di font e l'inchiostro utilizzato nei documenti.
**Classi principali:**
- `FontAnalyzer`: Classe per l'analisi di font e inchiostro
**Metodi principali:**
- `detect_text_regions(image)`: Rileva le regioni di testo in un'immagine
- `extract_text(image, regions)`: Estrae il testo dalle regioni rilevate
- `analyze_font(image, regions)`: Analizza il tipo di font
- `analyze_ink(image)`: Analizza il tipo di inchiostro
### 4. Measurement (measurement.py)
Questo modulo fornisce strumenti per la misurazione di vari aspetti dei documenti.
**Classi principali:**
- `MeasurementTool`: Classe per la misurazione dei documenti
**Metodi principali:**
- `measure_line_spacing(image)`: Misura lo spazio tra le linee
- `measure_word_spacing(image)`: Misura lo spazio tra le parole
- `measure_margins(image)`: Misura i margini del documento
- `measure_character_slant(image)`: Misura l'inclinazione dei caratteri
- `create_digital_ruler(image)`: Crea un righello digitale
- `generate_measurement_report(image)`: Genera un report completo di misurazione
### 5. Image Enhancer (image_enhancer.py)
Questo modulo fornisce funzionalità per il miglioramento delle immagini.
**Classi principali:**
- `ImageEnhancer`: Classe per il miglioramento delle immagini
**Metodi principali:**
- `enhance_contrast(image, method)`: Migliora il contrasto di un'immagine
- `sharpen_image(image, kernel_size, strength)`: Applica un filtro di sharpening
- `apply_edge_detection(image, method)`: Applica un rilevatore di bordi
- `highlight_pressure_points(image)`: Evidenzia i punti di pressione
- `apply_emboss_effect(image)`: Applica un effetto di rilievo
- `create_signature_heatmap(image)`: Crea una mappa di calore della firma
### 6. Machine Learning Models (ml_models.py)
Questo modulo implementa modelli di machine learning per l'analisi delle firme.
**Classi principali:**
- `SignatureFeatureExtractor`: Estrae caratteristiche dalle firme
- `AnomalyDetector`: Rileva anomalie nelle firme usando Isolation Forest
- `SignatureVerifier`: Verifica l'autenticità delle firme usando una rete siamese
- `SiameseNetwork`: Implementazione della rete neurale siamese
**Metodi principali:**
- `extract_features(image_path)`: Estrae caratteristiche da un'immagine di firma
- `fit(signatures_df)`: Addestra il modello di rilevamento anomalie
- `predict(signature_path)`: Predice se una firma è anomala
- `verify(image_path1, image_path2)`: Verifica se due firme sono della stessa persona
### 7. RAG System (rag_system.py)
Questo modulo implementa un sistema RAG per la consultazione di documenti.
**Classi principali:**
- `DocumentProcessor`: Elabora e estrae testo dai documenti
- `VectorStore`: Gestisce il vector store per il sistema RAG
- `RAGSystem`: Implementa il sistema RAG completo
**Metodi principali:**
- `extract_text(file_path)`: Estrae il testo da un documento
- `process_document(file_path)`: Elabora un documento e lo divide in chunk
- `add_document(document_info)`: Aggiunge un documento al vector store
- `search(query, k)`: Cerca documenti simili a una query
- `query(query_text)`: Esegue una query sul sistema RAG
## Interfaccia Utente (app.py)
L'interfaccia utente è implementata utilizzando Gradio, una libreria Python per la creazione di interfacce web per modelli di machine learning.
**Funzioni principali:**
- `preprocess_image(image)`: Pre-elabora un'immagine
- `compare_signatures(image1, image2)`: Confronta due firme
- `analyze_font_and_ink(image)`: Analizza font e inchiostro
- `measure_document(image)`: Misura un documento
- `enhance_image(image, enhancement_type)`: Migliora un'immagine
- `detect_anomalies(image)`: Rileva anomalie in una firma
- `verify_signatures(image1, image2)`: Verifica due firme
- `upload_document(file)`: Carica un documento nel sistema RAG
- `query_rag(query_text)`: Esegue una query sul sistema RAG
## Dipendenze Principali
- **OpenCV**: Elaborazione delle immagini
- **NumPy**: Operazioni numeriche
- **Pandas**: Manipolazione dei dati
- **Matplotlib**: Visualizzazione
- **Scikit-learn**: Algoritmi di machine learning
- **PyTorch**: Deep learning
- **Gradio**: Interfaccia utente
- **LangChain**: Framework per il sistema RAG
- **Sentence-Transformers**: Modelli di embedding
- **ChromaDB**: Database vettoriale
- **PyMuPDF, python-docx, python-pptx**: Estrazione di testo da documenti
- **pytesseract**: OCR per l'estrazione di testo dalle immagini
## Deployment
L'applicazione è progettata per essere deployata su Hugging Face Spaces, una piattaforma per l'hosting di applicazioni di machine learning.
**File di configurazione:**
- `requirements.txt`: Elenca tutte le dipendenze Python
- `hf-space.yaml`: Configura l'ambiente Hugging Face Spaces
- `README.md`: Contiene metadati per Hugging Face Spaces
## Estensione dell'Applicazione
### Aggiungere Nuove Funzionalità
Per aggiungere nuove funzionalità all'applicazione:
1. Creare un nuovo modulo in `src/` o estendere un modulo esistente
2. Implementare la logica della nuova funzionalità
3. Aggiungere una nuova funzione in `app.py` che utilizza la nuova funzionalità
4. Aggiungere un nuovo tab o elemento UI in `create_interface()` in `app.py`
### Addestrare Nuovi Modelli
Per addestrare nuovi modelli di machine learning:
1. Raccogliere un dataset di firme (autentiche e false per il verificatore, solo autentiche per il rilevatore di anomalie)
2. Utilizzare le classi `AnomalyDetector` o `SignatureVerifier` per addestrare i modelli
3. Salvare i modelli addestrati nella directory `models/`
4. Aggiornare l'applicazione per utilizzare i nuovi modelli
## Considerazioni sulla Sicurezza
- L'applicazione non memorizza le immagini caricate a lungo termine
- I documenti caricati nel sistema RAG sono memorizzati localmente
- Non vengono utilizzate API esterne per l'elaborazione dei dati
- Il sistema RAG funziona in modalità di sola ricerca per evitare la necessità di token API
## Limitazioni Tecniche
- L'OCR potrebbe non funzionare correttamente con testi in lingue non latine
- I modelli di machine learning richiedono un addestramento specifico per casi d'uso particolari
- L'analisi del font e dell'inchiostro ha una precisione limitata
- Il sistema RAG funziona in modalità di sola ricerca, senza generazione di risposte AI
## Risoluzione dei Problemi
- **Errori di memoria**: Ridurre la dimensione delle immagini o utilizzare batch più piccoli
- **Errori di OCR**: Migliorare la qualità delle immagini o utilizzare pre-elaborazione
- **Prestazioni lente**: Ottimizzare i parametri dei modelli o utilizzare hardware più potente
## Riferimenti
- [OpenCV Documentation](https://docs.opencv.org/)
- [Scikit-learn Documentation](https://scikit-learn.org/stable/documentation.html)
- [PyTorch Documentation](https://pytorch.org/docs/stable/index.html)
- [Gradio Documentation](https://gradio.app/docs/)
- [LangChain Documentation](https://python.langchain.com/docs/get_started/introduction)