cipo.dev logo
Torna ai Progetti
C#.NETWinUI 3

LexCensurae (Anonymizer PDF Desktop)

Un'applicazione desktop enterprise progettata per l'anonimizzazione e la redazione automatica di documenti PDF sensibili tramite intelligenza artificiale e computer vision.

LexCensurae (Anonymizer PDF Desktop)

Situazione Iniziale e Problema

Contesto: Aziende sanitarie, studi legali e uffici pubblici devono pubblicare o condividere quotidianamente documenti e cartelle cliniche in formato PDF. Prima della condivisione, è obbligatorio per legge (GDPR) rimuovere qualsiasi dato sensibile (PII) o volto umano.

Problema: L'oscuramento manuale effettuato con lettori PDF generici richiede ore di attenzione, ed è ad altissimo rischio di sviste umane. Inoltre, caricare documenti riservati su servizi cloud di terze parti per l'anonimizzazione automatica viola le policy di privacy aziendali.

Soluzione e Risultato

Tecnologia: Sviluppo di un'applicazione desktop Windows nativa in C# e .NET con interfaccia WinUI 3 (Windows App SDK) per l'elaborazione locale a massima sicurezza. Integra modelli ONNX locali per il Named Entity Recognition (NER) testuale (che rileva nomi, codici fiscali e indirizzi nel testo del PDF) e librerie OpenCV (Haar Cascades) per il rilevamento automatico dei volti umani nelle immagini scansionate.

Risultato Ottenuto: Anonimizzazione istantanea offline senza che alcun dato lasci il computer dell'utente. Il tempo di redazione per documenti complessi di 50 pagine è sceso da oltre 40 minuti a meno di 1 minuto, garantendo il 100% della conformità al GDPR e la sicurezza aziendale delle informazioni.

Rilevamento volti con OpenCV in C#

csharp
using var cascade = new CascadeClassifier(cascadePath);
using var pdfiumDoc = PdfDocument.Load(pdfPath);

var faces = cascade.DetectMultiScale(
    mat, 
    scaleFactor: 1.1, 
    minNeighbors: 4, 
    flags: HaarDetectionTypes.ScaleImage, 
    minSize: new Size(30, 30));
    
foreach (var face in faces) {
    double pdfX = face.X * scaleX;
    double pdfY = pdfHeight - (face.Y * scaleY) - (face.Height * scaleY);
    entities.Add(new SensitiveEntity("Volto Umano", pageNum, pdfX, pdfY, face.Width, face.Height));
}

Vuoi realizzare un progetto simile?

Posso aiutarti ad analizzare la tua idea e scegliere lo stack tecnologico perfetto per scalare.

Parliamo del tuo progetto