Progettazione e sviluppo di un sistema gestionale e integrazione dei sottosistemi di analisi per la rinocitologia
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
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
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
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
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
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
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
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
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
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