Progettazione e sviluppo di un sistema gestionale e integrazione dei sottosistemi di analisi per la rinocitologia

Pagina creata da Valeria Leo
 
CONTINUA A LEGGERE
Progettazione e sviluppo di un sistema gestionale e integrazione dei sottosistemi di analisi per la rinocitologia
Dipartimento di Informatica

Progettazione e sviluppo di un
     sistema gestionale e
 integrazione dei sottosistemi
       di analisi per la
         rinocitologia

   Relatore:                                      Laureando:
   Prof. Giovanni Dimauro                         Francesco Lacriola
   Correlatori:
   Dott. Francesco Girardi

ANNO ACCADEMICO 2017-2018                                              !1
Progettazione e sviluppo di un sistema gestionale e integrazione dei sottosistemi di analisi per la rinocitologia
Abstract                                                    6
Introduzione                                                7
Cosa è la rinocitologia                                    7
Come si svolge un esame rinocitologico: le fasi            8
Anamnesi                                                    8
    L’importanza dell’anamnesi                              9
Citologia nasale                                            9
Le cellule interessate                                     11
    Epiteliali (Ciliate)                                   11
    Mucipare                                               11
    Eosinofili                                             12
    Linfociti                                              12
    Mastcellule                                            13
    Neutrofili                                             14
Diagnosi                                                   15
Il sistema realizzato                                      16
Sottosistema gestionale: il progetto                       18
    Requisiti di sistema testati                           18
    Requisiti software                                     18
    Requisiti funzionali                                   19
    Sottosistema Gestionale: il diagramma dei casi d’uso   21
Sottosistema Gestionale: casi d’uso e scenari              23
        Censire nuovo paziente                             23
        Inserire dati anagrafici                           24
        Inserire codice fiscale                            25
        Acquisire codice fiscale da foto                   26
        Acquisire codice fiscale da webcam                 27
        Creare anamnesi                                    28
        Inserire anamnesi in storico                       29
        Creare report anamnesi                             30
        Aggiornare anamnesi                                31

ANNO ACCADEMICO 2017-2018                                   !2
Progettazione e sviluppo di un sistema gestionale e integrazione dei sottosistemi di analisi per la rinocitologia
Visualizzare storico anamnesi                               32
        Proporre classificazione                                    33
        Riconoscere biofilm                                         34
        Visualizzare conta cellule                                  35
        Gestire revisione classificazione                           36
        Modificare classificazione cellula                          37
        Visualizzare immagine in editor grafico                     38
        Caricare immagine cellula su server di condivisione         39
        Proporre diagnosi                                           40
        Creare report diagnosi                                      41
    Sottosistema Gestionale: il diagramma delle classi principali   42
Implementazione                                                     43
    Linguaggi e ambienti utilizzati                                 43
    Librerie utilizzate                                             47
    OpenCV                                                          48
    Guida all’installazione e all’uso per il medico                 49
    Guida all’installazione e modifica del sistema                  51
Uno sguardo d’insieme al sistema                                    53
        Architettura adottata: il pattern MVC                       53
        Le componenti del sistema                                   56
        Integrazione dei sottosistemi: Python                       58
        Py4J                                                        59
        Integrazione dei sottosistemi: CLIPS                        61
        TCP/IP : Transmission Protocol, Internet Protocol           62
        Realizzazione dell’architettura client / server             63
    Anagrafica                                                      65
    Riconoscimento codice fiscale                                   66
        Il codice a barre presente sulla Tessera Sanitaria          67
        Come viene effettuata la lettura                            68
        Processo di decodifica                                      68
        Controindicazioni alla conversione in scala di grigio       70
    Caricamento / Esportazione Pazienti                             71

ANNO ACCADEMICO 2017-2018                                            !3
Progettazione e sviluppo di un sistema gestionale e integrazione dei sottosistemi di analisi per la rinocitologia
Passaggio dati mediante JSON                         73
    Anamnesi                                                 75
        Anamnesi Familiare                                   76
        Sintomatologia                                       77
        Esame del medico                                     78
        Prick test                                           79
    Citologia                                                81
        Revisione Cellule                                    84
        Conta delle cellule                                  86
        Citologia nasale e Anamnesi nella rinite allergica   88
Conclusioni e sviluppi futuri                                90
    Bibliografia/Sitografia                                  91
    Indice delle figure                                      92

ANNO ACCADEMICO 2017-2018                                     !4
Progettazione e sviluppo di un sistema gestionale e integrazione dei sottosistemi di analisi per la rinocitologia
ANNO ACCADEMICO 2017-2018   !5
Progettazione e sviluppo di un sistema gestionale e integrazione dei sottosistemi di analisi per la rinocitologia
Abstract
La Rinologia studia l’anatomia, la fisiologia e le affezioni che colpiscono la regione
nasale: una delle tecniche più moderne per diagnosticare queste affezioni è la citologia
nasale o rinocitologia, che prevede l’analisi al microscopio delle cellule contenute
nella mucosa nasale.

Il presente lavoro di tesi contribuisce alla realizzazione di un sistema software di
supporto diagnostico allo specialista di rinocitologia.

Il sistema in via di sviluppo consente di acquisire ed analizzare le immagini digitali
dei vetrini, di individuare gli elementi cellulari e di classificarli. In base alla
numerosità delle classi di cellule il sistema propone allo specialista alcune possibili
patologie sulla base di algoritmi diagnostici noti, anche incrociando i risultati con
l’anamnesi del paziente e dei suoi familiari. Il sistema consente inoltre di gestire
l’archivio dei pazienti, consentendo al medico di studiarne la storia clinica.

In particolare il presente lavoro di tesi riguarda la progettazione e sviluppo di
un’applicazione desktop per la gestione delle informazioni dei pazienti utili allo
specialista per la diagnosi delle riniti e per la somministrazione delle terapie.

L’applicazione realizzata costituisce l’interfaccia fra lo specialista ed il back end del
sistema: fornisce gli input per i sottosistemi di estrazione, classificazione delle cellule,
oggetto di altri lavori di tesi, propone allo specialista la classificazione delle cellule
individuate sul vetrino e rende possibile il suo intervento per confermare o modificare
manualmente i risultati della classificazione. Al termine, basandosi su algoritmi
diagnostici oggetto di altri lavori di tesi, il sistema suggerisce le possibili patologie del
paziente. Archivia, infine, tutti i dati consentendo di conservare la storia clinica del
paziente.

ANNO ACCADEMICO 2017-2018                                                                  !6
Progettazione e sviluppo di un sistema gestionale e integrazione dei sottosistemi di analisi per la rinocitologia
Introduzione
                Cosa è la rinocitologia
Con “Rinologia” si intende quella parte dell'otorinolaringoiatria che studia l'anatomia,
la fisiologia e le affezioni che colpiscono la regione nasale.

Con “Citologia” o biologia cellulare si intende quella branca della biologia che studia
la cellula dal punto di vista morfologico (studio strutturale, ad esempio, nucleo o dei
vari organuli) e funzionale (studio dei processi fondamentali come il ciclo cellulare o
la riproduzione). Gli approcci della citologia sono sia a livello microscopico che
molecolare, sia in organismi unicellulari che in organismi più complessi come l'uomo.
La conoscenza della struttura della cellula e dei processi che vi avvengono è molto
importante per tutte le scienze biologiche. In particolare, riconoscendo le somiglianze
e le differenze tra cellule di diversi organismi o di diversi tessuti, la citologia cerca di
fornire una chiave di osservazione il più possibile generalizzata del sistema-cellula. La
Citologia rappresenta uno dei perni biologici di grande interesse per studiare i
meccanismi cellulari e molecolari della patogenesi e per diagnosticare malattie
attraverso le analisi citologiche (Citopatologia).

Dunque, la “Rinocitologia” è quella branca della scienza che studia, a 360 gradi, la
regione nasale: sia a livello anatomico e fisiologico, sia a livello cellulare al fine di
diagnosticare e prevenire eventuali malattie.

ANNO ACCADEMICO 2017-2018                                                                 !7
Progettazione e sviluppo di un sistema gestionale e integrazione dei sottosistemi di analisi per la rinocitologia
Come si svolge un esame
             rinocitologico: le fasi

                                    Anamnesi

L'anamnesi, in medicina, è la raccolta dalla voce diretta del paziente e/o dei suoi
familiari (per esempio i genitori nel caso di un lattante o di un bambino), di tutte
quelle informazioni, notizie e sensazioni che possono aiutare il medico, l'infermiere e
le altre professioni sanitarie a indirizzarsi verso una corretta diagnosi di patologia o
una adeguata procedura sanitaria.

In ambito rinocitologico, oltre alla classica anamnesi sotto forma di questionario al
paziente, si associano dei test obbiettivi e strumentali quali l’endoscopia, l’esame
olfattometrico screening, la rinomanometria e gli skin prick test.

ANNO ACCADEMICO 2017-2018                                                              !8
Progettazione e sviluppo di un sistema gestionale e integrazione dei sottosistemi di analisi per la rinocitologia
L’importanza dell’anamnesi

Insieme all'esame obiettivo del malato, è di fondamentale ausilio nella formulazione
della diagnosi poiché ricostruisce le modalità di insorgenza ed il decorso della
patologia in atto, investigando inoltre sulle possibili inclinazioni genetiche
(predisposizione alle malattie genetiche) del gruppo familiare verso l'insorgenza di
determinati tipi di malattie (anamnesi familiare). In questo senso è anche utilizzata per
l'avvio di programmi di sorveglianza per i soggetti a rischio.

Normalmente l’anamnesi si divide in più parti (principalmente una familiare e una
personale). L’anamnesi personale, a sua volta, si divide in patologica remota e
patologica prossima, mentre l’anamnesi familiare prevede due soli ambiti: gli
ascendenti (i genitori e i nonni) e i collaterali (fratelli e sorelle). L’anamnesi familiare
è molto utile per conoscere i fattori di rischio genetici, ambientali o l’eventuale
predisposizione familiare. Ne sono un esempio la presenza di fattori allergenici in
famiglia o la predisposizione congenita a tumori.

                                Citologia nasale

Come affermato in precedenza, con citologia si intende quella branca della biologia
che studia la cellula dal punto di vista morfologico (studio strutturale, ad esempio,
nucleo o dei vari organuli) e funzionale (studio dei processi fondamentali come il
ciclo cellulare o la riproduzione).

Nello specifico, la citologia nasale è lo studio della cellularità nasale. Si effettua in
sede di visita otorinolaringoiatrica con una procedura di “scrapring“ ovvero un
raschiamento della mucosa del turbinato inferiore (la parete laterale del naso) tramite
un piccolo cucchiaino di plastica denominato Rhinoprobe. La procedura di prelievo
cellulare (introdotta a Parma per la prima volta) non necessita di alcun tipo di

ANNO ACCADEMICO 2017-2018                                                                 !9
Progettazione e sviluppo di un sistema gestionale e integrazione dei sottosistemi di analisi per la rinocitologia
anestesia, è indolore e dura solo alcuni secondi. Per questo motivo si può sottoporre
all’esame anche la popolazione pediatrica o neonatale.

ANNO ACCADEMICO 2017-2018                                                          !10
Le cellule interessate

                                         Epiteliali (Ciliate)
                                          La cellula ciliata costituisce il citotipo più
                                          differenziato e maggiormente rappresentato tra quelli
                                          della mucosa nasale (ne ricopre infatti l’80%). Il
                                          rapporto numerico tra cellule ciliate e cellule
                                          mucipare va da 5 a 1 fino a raggiungere un picco di
                                          100-200 a 1.

                                              Mucipare
                                  La cellula caliciforme mucipara (globet cell) è una ghiandola
                                  unicellulare,   interposta   tra   le   cellule   dell’epitelio
                                  pseudostratificato respiratorio. È una ghiandola a secrezione
                                  mucosa (produce muco). Quando la quantità di muco
                                  raggiunge un volume considerevole e il nucleo viene spinto
                                  ancora più inferiormente, si crea una caratteristica zona di
                                  rinforzo cromatinico, molto evidente nei comuni preparati
                                  citologici. Tale fenomeno favorisce il riconoscimento delle
cellule mucipare. Le cellule caliciformi mucipare rivestono un importantissimo ruolo
fisiologico, perché la loro secrezione a livello respiratorio è essenziale per il
mantenimento di una corretta detersione delle vie aeree.
Epiteliali (ciliate) e Mucipare

ANNO ACCADEMICO 2017-2018                                                                     !11
Eosinofili
                           Nel soggetto sano, a livello ematico, la percentuale di
                           eosinofili è dell’ordine dell’1-6% della popolazione
                           leucocitaria totale, ma sia in patologie allergiche, sia in
                           patologie    extra-allergiche    (parassitosi,   infiammazioni
                           croniche, alcune neoplasie, patologia polmonare, NARES
                           ecc.) può raggiungere valori superiori al 15-30%. Dal punto
                           di vista morfologico, gli eosinofili hanno similitudini
strutturali con altri granulociti. Nella forma matura presentano dimensioni lievemente
maggiori dei neutrofili.

                                        Linfociti
                             I linfociti sono gli elementi circolanti responsabili della
                             risposta immunitaria. Nel corso dei primi anni di vita essi
                             costituiscono il 30-70% del totale dei globuli bianchi
                             presenti nel sangue periferico e il 10-30% degli elementi
                             cellulari midollari. In base al tipo di risposta immunitaria
alla quale sono deputati, si distinguono in: linfociti, linfociti B, linfociti non T-non B,
detti “Null”.

Agiscono a diretto contatto con l’ospite non desiderato, non self, inibendone la
crescita e uccidendo gli elementi estranei. Cooperano con altre cellule del sistema
immunitario per difendere l’organismo da varie forme di infezioni (virali e batteriche).
È noto che i linfociti T giocano un ruolo chiave nello sviluppo e nel mantenimento
delle malattie allergiche, così come è ormai generalmente accettata la classificazione
dei linfociti T helper in sotto popolazioni distinte dal punto di vista funzionale per la
produzione di citochine.
Eosinofili e Linfociti

ANNO ACCADEMICO 2017-2018                                                               !12
L’azione dei linfociti è molto importante nella patogenesi della rinite allergica. In
particolare nella patogenesi delle reazioni allergiche svolge un ruolo cardine la
preponderanza del sottotipo Th2.

                                    Mastcellule
                              La mastcellula è una cellula distribuita in tutti i tessuti
                              dei mammiferi. È presente sulle superfici mucose e
                              sierose, nei tessuti linfoidi e connettivali ed è associata
                              al tessuto nervoso, ai vasi sanguigni e al tessuto
                              neoplastico. La sua localizzazione tessutale la distingue
dai leucociti basofili, una categoria di cellule circolanti che invadono i tessuti solo
durante gli eventi infiammatori. Nella mucosa bronchiale e in quella nasale i mastociti
sono situati all’interfaccia con l’ambiente esterno e sono le prime cellule che
interagiscono con gli allergeni inalati. La dimostrazione che tali cellule partecipano
alle reazioni allergiche deriva dal fatto che nel liquido di lavaggio dopo provocazione
allergenica si trovano mediatori di derivazione mastocitaria.

Mastcellule

ANNO ACCADEMICO 2017-2018                                                             !13
Neutrofili
Il granulocita neutrofilo è una cellula dalla forma tondeggiante, con dimensioni
variabili dai 12 ai 14 μ. Il suo processo maturativo, dal mieloblasto al neutrofilo
maturo dura circa 10 giorni, al termine dei quali la cellula va a costituire un pool di
deposito; qui viene mobilizzata in tempi più o meno rapidi a seconda delle necessità.
Nel sangue periferico sono presenti circa 700 milioni di neutrofili/kg: ciascuno di
questi rimane in circolo circa 10 ore.

Una delle principali funzioni
dei granulociti neutrofili è
costituita dall’ingestione e
dalla digestione di germi
detta “fagocitosi”.

Se la presenza di sporadici
neutrofili nei rinocitogrammi
di soggetti sani è considerata
una condizione di normalità,
è bene che il loro aumento sia tenuto sempre sotto controllo; infatti, negli ultimi anni
si è rilevato un incremento significativo di tali cellule, specialmente nei soggetti che
vivono in città industrializzate o che, per via delle attività che svolgono, sono portati
all’inalazione di particolari sostanze tossiche o particolato presente nell’aria.
Neutrofili

ANNO ACCADEMICO 2017-2018                                                              !14
Diagnosi

La figura in alto riportata mostra un esempio di strategia diagnostica nelle rinopatie
vasomotorie. Come si può notare, tutte le fasi precedentemente elencate servono al
fine di poter giungere ad una diagnosi.

L’anamnesi, la sintomatologia presentata dal paziente in questione ed i risultati di
eventuali esami clinici (nei quali includiamo anche i prick test o test allergologico
cutaneo) permettono, insieme al procedimento di citologia nasale, di ottenere una
diagnosi e quindi, di conseguenza, somministrare una terapia.

ANNO ACCADEMICO 2017-2018                                                           !15
Il sistema realizzato

Il sistema che è stato realizzato, come oggetto di tesi, è un sistema di supporto allo
specialista nello svolgimento di un esame in ambito rinocitologico. Lo scopo ultimo è
quello di assistere il medico senza sostituirsi ad esso.

Nel complesso, il sistema, permette il riconoscimento di cellule nei campi prelevati
dal professionista mediante l’uso di un microscopio ottico collegato al pc, la
successiva classificazione (nelle classi precedentemente discusse: epiteliali, linfociti,

ANNO ACCADEMICO 2017-2018                                                              !16
neutrofili, mastcellule, eosinofili e mucipare). Lo specialista avrà poi la possibilità di
revisionare la classificazione in caso di errori da parte del sistema.

Il medico potrà poi effettuare l’anamnesi seguendo uno schema già impostato o potrà
consultare la storia clinica del paziente. L’anamnesi proposta conterrà oltre a domande
di carattere generale, anche domande specifiche relative a esami oggettivi e
strumentali ai quali si è sottoposto il paziente.

A seguito di un’anamnesi, sarà possibile inoltre richiedere al sistema una probabile
diagnosi, che il medico potrà revisionare e correlare con una terapia.

ANNO ACCADEMICO 2017-2018                                                               !17
Sottosistema gestionale: il
                        progetto
                             Requisiti di sistema testati

Sistema operativo: Mac OS X 10.11 El Capitan o superiori, Windows 7 o superiori

RAM: 2GB (minimo), 4GB (consigliato)

Processore: AMD E1-2500 APU (minimo), Intel Core i5 2,4GHz (consigliato)

                                   Requisiti software

In generale, comunque, con requisito software1, si definisce :

1. A condition or capability needed by a user to solve a problem or achieve an
      objective

2. A condition or capability that must be met or possessed by a system or component
      to satisfy a contract, standard, specification, or other formally imposed documents

3. A documented representation of a condition or capability as in (1) or (2)

1   IEEE 610

ANNO ACCADEMICO 2017-2018                                                              !18
Requisiti funzionali

A seguito di colloquio con il prof. Dimauro e il dott. Gelardi (considerati come
gli stackeholders2 per questa applicazione), son stati evidenziati i bisogni dei
committenti del sistema.

Dalla lista dei bisogni, è stata stilata una lista dei requisiti da rispettare. Di
seguito sono elencati i principali, distinti fra funzionali (RF) e non funzionali
(RNF):

1. L’applicazione deve essere di facile utilizzo per lo specialista (RNF)

2. L’applicazione deve supportare il lavoro dello specialista e velocizzarlo (RNF)

    2.1. Lo specialista non deve essere vincolato dall’applicazione a effettuare le

         operazioni in un ordine preciso (a meno che questo non sia strettamente
         necessario) (RNF)

    2.2. Deve essere possibile effettuare le operazioni anche senza inserire i dati

         anagrafici del paziente (ed eventualmente inserirli in un secondo momento)
         (RNF)

         2.2.1.Se il paziente rimane “Anonimo” deve comunque avere un identificatore

               unico (Es. Anonimo_1, Anonimo_2, … , Anonimo_n) (RNF)

    2.3. Al momento della revisione della classificazione, il medico deve poter

         direttamente vedere un’anteprima della cellula.(RF)

         2.3.1.Se necessario, deve poter aprire l’immagine con un editor che ne consenta

               una migliore osservazione (RF)

3. I pazienti devono essere distinti in base al codice fiscale (in quanto è univoco) (RF)

2 Stakeholders: “insieme dei soggetti che hanno un interesse nei confronti di un’organizzazione e che con il loro

comportamento possono influenzarne l’attività” - Federica, UniNa

ANNO ACCADEMICO 2017-2018                                                                                           !19
3.1. Il medico, tuttavia, deve avere la possibilità di non inserire manualmente il
            codice fiscale quando necessario (RF)

4. Deve essere possibile caricare in memoria un paziente già esistente (RF)

5. Deve essere consultabile lo storico clinico del paziente (RF)

       5.1. Eventualmente devono essere modificabili le informazioni ottenute in
            precedenza (RF)

6. Il sistema deve effettuare la conta automatica delle cellule (basandosi sulla

      revisione da parte dello specialista, qualora sia stata effettuata, oppure basandosi
      direttamente sul lavoro del classificatore) (RF)

7. Il sistema deve stilare dei report in pdf (RF)

I requisiti funzionali stilati son risultati completi e coerenti probabilmente per il
basso numero di stakeholder presi in considerazione, i quali avevano idee chiare e non
in contrasto tra di loro su quello che sarebbe dovuto essere il sistema.

                                                           Una       volta     analizzati   i    bisogni   dei
                                                           committenti e stilati i requisiti che il sistema
                                                           software         deve   rispettare,   si   possono
                                                           raggruppare tali requisiti in features3 che
                                                           verranno implementate.

                                                           Si rimanda al seguito per una descrizione
                                                           dettagliata delle componenti software e delle
                                                           features.

3   Una feature è un servizio che soddisfa uno o più bisogni del cliente.

ANNO ACCADEMICO 2017-2018                                                                                   !20
Sottosistema Gestionale: il diagramma dei casi d’uso
Con riferimento ai requisiti funzionali presenti nell’analisi dei requisiti effettuata,
nell’ambito del lavoro della presente tesi, si sono implementate le funzioni descritte
nel diagramma dei casi d’uso presentato nella pagina successiva.

Nel diagramma è evidenziato in blu il contesto del sottosistema Gestionale.

All’esterno del contesto vi è un solo attore principale – il Medico – ed i sottosistemi
con i quali il sottosistema Gestionale interagisce.

In ogni caso d’uso esteso, sono evidenziati gli extension point(s).

ANNO ACCADEMICO 2017-2018                                                            !21
!

ANNO ACCADEMICO 2017-2018   !22
Sottosistema Gestionale: casi d’uso e scenari

     Censire nuovo paziente

1.    Informazioni di base

       Obiettivo:                  Permette di associare la classificazione cellulare ad un
                                   paziente, sia in forma anonima che attraverso l’immissione di
                                   dati anagrafici. In quest’ultimo caso, l’unico dato obbligatorio
                                   è il codice fiscale.

       Pre-Condizioni:
       Post-Condizioni per         Deve essere presente un nuovo paziente, con identificativo
       Successo:                   Anonimo n, oppure codice fiscale

       Post-Condizioni per
       Fallimento:
       Estende il caso d’uso:
       Specializza il caso
       d’uso:

2.    Scenario Base

       Passo        Descrizione del passo
       1            Il medico apre l’applicazione
       2            Il sottosistema crea un nuovo paziente identificandolo con Anonimo n, con n
                    che è un progressivo (RNF 2.2 e RF 2.2.1)
       3            Extension point: Paziente non anonimo

ANNO ACCADEMICO 2017-2018                                                                         !23
Inserire dati anagrafici

   1. Informazioni di base

      Obiettivo:                  Permette al medico di identificare con codice fiscale ed altri
                                  dati anagrafici, un paziente

      Pre-Condizioni:
      Post-Condizioni per         L’anagrafica del paziente deve essere aggiornata con i dati
                                  immessi dal medico
      Successo:
      Post-Condizioni per
      Fallimento:
      Estende il caso d’uso:      Censire nuovo paziente

      Specializza il caso
      d’uso:

   2. Scenario Base

      Passo        Descrizione del passo
      1            Il medico decide che il paziente deve essere non anonimo
      2            Il sistema richiede l’immissione dei dati anagrafici, dei quali l’unico
                   obbligatorio è il codice fiscale (RF 3.)
      3            Il medico immette, facoltativamente, i dati anagrafici non obbligatori
      4             Inserire codice fiscale

ANNO ACCADEMICO 2017-2018                                                                          !24
Inserire codice fiscale

   1. Informazioni di base

      Obiettivo:                  Permette al medico di inserire il codice fiscale del paziente

      Pre-Condizioni:
      Post-Condizioni per         L’anagrafica del paziente deve essere aggiornata con il codice
                                  fiscale immesso dal medico
      Successo:
      Post-Condizioni per
      Fallimento:
      Estende il caso d’uso:
      Specializza il caso
      d’uso:

   2. Scenario Base

      Passo        Descrizione del passo
      1            Il sistema richiede l’immissione del codice fiscale del paziente
      2            Il medico immette manualmente il codice fiscale del pazientre
      3            Extension point: Codice fiscale da foto
      4            Extension point: Codice fiscale da webcam

ANNO ACCADEMICO 2017-2018                                                                          !25
Acquisire codice fiscale da foto

   1. Informazioni di base

      Obiettivo:                   Permette al medico di immettere il codice fiscale del paziente,
                                   acquisendolo da una foto salvata sul file system (RF 3.1.)

      Pre-Condizioni:              La foto del codice fiscale deve essere disponibile sul file
                                   system

      Post-Condizioni per          L’anagrafica del paziente deve essere aggiornata con i dati del
                                   codice fiscale presenti sulla foto
      Successo:
      Post-Condizioni per
      Fallimento:
      Estende il caso d’uso:       Inserire codice fiscale

      Specializza il caso
      d’uso:

   2. Scenario Base

      Passo        Descrizione del passo
      1            Il medico decide di acquisire il codice fiscale da una foto presente sul file
                   system
      2            Il sistema richiede di fornire il path ed il nome del file contenente la foto
      3            Il medico immette il path ed il nome del file contenente la foto
      4            Il sistema riconosce il codice fiscale dalla foto e lo immette nel campo
                   opportuno della form per l’immissione dei dati anagrafici

ANNO ACCADEMICO 2017-2018                                                                            !26
Acquisire codice fiscale da webcam

   1. Informazioni di base

      Obiettivo:                  Permette al medico di immettere il codice fiscale del paziente,
                                  acquisendolo attraverso una webcam (RF 3.1.)

      Pre-Condizioni:             Deve essere disponibile una webcam collegata al computer del
                                  medico

      Post-Condizioni per         L’anagrafica del paziente deve essere aggiornata con i dati del
                                  codice fiscale ripreso dalla webcam
      Successo:
      Post-Condizioni per
      Fallimento:
      Estende il caso d’uso:      Inserire codice fiscale

      Specializza il caso
      d’uso:

   2. Scenario Base

      Passo        Descrizione del passo
      1            Il medico decide di acquisire il codice fiscale inquadrando il tesserino con una
                   webcam
      2            Il sistema attiva la webcam
      3            Il medico inquadra la tessera sanitaria con la webcam
      4            Il sistema riconosce il codice fiscale e lo immette nel campo opportuno della
                   form per l’immissione dei dati anagrafici

ANNO ACCADEMICO 2017-2018                                                                           !27
Creare anamnesi

   1. Informazioni di base

      Obiettivo:                  Permette al medico di inserire le informazioni sull’anamnesi
                                  del paziente

      Pre-Condizioni:
      Post-Condizioni per         L’anamnesi del paziente deve essere creata ed inserita nello
                                  storico anamnesi
      Successo:
      Post-Condizioni per
      Fallimento:
      Estende il caso d’uso:
      Specializza il caso
      d’uso:

   2. Scenario Base

      Passo        Descrizione del passo
      1            Il sistema presenta un questionario relativo ad anamnesi famigliare,
                   sintomatologia, esame obbiettivo, Prick Test.
      2            Il medico compila il questionario (in tutto o in parte) aggiungendovi sue
                   osservazioni
      3            Il medico decide di salvare i dati immessi
      4             Inserire anamnesi in storico
      5             Creare report anamnesi

ANNO ACCADEMICO 2017-2018                                                                        !28
Inserire anamnesi in storico

   1. Informazioni di base

      Obiettivo:                  Permette di aggiungere l’attuale versione dell’anamnesi ad uno
                                  storico delle anamnesi del paziente (RF 5.)

      Pre-Condizioni:
      Post-Condizioni per         L’anamnesi attuale del paziente deve essere inserita nello
                                  storico anamnesi
      Successo:
      Post-Condizioni per
      Fallimento:
      Estende il caso d’uso:
      Specializza il caso
      d’uso:

   2. Scenario Base

      Passo        Descrizione del passo
      1            Il sistema aggiunge la versione attuale dell’anamnesi allo storico anamnesi

ANNO ACCADEMICO 2017-2018                                                                        !29
Creare report anamnesi

   1. Informazioni di base

      Obiettivo:                  Permette di creare un report pdf con le informazioni
                                  sull’anamnesi del paziente, consultabile dal medico (RF 7.)

      Pre-Condizioni:             Devono essere state inserite almeno alcune informazioni
                                  sull’anamnesi del paziente

      Post-Condizioni per         Deve essere stato generato un report pdf con le informazioni
                                  sull’anamnesi del paziente, immesse dal medico
      Successo:
      Post-Condizioni per
      Fallimento:
      Estende il caso d’uso:
      Specializza il caso
      d’uso:

   2. Scenario Base

      Passo        Descrizione del passo
      1            Il sistema crea un report pdf contenente le informazioni sull’anamnesi del
                   paziente, immesse dal medico fino a quel momento

ANNO ACCADEMICO 2017-2018                                                                        !30
Aggiornare anamnesi

   1. Informazioni di base

      Obiettivo:                  Permette al medico di integrare le informazioni sull’anamnesi
                                  del paziente (RF 5.1)

      Pre-Condizioni:             L’anamnesi del paziente deve essere stata creata ed inserita
                                  nello storico anamnesi

      Post-Condizioni per         L’anamnesi del paziente deve essere integrata con le
                                  informazioni immesse dal medico, e la nuova versione
      Successo:                   dell’anamnesi deve essere inserita nello storico anamnesi

      Post-Condizioni per
      Fallimento:
      Estende il caso d’uso:
      Specializza il caso
      d’uso:

   2. Scenario Base

      Passo        Descrizione del passo
      1             Visualizzare storico anamnesi
      2            Il sistema presenta il questionario relativo ad anamnesi famigliare,
                   sintomatologia, esame obbiettivo, Prick Test compilato, fino a quel punto, dal
                   medico
      2            Il medico integra la compilazione del questionario (in tutto o in parte)
                   aggiungendovi sue osservazioni
      3            Il medico decide di salvare i dati immessi
      4             Inserire anamnesi in storico
      5             Creare report anamnesi

ANNO ACCADEMICO 2017-2018                                                                         !31
Visualizzare storico anamnesi

   1. Informazioni di base

      Obiettivo:                   Permette al medico di avere a disposizione le date e ore nelle
                                   quali ha prodotto le varie versioni dell’anamnesi del paziente e
                                   di selezionare la versione da modificare

      Pre-Condizioni:              L’anamnesi del paziente deve essere stata creata ed inserita
                                   nello storico anamnesi

      Post-Condizioni per          Il sistema deve presentare al medico la versione dell’anamnesi
                                   predisposta nella data e ora selezionata
      Successo:
      Post-Condizioni per
      Fallimento:
      Estende il caso d’uso:
      Specializza il caso
      d’uso:

   2. Scenario Base

      Passo        Descrizione del passo
      1            Il sistema visualizza una lista con le date e le ore nelle quali sono state
                   prodotte le versioni dell’anamnesi salvate nello storico anamnesi
      2            Il medico seleziona una data e ora dalla lista
      2            Il sistema visualizza il questionario dell’anamnesi come era stato prodotto
                   nella data e ora selezionata dall’utente

ANNO ACCADEMICO 2017-2018                                                                         !32
Proporre classificazione

   1. Informazioni di base

      Obiettivo:                  Permette, a partire dalle immagini dei campi salvate sul file
                                  system del medico, di acquisire le immagini delle cellule in
                                  essi presenti, e proporne una classificazione che il medico
                                  potrà correggere

      Pre-Condizioni:             Le immagini dei campi devono essere disponibili sul file
                                  system del computer del medico

      Post-Condizioni per         Il sistema deve presentare al medico la classificazione delle
                                  cellule riconosciute nelle immagini dei campi
      Successo:
      Post-Condizioni per
      Fallimento:
      Estende il caso d’uso:
      Specializza il caso
      d’uso:

   2. Scenario Base

      Passo        Descrizione del passo
      1             Acquisire path immagini campi
      2            Extension point: Ricerca biofilm
      3            Il medico richiede di avviare l’estrazione e classificazione delle cellule
      4            Il sistema sottopone l’input immesso dal medico (path immagini campi) a
                    Riconoscimento cellule da campi
      5            Il sistema sottopone le immagini delle cellule riconosciute dai campi al
                    Classificazione cellule
      6            Il sistema visualizza la classificazione delle cellule proposta
      7            Extension point: Richiesta visualizzazione conta cellule (RF 6.)

ANNO ACCADEMICO 2017-2018                                                                         !33
Riconoscere biofilm

   1. Informazioni di base

      Obiettivo:                  Permette il riconoscimento del biofilm dalle immagini dei
                                  campi

      Pre-Condizioni:             Le immagini dei campi devono essere disponibili sul file
                                  system del computer del medico

      Post-Condizioni per
      Successo:
      Post-Condizioni per
      Fallimento:
      Estende il caso d’uso:      Proporre classificazione

      Specializza il caso
      d’uso:

   2. Scenario Base

      Passo        Descrizione del passo
      1            Il medico richiede il riconoscimento del biofilm durante la fase di estrazione
                   cellule e classificazione
      2            Il sistema sottopone l’input immesso dal medico (path immagini campi) a
                    Riconoscimento cellule da campi

ANNO ACCADEMICO 2017-2018                                                                           !34
Visualizzare conta cellule

   1. Informazioni di base

      Obiettivo:                  Permette di visualizzare il conteggio delle cellule classificate
                                  ripartito per classe

      Pre-Condizioni:             Devono essere presenti cellule classificate

      Post-Condizioni per
      Successo:
      Post-Condizioni per
      Fallimento:
      Estende il caso d’uso:      Proporre classificazione
                                  Gestire revisione classificazione

      Specializza il caso
      d’uso:

   2. Scenario Base

      Passo        Descrizione del passo
      1            Il medico richiede la visualizzazione della conta cellulare
      2            Il sistema visualizza un pannello nel quale riporta il numero di cellule
                   suddivise per classe

ANNO ACCADEMICO 2017-2018                                                                            !35
Gestire revisione classificazione

   1. Informazioni di base

      Obiettivo:                  Permette al medico di rivedere la classificazione cellulare
                                  effettuata dal sistema e di modificarla

      Pre-Condizioni:             Deve essere stato effettuato il riconoscimento cellule e la
                                  classificazione

      Post-Condizioni per
      Successo:
      Post-Condizioni per
      Fallimento:
      Estende il caso d’uso:
      Specializza il caso
      d’uso:

   2. Scenario Base

      Passo        Descrizione del passo
      1            Il sistema visualizza una anteprima delle immagini delle cellule suddivise per
                   classi (RF 2.3.)
      2            Il medico seleziona una immagine
      3             Modificare classificazione cellula
      4            Extension point: Richiesta visualizzazione conta cellule

ANNO ACCADEMICO 2017-2018                                                                       !36
Modificare classificazione cellula

   1. Informazioni di base

      Obiettivo:                  Permette al medico di rivedere in dettaglio l’immagine della
                                  cellula e di cambiarne, se necessario, la classificazione

      Pre-Condizioni:
      Post-Condizioni per
      Successo:
      Post-Condizioni per
      Fallimento:
      Estende il caso d’uso:
      Specializza il caso
      d’uso:

   2. Scenario Base

      Passo        Descrizione del passo
      1            Extension point: Editor grafico
      2            Se la classificazione non è corretta
      3             Il sistema presenta un menu contestuale contenente le classi di cellule
      4             Il medico seleziona la classe di cellule che ritiene corretta
      5             Il sistema assegna l’immagine alla classe selezionata dal medico
      6            Altrimenti
      7             Extension point: Invio a server

ANNO ACCADEMICO 2017-2018                                                                        !37
Visualizzare immagine in editor grafico

   1. Informazioni di base

      Obiettivo:                  Permette al medico di rivedere in dettaglio l’immagine della
                                  cellula

      Pre-Condizioni:
      Post-Condizioni per
      Successo:
      Post-Condizioni per
      Fallimento:
      Estende il caso d’uso:      Modificare classificazione cellula

      Specializza il caso
      d’uso:

   2. Scenario Base

      Passo        Descrizione del passo
      1            Il medico seleziona l’immagine di una cellula con doppio click
      2            Il sistema invoca l’editor grafico di default del sistema mostrando l’immagine

ANNO ACCADEMICO 2017-2018                                                                        !38
Caricare immagine cellula su server di condivisione

   1. Informazioni di base

      Obiettivo:                  Permette al medico di inviare l’immagine della cellula
                                  classificata al server di condivisione cellule classificate

      Pre-Condizioni:             Deve essere attivo il server di condivisione cellule classificate

      Post-Condizioni per
      Successo:
      Post-Condizioni per
      Fallimento:
      Estende il caso d’uso:      Modificare classificazione cellula

      Specializza il caso
      d’uso:

   2. Scenario Base

      Passo        Descrizione del passo
      1            Il medico decide di inviare l’immagine classificata al server
      2            Il sistema invoca il  Server condivisione cellule classificate,
                   inviandogli l’immagine della cellula e la classe di appartenenza della stessa

ANNO ACCADEMICO 2017-2018                                                                          !39
Proporre diagnosi

   1. Informazioni di base

      Obiettivo:                 Permette di definire una diagnosi da sottoporre all’attenzione
                                 del medico, sulla base della natura e del numero di cellule
                                 individuate e sull’anamnesi.

      Pre-Condizioni:            Deve essere stato effettuato il riconoscimento cellule e la
                                 classificazione e deve essere stata caricata l’anamnesi

      Post-Condizioni per
      Successo:
      Post-Condizioni per
      Fallimento:
      Estende il caso d’uso:
      Specializza il caso
      d’uso:

   2. Scenario Base

      Passo        Descrizione del passo
      1            Il sistema invoca il  Diagnosi inviandogli le informazioni
                   necessarie per la costruzione della diagnosi
      2            

ANNO ACCADEMICO 2017-2018                                                                         !40
Creare report diagnosi

   1. Informazioni di base

      Obiettivo:                  Permette di produrre un report pdf con una possibile diagnosi
                                  da sottoporre all’attenzione del medico

      Pre-Condizioni:
      Post-Condizioni per
      Successo:
      Post-Condizioni per
      Fallimento:
      Estende il caso d’uso:
      Specializza il caso
      d’uso:

   2. Scenario Base

      Passo        Descrizione del passo
      1            Il sistema produce un report pdf contenente i dati anagrafici del paziente,
                   l’anamnesi e la possibile diagnosi

ANNO ACCADEMICO 2017-2018                                                                         !41
Sottosistema Gestionale: il diagramma delle classi principali

Di seguito viene riportato il diagramma contenente le principali classi del modello
concettuale          relativo       al    sottosistema           Gestionale.

!

ANNO ACCADEMICO 2017-2018                                                        !42
Implementazione
                          Linguaggi e ambienti utilizzati

La scelta dei linguaggi di programmazione per implementare il sistema si è riversata
su Java, Python e CLIPS. Nello specifico, Java è stato utilizzato come linguaggio per
la realizzazione dell’interfaccia e la gestione di tutti i task “gestionali”, Python è stato
utilizzato per realizzare i sistemi di back-end quali il riconoscitore di cellule, il
classificatore, e i sistemi di riconoscimento del codice fiscale, mentre CLIPS è stato
utilizzato per realizzare un sistema esperto che fornisca la diagnosi. La scelta di
utilizzo di Java e Python è dovuta principalmente alla possibilità di realizzare
applicazioni cross-platform, purtroppo al costo di una diminuzione delle prestazioni
del sistema stesso.

Python è un linguaggio di programmazione ad alto livello, orientato agli oggetti e
adatto ad implementare applicazioni distribuite, scripting, computazione numerica e
system testing. Proprio per questo è stato utilizzato nell’ambito di image recognition e
image analysis.

Si tratta di un linguaggio a tipizzazione dinamica che supporta diversi paradigmi, le
cui peculiarità sono dinamicità, semplicità e flessibilità. Tra i vari paradigmi rientra il

ANNO ACCADEMICO 2017-2018                                                                !43
paradigma object oriented, la programmazione strutturata e molte caratteristiche di
programmazione funzionale.

Le caratteristiche più importanti e più note di Python sono le variabili non tipizzate e
l'uso dell'indentazione per la definizione di funzioni e metodi. Inoltre, Python permette
l'overloading di operatori e funzioni tramite delegation, consta di un ampio spettro di
tipi e funzioni di base e librerie standard, sintassi avanzate quali slicing e list
comprehension.

Questo linguaggio è dotato di una velocità di esecuzione minore rispetto ai linguaggi
compilati staticamente tipizzati, come ad esempio il C (linguaggio imperativo), specie
nel calcolo matematico. Può essere supportato da estensioni in grado di velocizzare in
modo notevole alcuni tipi di codice, specialmente l'implementazione di algoritmi, a
discapito di un incremento della memoria utilizzata.

Anche Java è un linguaggio di programmazione ad alto livello, orientato agli oggetti.
Java è stato uno dei primi linguaggi a rimuovere caratteristiche che creano confusione
(e sono raramente usate) come, ad esempio, i puntatori espliciti e l’overloading di
operatori. Mediante il garbage collector si prende cura della gestione della memoria ,

ANNO ACCADEMICO 2017-2018                                                              !44
collezionando gli oggetti inutilizzati in maniera automatica. Come è stato già detto in
precedenza, Java è un linguaggio indipendente dalla piattaforma poiché i programmi,
dopo la compilazione, sono convertiti in un linguaggio intermedio chiamato bytecode
che non varia in base alla macchina che lo esegue. Nello specifico, il bytecode può
essere eseguito su qualsiasi macchina mediante un interprete chiamato Java Virtual
Machine (JVM) permettendo la riusabilità del codice. Inoltre Java è linguaggio che
sfrutta il multithreading: può eseguire vari compiti nello stesso momento definendo
multipli threads. Per esempio, un programma può gestire una Interfaccia Grafica
(GUI) mentre aspetta un input da una connessione alla rete. Questo è realizzato
usando un thread differente da quello di default della GUI per gestire il secondo task.
Questo rende anche la GUI responsive.

ANNO ACCADEMICO 2017-2018                                                            !45
CLIPS (C Language Integrated Production System) è stato sviluppato al Centro
Spaziale Johnson della NASA dal 1985 al 1996 ed è un linguaggio di programmazione
basato sull’uso delle regole, utile per la creazione di sistemi esperti e di altri
programmi dove una soluzione euristica è più facile da implementare e mantenere
piuttosto che una soluzione algoritmica.

E’ stato scritto in C per la portabilità, il che rende anch’esso cross-platform. Dal 1996,
CLIPS è stato rilasciato al pubblico.

Esiste inoltre una interfaccia realizzata in Java (CLIPS Java Native Interface) per
CLIPS che ha reso possibile l’integrazione del sistema esperto nell’applicazione.

Gli ambienti di sviluppo utilizzati sono:

- IntelliJ, IDE utilizzato per la realizzazione dell’applicazione in Java (GUI e Server)

- SublimeText3, editor di codice sorgente con una API Python integrata. E’ stato usato
 per la realizzazione e debugging di script in python e per una più facile gestione
 (mediante plugins) dell’interfaccia grafica realizzata mediante l’uso di JavaFX (e i
 file .fxml)

- JavaFX Scene Builder, un visual layout tool che permette di realizzare l’aspetto
 grafico di JavaFX user interfaces, senza scrivere codice. L’utente può effettuare drag
 e drop sulle componenti UI nell’area di lavoro, modificarne le proprietà, applicare
 fogli di stile mentre il codice FXML per il layout realizzato viene generato
 automaticamente in background. Il risultato è un file FXML che può essere
 combinato con un progetto Java per legare l’interfaccia utente alla logica
 dell’applicazione

ANNO ACCADEMICO 2017-2018                                                               !46
Librerie utilizzate
Java
 •     Py4j - interaction between java and python. Let python access JVM objects.
 •     JavaFx - GUI Crossplatform
          ◦ JFoenix - A JavaFx material design library
 •     Gson - A Java serialization/deserialization library to convert Java Objects into
       JSON and back
 •     iText - Easy PDF generation and manipulation for Java and .NET developers
 •     Annotations - Refer to this link to add annotations.jar in IntelliJ Project
 •     ClipsJNI - Clips Java Native Interface
          ◦ Italian page describing how to use it
Python
 •     Py4j - interaction between java and python. Let python access JVM objects.
 •     OpenCV - Open Source Computer Vision Library, Python port
          ◦ Requires numpy
 •     pyzbar
          ◦ Requires ZBar
 •     Keras
 •     Tensorflow
 •     Mahotas
Anaconda distro
 •     Matplotlib
 •     Scipy
 •     Scikit Image

ANNO ACCADEMICO 2017-2018                                                            !47
OpenCV

OpenCV è una libreria software open-source multipiattaforma utilizzata nell’ambito
della visione artificiale. È stata sviluppata nel linguaggio C++ ma è possibile
interfacciarsi con essa anche attraverso il linguaggio C, Python e Java. Per questo
lavoro, sono state utilizzate le funzioni di ridimensionamento e di conversione in scala
di grigi.

Mediante OpenCV, inoltre, è stata possibile la lettura       dello stream video della
webcam e la relativa visualizzazione sullo schermo.

ANNO ACCADEMICO 2017-2018                                                             !48
Guida all’installazione e all’uso per il medico

Per poter utilizzare il sistema è necessario compiere le seguenti operazioni:

1. Accertarsi che siano installati

   1.1.Anaconda for Python 3.5 o superiore

       1.1.1.Controllare la versione di python: terminale/prompt dei comandi : python
           —version

            • Se la versione che viene mostrata non è la 3.5 o superiore ed è già stato
                installato python dal sito https://www.python.org/downloads/ , da
                terminale/prompt dei comandi: alias python=‘python3.x’ dove x è la
                versione di python scaricata

       1.1.2.Controllare l’installazione di Anaconda: da terminale/prompt dei
           comandi: conda list

   1.2. Java SE Development Kit 8

       1.2.1.    Reperibile      da     http://www.oracle.com/technetwork/java/javase/
           downloads/jdk8-downloads-2133151.html

   1.3. Git: da terminale/prompt dei comandi: git —version

       1.3.1. Reperibile da https://git-scm.com/book/it/v1/Per-Iniziare-Installare-Git

2. Installare le librerie Python: da terminale:

   2.1.brew install zbar (se è installato Homebrew su Mac) o http://
       zbar.sourceforge.net/download.html

   2.2.pip install pyzbar

   2.3.pip install opencv-python

   2.4.pip install py4j

   2.5.pip install --upgrade tensorflow

   2.6.pip install keras

ANNO ACCADEMICO 2017-2018                                                                !49
2.7.pip install mahotas

   2.8.pip install sklearn

3. Installare CLIPS Java Native Interface

   3.1. https://bitbucket.org/fverdoja/xclipsjni/wiki/Come_installare_ClipsJNI

4. USANDO MAC OS X da terminale eseguire i seguenti comandi per settare Java 8

   4.1. /usr/libexec/java_home -V

   4.2. export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

5. Creare nella cartella Utente una cartella “Data” e copiare all’interno i seguenti
   file:
   • webcam.py
   • watershed_extraction.py
   • foto.py
   • classificatore.py
   • biofilm_detection_java.py
   • my_model.h5
   • weights.best.hdf5

6. Eseguire il Jar mediante doppio click o da terminale con il comando “java -jar
   ”

ANNO ACCADEMICO 2017-2018                                                         !50
Guida all’installazione e modifica del sistema

Per poter utilizzare il sistema è necessario compiere le seguenti operazioni:

1. Accertarsi che siano installati

   1.1.Anaconda for Python 3.5 o superiore

       1.1.1.Controllare la versione di python: terminale/prompt dei comandi : python
           —version

            • Se la versione che viene mostrata non è la 3.5 o superiore ed è già stato
                installato python dal sito https://www.python.org/downloads/ , da
                terminale/prompt dei comandi: alias python=‘python3.x’ dove x è la
                versione di python scaricata

       1.1.2.Controllare l’installazione di Anaconda: da terminale/prompt dei
           comandi: conda list

   1.2. Java SE Development Kit 8

       1.2.1.    Reperibile      da      http://www.oracle.com/technetwork/java/javase/
           downloads/jdk8-downloads-2133151.html

   1.3. Git: da terminale/prompt dei comandi: git —version

       1.3.1. Reperibile da https://git-scm.com/book/it/v1/Per-Iniziare-Installare-Git

2. Utilizzando IntelliJ Idea

   2.1. Eseguire git clone di https://github.com/Rensykes/Rinocitologia.git (File >
       New > Project From Version Control > Git > URL: https://github.com/
       Rensykes/Rinocitologia.git)

   2.2. Accertarsi che le librerie siano state aggiunte al CLASSPATH e che il Project
       SDK sia Java 1.8 (dovrebbe essere automatico)

       2.2.1. File > Project Structure

          2.2.1.1. Project > Project SDK

ANNO ACCADEMICO 2017-2018                                                                !51
2.2.1.2. Libraries > libs > Classes dovrebbe contenere varie librerie

              2.2.1.2.1. Se non sono presenti -> usare il tasto + in basso alla schermata
                  Classes, navigare fino alla root del progetto ,      entrare in libs e
                  selezionare tutte le librerie

3. Installare le librerie Python: da terminale:

   3.1.brew install zbar (se è installato Homebrew su Mac) o http://
       zbar.sourceforge.net/download.html

   3.2.pip install pyzbar

   3.3.pip install opencv-python

   3.4.pip install py4j

   3.5.pip install --upgrade tensorflow

   3.6.pip install keras

   3.7.pip install mahotas

   3.8.pip install sklearn

4. Installare CLIPS Java Native Interface

   4.1. https://bitbucket.org/fverdoja/xclipsjni/wiki/Come_installare_ClipsJNI

ANNO ACCADEMICO 2017-2018                                                             !52
Uno sguardo d’insieme al sistema

     Architettura adottata: il pattern MVC

Per la realizzazione del sistema, in conformità con lo standard J2EE, è stata adottata
un’architettura basata sul pattern MVC (Model, View, Control).

Lo scopo principale di questo pattern è quello di separare il livello di presentazione in
pezzi autonomi e riutilizzabili. Affinché la scelta del pattern MVC risulti efficace,
l’applicazione deve fornire una interfaccia grafica (GUI) costituita da più schermate,
che mostrano vari dati all’utente. Inoltre le informazioni che devono essere
visualizzate devono essere sempre quelle aggiornate.

I componenti principali del sistema si suddividono in tre gruppi:

- Views

- Model

- Controllers

ANNO ACCADEMICO 2017-2018                                                              !53
Nello specifico:

- MODEL: implementa il core dell’applicazione, incapsulandone lo stato e definendo
  i dati e le operazioni che possono essere eseguite su questi. Definisce, dunque, le
  regole di business per l’interazione con i dati, esponendo alla view ed al controller
  rispettivamente le funzionalità per l’accesso e l’aggiornamento.

- VIEW: la logica di presentazione dei dati viene gestita solo e solamente dalla view.
  La view deve gestire fondamentalmente la costruzione dell’interfaccia grafica (GUI)
  che rappresenta il mezzo mediante il quale gli utenti interagiranno col sistema. Per il
  sistema, si è scelto di usare il modello di “pull Model”, ossia un modello nel quale
  la view richiede gli aggiornamenti quando lo ritiene “opportuno”. Inoltre delega al
  controller l’esecuzione dei processi richiesti dall’utente dopo averne catturato gli
  input e la scelta delle eventuali schermate da presentare.

- CONTROLLER: ha la responsabilità di trasformare le interazioni dell’utente della
  view in azioni eseguite dal model. Il controller, tuttavia, non rappresenta un
  semplice ponte tra view e model. Realizza la mappatura tra input dell’utente e
  processi eseguiti dal model selezionando le schermate delle view richieste.
  Implementa la logica di controllo dell’applicazione.

L'applicazione deve avere una natura modulare e basata sulle responsabilità, al fine di
ottenere una vera e propria applicazione component - based. Questo è conveniente per
poter più facilmente gestire la manutenzione dell'applicazione. Per esempio ai nostri
giorni, con la massiccia diffusione delle applicazioni enterprise, non è possibile
prevedere al momento dello sviluppo, in che modo e con quale tecnologia gli utenti
interagiranno con il sistema (WML?, XML?, WI-FI?, HTML?). Appare quindi chiaro
il bisogno di un'architettura che permetta la separazione netta tra i componenti
software che gestiscono il modo di presentare i dati, e i componenti che gestiscono i
dati stessi.

ANNO ACCADEMICO 2017-2018                                                             !54
I seguenti diagrammi di sequenza
                                             mostrano la sequenza di “chiamate” che
                                             vengono effettuate dalle componenti del
                                             sistema in due scenari fondamentali:

                                             - Scenario di aggiornamento dati

                                             - Scenario di selezione schermata

Scenario di aggiornamento
dati

Nella          fi g u r a          in
sovrimpressione                    si
evidenzia lo scambio di
messaggi        tra         i      tre
partecipanti al pattern, che
nonostante possa sembrare
inutile    a    prima           vista,
garantisce pagine sempre
aggiornate in tempo reale.

Scenario di selezione schermata

Nella figura vengono enfatizzati i ruoli di View e Controller. La view infatti non
decide quale sarà la schermata richiesta, delegando ciò alla decisione del Controller:
piuttosto si occupa della costruzione della presentazione all’utente della schermata
stessa.

ANNO ACCADEMICO 2017-2018                                                           !55
Conseguenze e conclusioni sul pattern MVC

- Sfruttando il pattern MVC si garantisce una parziale riusabilità del sistema (in ottica
 di modifiche future). La separazione tra Model e View permette a diverse GUI di
 utilizzare lo stesso Model. Conseguentemente, i componenti del Model sono più
 semplici da testare e manutenere.

- Supporto più semplice per nuovi tipi di client. Basterà creare nuove View e
 Controller per interfacciarmi a un model già implementato e testato.

     Le componenti del sistema
Di seguito è riportato il diagramma dei Package del sistema.

Principalmente, il Package views contiene le componenti MVC Views (i file con
estensione .fxml) che contengono solamente la logica di presentazione dei dati e le
componenti MVC Controllers. Ad ogni view si è associato un controller per ridurre il
numero di dipendenze funzionali tra i moduli.

Il package rinocitologia contiene le componenti MVC Model quali Patient, Cell,
Anamnesi, Resistenza e Diagnosi.

ANNO ACCADEMICO 2017-2018                                                             !56
E’ stato creato, inoltre, il package utility contenente tutte le classi custom che non
rientrano nell’elenco dei componenti MVC e che svolgono funzioni di utilità e
supporto.

ANNO ACCADEMICO 2017-2018                                                           !57
Integrazione dei sottosistemi: Python
Java fornisce un supporto API per la gestione di processi lightweight (i thread) e di
processi heavyweight (processi che richiedono molta memoria e risorse).

Ogni programma Java ha un’istanza della classe Runtime che incapsula l’ambiente a
runtime del programma. Questa classe non viene istanziata ma possiamo ottenere una
referenza a Runtime del programma in esecuzione con la chiamata al metodo statico
Runtime.getRuntime().

Il metodo exec di Runtime (uno degli overloaded exec) restituisce una referenza a
un’istanza di Process. Questo metodo può essere usato per eseguire un processo
separato.

I metodi definiti da Process possono essere usati per eseguire operazioni di input/
output , controllare lo stato di uscita del processo, aspettare che completi e terminare
il processo. Ad ogni modo, i processi cosi creati non dispongono di una console
propria, bensì gli input, output e errori sono redirezionati al processo genitore e si può
accedere    ad    essi   usando   metodi     come   getInputStream,    getOutputStream,
getErrorStream.

Nello specifico, nel sistema, viene usata la classe astratta ProcessBuilder che permette
di generare un processo prendendo il comando da eseguire e gli argomenti come
parametri del costruttore e di ottenere un’istanza di Process creandolo direttamente
dal ProcessBuilder.

Un esempio è:
     ProcessBuilder pb = new ProcessBuilder("python","foto.py");
     Process p = pb.start();

Nonostante sia possibile effettuare un passaggio di informazioni tra il processo
generato (script in Python) e il processo genitore, si è optato per l’utilizzo della
libreria Py4J per svolgere questo compito.

ANNO ACCADEMICO 2017-2018                                                               !58
Py4J

Py4J permette ai programmi Python che girano su interprete Python di accedere
dinamicamente a oggetti Java nella JVM. I metodi vengono chiamati come se gli
oggetti Java risiedessero nell’interprete Python e le Java Collections possono essere
usate mediante i metodi standard di Python per le collezioni.

Py4J permette inoltre ai programmi Java di eseguire callback su oggetti Python.

Ovviamente, è necessario startare preliminarmente la JVM in quanto non può essere
startata da Python.

     Come è stata usata nell’applicazione
All’avvio dell’applicazione viene avviato il server Gateway sulla porta 25335 che
permette a Python di accedere agli oggetti Java nella JVM.

  GatewayServer server;
  . . .
  patient = new Patient("Anonimo", Integer.toString(number));
  server = new GatewayServer(patient, 25335);
  server.start();

ANNO ACCADEMICO 2017-2018                                                          !59
Questo permette di utilizzare la classe Patient (e il rispettivo oggetto creato a runtime)
come punto di accesso per Python. Patient, che coincide con il Model principale del
programma, conterrà tutte le informazioni necessarie per integrare gli script Python
con l’applicazione realizzata in Java.

# connect to the JVM

gateway = JavaGateway(gateway_parameters =
GatewayParameters(port=25335))

# get the patient path

patient = gateway.entry_point

path = patient.getPathCampi() # path che ricevo da                         doc

ANNO ACCADEMICO 2017-2018                                                               !60
Integrazione dei sottosistemi: CLIPS

Per l’integrazione di CLIPS , linguaggio di programmazione a regole utile per la
creazione di sistemi esperti e altri programmi dove una soluzione euristica è più facile
da implementare e mantenere di una soluzione algoritmica, è stata usata la Interfaccia
Nativa per Java: CLIPS JNI.

Mediante essa, viene istanziato un nuovo Environment CLIPS il quale viene poi
settato e reso pronto all’uso mediante il caricamento nella Working Memory di
templates per i fatti (cellula, diagnosi, prick-test, famiglia, sintomo, scoperta,
rinomanometria), di regole che portano alla diagnosi e di funzioni di supporto.

     clips = new Environment();
     clips.clear();
     clips.loadFromResource("/clips/fatti.clp");
     clips.loadFromResource("/clips/functions.clp");
     clips.loadFromResource("/clips/diagnosi.clp");
     clips.reset();

Mediante la funzione eval di Environment è possibile lanciare da Java comandi scritti
in linguaggio CLIPS. L’intefaccia, inoltre, fornisce anche dei wrapper per le principali
“strutture dati” presenti in CLIPS come MultifieldValue, FactAddressValue ed i
metodi per accedere alle informazioni in esse contenute, utili per ottenere
informazioni dai risultati ottenuti mediante la valutazione (eval) di comandi CLIPS.

ANNO ACCADEMICO 2017-2018                                                              !61
Puoi anche leggere