# 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)