Visita il progetto
Transcript
Visita il progetto
Implementazione di un Sistema per il Browsing di Immagini in Collezioni Fotografiche Personali Rosolino Finazzo Università degli Studi di Palermo Laurea in Ingegneria Informatica AA 2007-2008 Relatore Prof. Marco La Cascia Abstract—L’applicativo realizzato consiste in un sistema per il browsing di immagini in un album fotografico personale, con l’aggiunta di un rapido sistema di visualizzazione dei volti delle persone che popolano l’immagine. Le immagini contenenti i volti, estratte dalle foto dell’album stesso, sono catalogate in un archivio di miniature, e associate alla foto di provenienza, attraverso un file di indicizzazione di tipo CSV 1 . L’applicativo è stato rilasciato come prodotto RCP, ovvero una Eclipse Rich Client Application, che fa uso di un set minimale di plug-ins Eclipse Based. I. L’ AMBIENTE E CLIPSE RCP La Piattaforma Eclipse è stata ideata per essere utilizzata come una piattaforma di sviluppo aperta, di conseguenza, essa è stata strutturata in modo che i suoi componenti possano essere usati al fine di costruire degli applicativi per utenti finali. Il set minimale di plug-ins che occorrono per costruire una Rich Client application è comunemente conosciuto come la Rich Client Platform. Gli applicativi diversi dagli IDE possono essere costruiti usando un sottoinsieme delle componenti della piattaforma. Queste Rich Applications sono ancora realizzate mediante un modello dinamico basato su plug-in , e l’interfaccia utente è costruita usando gli stessi toolkits e punti d’estensione. Il layout e la funzione del workbench2 sono, in questo contesto, sotto stretto controllo dello sviluppatore di plug-in. Nel dire che la Rich Client Platform è il set minimale di plug-in utilizzati per costruire una platform application, con un’interfaccia utente, si intende che tale applicazione necessita almeno di due plug-in, org.eclipse.ui e org.eclipse.core.runtime delle loro dipendenze. Ad ogni modo le rich client applications possono utilizzare qualsiasi API ritenuta necessaria per le loro caratteristiche aggiuntive e possono richiedere l’integrazione di qualsiasi plug-in al di sopra dello stretto indispensabile. Tra i vari esempi citiamo l’interfaccia utente per la guida in linea e il gestore degli aggiornamenti. 1 Comma 2 Col separated values termine workbench si vuole intendere l’ambiente di lavoro II. I L DATABASE DELLE IMMAGINI Il materiale dato in dotazione, come campione per le prove di funzionamento, è distribuito in due directory e un file di testo. La directory pics contiene l’insieme delle immagini di un album fotografico. In ognuna delle foto sono ritratti alcuni soggetti in numero variabile. La directory faces contiene i volti estratti dalle suddette immagini.I files hanno un nome il cui prefisso fa riferimento al nome dell’immagine di provenienza. Il file di indicizzazione, data.txt è un file di tipo CSV, cioè contiene dei valori separati da virgola, in particolare il primo valore è il nome di un’immagine contenuta in pics, i valori successivi sono i nomi delle miniature contenute in faces inerenti alla foto. Per chiarificare la struttura di un file di tipo CSV ne viene riportato un esempio. immagine1.jpg,faccia1.jpg,faccia2.jpg immagine2.jpg immagine3.jpg,faccia3.jpg .... immagineN.jpg, ........ III. L A GUI L’interfaccia grafica è stata realizzata grazie al framework RCP dell’ IDE Eclipse, essa consiste di: • Un Navigatore di immagini • Un Editor di immagini • Un pannello contenente le miniature dei volti A. Pictures Navigator Il Navigatore di Immagini è un’estensione della classe Resource Navigator, generalmente impiegata nell’IDE Eclipse per la gestione delle risorse su file system. Inizialmente l’utente puó creare un nuovo progetto, o importarne uno giá aperto in precedenza. Naturalmente un progetto deve essere aperto su una directory contenente il Database nella struttura di cui si è precedentemente detto; se dovesse Fig. 2. Fig. 1. Image Editor Pictures Navigator mancare il file per l’indicizzazione o le directory contenenti le immagini, verrá sollevata un’eccezione e l’errore verrá notificato all’utente. Tramite l’aggiunta di particolari filtri è stato possibile selezionare, in base all’estensione, esclusivamente i file di tipo immagine tra quelli visualizzabili. È importante sottolineare che al riavvio dell’applicativo troveremo nel Pictures Navigator, gli stessi progetti presenti all’ultima chiusura dell’applicativo. B. Image Editor L’ Editor di Immagini offre due modalitá di visualizzazione: Fig. 3. Image Editor con anteprime Fig. 4. Binder Panel La modalitá di visualizzazione con anteprime 3 consente di visualizzare la miniatura delle immagini del photo album. Con un semplice doppio click, su una qualsiasi anteprima, si ritorna alla modalitá di visualizzazione a tutto schermo. 1) Immagine a tutto schermo 2) Immagini in anteprima Le operazioni effettuabili su un’immagine a tutto schermo sono le seguenti: • • • • • Vai alla prossima foto o alla precedente Rotazione di 90 gradi Zoom In o Zoom Out Dimensione a grandezza naturale Adatta la dimensione alla pagina Al di sotto dell’immagine troviamo una Status Line che ci offre informazioni riguardanti la dimensione, la profonditá in bit, la risoluzione e il nome della foto. C. Binder Panel Il pannello di visualizzazione delle facce, è una Eclipse View, 4 nella quale vengono disposte le miniature di ogni volto. É possibile stabilire un numero massimo di miniature da visualizzare, specificando tale numero nel menú Settings, questo riduce i tempi di caricamento nel caso in cui un numero elevato di soggetti popola l’immagine. 3 Thumbnails 4 Una Vista è un pannello utilizzato per mostrare proprietá relative ad un editor attivo Fig. 5. La GUI di Face Binder IV. S ETTINGS Il pannello Settings, accessibile dal menù file o dall’icona apposita della toolbar, consente di selezionare il numero massimo di miniature presenti nel Binder Panel, tale valore è 10 di default. Quando l’utente seleziona un valore, e applica la modifica, quest’informazione viene memorizzata in un file data.dat.In questo modo è possibile ricavare gli stessi settaggi ad ogni riavvio dell’applicazione. Il valore 0 indica che nessuna restrizione verrà applicata, e il numero di immagini visualizzate corrisponderà al numero di volti associati all’immagine d’origine. Fig. 7. Pannello delle dipendenze di ”Face Binder” stesso; esso è contenuto all’interno del progetto di sviluppo di un plug-in, o una collezione di plug-ins5 , o di un prodotto finito come nel caso di un RCP. In particolare, nel modello Eclipse, un plug-in può essere correlato con un altro plug-in, per mezzo di una delle due seguenti relazioni: 1) Dipendenza. I ruoli in questa relazione sono plug-in dipendente, e plug-in richiesto. Un plug-in richiesto supporta le funzionalità di un plug-in dipendente. 2) Estensione. I ruoli in questa relazione sono plug-in ospite e plug-in estensore. Un plug-in estensore estende le funzionalità di un plug-in ospite. A. Dipendenza Fig. 6. L’impostazione del numero di volti visibili V. I NFRASTRUTTURA DEL PLUG - IN FACE B INDER Al fine di gestire l’interazione tra i vari plug-in che compongono la Rich Client Application, Eclipse mette a disposizione degli sviluppatori, un ambiente per la dichiarazione dei vari plug-in caricati in runtime. In questo contesto non dobbiamo vedere l’RCP come prodotto finito quale è, ma come un plug-in interamente gestito e implementato dal team di sviluppatori che ne diventano i legittimi autori. È interessante notare come alcune caratteristiche di portabilità, visibilità ed estensibilità, tipiche dello sviluppo di classi in un linguaggio ad oggetti, diventano problematiche comuni, ad un livello più alto, nell’approccio dichiarativo adottato nella realizzazione di un plug-in Eclipse. Questa complessa infrastruttura, viene rappresentata in un file particolare, plugin.xml, una sorta di manifesto delle proprietà del plug-in La dipendenza, cosı̀ come definita nel file plugin.xml è una direttiva data sia in fase d’esecuzione che in fase di compilazione. In esecuzione, Eclipse deve far si che il plugin richiesto possa essere disponibile per il plug-in dipendente quando quest’ultimo viene attivato. In fase di compilazione, Eclipse viene abilitato a espandere il classpath6 per compilare il plug-in dipendente, dei files jar di tutti i plug-in necessari B. Estensione Un plug-in dichiara punti di estensione, in modo che gli altri plug-in possano estendere le funzionalità del plug-in d’origine, in modo del tutto controllato. Questo meccanismo offre un livello di separazione, in modo che il plug-in d’origine non debba raccogliere informazioni in merito all’esistenza dei 5 Una collezione di plug-in prende il nome di feature Classpath è una variabile che indica alla JVM dove cercare le classi e i packages definiti dall’utente 6 Il Fig. 8. Pannello delle estensioni di ”Face Binder” plug-in estensivi, al momento della sua costruzione. I plug-in, dichiarano i punti d’estensione in una sezione del loro manifesto plugin.xml. Nel caso dell’applicativo Face Binder, diversi tipi di estensione sono definiti; ad esempio sono inclusi quei plug-in necessari alla creazione, gestione e organizzazione di widgets grafici, come org.eclipse.ui.views, org.eclipse.ui.editors. L’estensione org.eclipse.ui.actionSets, invece definisce le actions, ovvero delle classi delegate all’apertura di schermate, non appena viene registrato l’evento di selezione di un particolare bottone, o di una voce di menù. Le estensioni org.eclipse.core.runtime.preferences e org.eclipse.ui.preferencePages, includono tutti quei packages di supporto per la creazione delle pagine di preferenza, e per la gestione dei dati definiti dall’utente. In ultimo, org.eclipse.core.runtime.products, permette di delineare tutte quelle scelte, definite in fase di esportazione del progetto in eseguibile, concernenti l’aspetto finale del prodotto (icone, schermata d’avvio, nome, versione, About Page), ma anche a selezionare i plug-in da includere nel bundle, che il prodotto finale porta con se, e di cui necessita in tempo d’esecuzione, per l’attivazione di una particolare funzionalità. Fig. 9. Estensione della vista Binder sul manager grafico sulle estensioni dichiarate, senza caricare i plug-in a cui tali informazioni si rifericono, riducendo quindi il costo di tempo e memoria richiesto per un’operazione. A titolo d’esempio si riporta, la definizione dell’estensione Binder, grazie alla quale è attiva la vista contenente il pannello omonimo, dedicato alla visualizzazione delle miniature facciali. In particolare è presentata una duplice versione di tale dichiarazione, l’IDE Eclipse infatti consente di intervenire sul file plugin.xml, sia con un manager grafico, sia modificando direttamente il file nel formato xml8 . <e x t e n s i o n p o i n t =” o r g . e c l i p s e . u i . v i e w s ”> <view c l a s s =” i m a g e r e t r i e v e r . F a c e s T h u m b n a i l s ” i c o n =” i c o n s / b i n d e r 1 6 . png ” i d =” I m a g e R e t r i e v e r . F a c e T h u m b n a i l s ” name=” B i n d e r ”> </ view> </ e x t e n s i o n> Listing 1. Codice xml per l’estensione della vista Binder VI. D ESIGN E IMPLEMENTAZIONE DELLE CLASSI Ogni tipo di punto d’estensione, può richiedere diversi attributi per essere propriamente definito. Tipicamente, l’ attributo ID, ha la stessa forma dell’identificatore di un plugin. L’ID di categoria, offre la possibilità ad ogni estensione, ad esempio una vista, di identificare univocamente la categoria che lo contiene .7 I due attributi ID, della categoria e della vista in se, sono valori espressi in stringhe di caratteri, mentre l’attributo icona, specifica il percorso relativo dalla directory del plug-in, all’immagine associata alla vista. Quest’approccio consente all’IDE, di caricare le informazioni 7 Una categoria definisce un gruppo di viste che hanno una certa attinenza I Java Packages, di riferimento per la comprensione del funzionamento del progetto Face Binder e per una sua eventuale estensione, sono i seguenti: • imageretriever • imageretriever.preferences • quickimage.editors Il package imageretriever contiene le classi utilizzate per la gestione delle viste ImageNavigator e FaceThumbnails, 8 eXtensible Markup Language rispettivamente contenenti il Pictures Navigator e il Binder Panel. Assieme all’implementazione delle widgets sopracitate, nello stesso package troviamo le classi per il parsing e il caricamento su strutture dati del file di indicizzazione ”data.txt”. Inoltre in imageretriever si hanno le classi utili alla gestione del ciclo di vita del plug-in Face Binder stesso. Il package imagetretriever.preferences, contiene le classi per l’attivazione, l’implementazione e l’interfaccia utente della pagina delle preferenze Face Thumbnails. In ultimo, il package quickimage.editors offre le API9 per la modifica o estensione dell’Image Editor. A. Il package imageretriever 1) Activator: La classe Activator, crea l’oggetto plug-in in tempo di esecuzione. Il metodi start e stop, determinano l’inizio e la fine del ciclo di vita del plug-in quando vengono chiamati. 2) ApplicationWorkbenchAdvisor: Tale classe, è impiegata per la creazione o configurazione iniziale del Workbench, lo spazio di lavoro sul quale opera l’RCP. In Face Binder, il metodo initialize, essendo ridefinito10 , rispetto al metodo della classe padre, effettua delle operazioni aggiuntive, come salvare lo stato della preferenze settate e salvare nel Workbench lo stato generale delle componenti grafiche del programma. 3) Application: La classe Application controlla gli aspetti fondamentali dell’esecuzione di una Rich Client Application. I metodi start() e stop(), istanziano la classe Display che offre un’interfaccia software tra il set di librerie SWT, che costituiscono le librerie grafiche di riferimento per lo sviluppo di Eclipse plug-ins e Rich Client Applications, e il sistema operativo sottostante. Inoltre come possiamo notare dal diagramma delle classi di imageretriever, in start(), viene generata l’istanza principale di ApplicationWorkbenchAdvisor. 4) ApplicationWorkbenchWindowAdvisor: Il metodo preWindowOpen(), permette di customizzare tutte le impostazioni relative alla finestra di lavoro per l’applitivo. Ad esempio possiamo specificarne la dimensione in pixel, abilitare o disabilitare le barre, e decidere il titolo della finestra. In dispose(), effettuiamo una chiamata al metodo saveData(), della classe UserData, che permette di memorizzare tutte le informazioni relative ai parametri di preferenza inseriti 9 Application 10 Override Programming Interface Fig. 10. Diagramma delle classi del package ”imageretriever” dall’utente tramite il pannello Settings. 5) ApplicationActionBarAdvisor: Il metodo fillMenuBar(), consente di aggiungere programmaticamente delle voci di menù, tale possibilità viene anche offerta dichiarando tali voci11 , all’interno del file plugin.xml. 6) Perspective: Una prospettiva è un insieme di finestre, una configurazione visuale dell’Ide, finalizzata ad una certa attività, ad esempio editing del codice, debugging, consultazione della guida. La classe Perspective di Face Binder, accosta le due viste FacesThumbnails e ImageNavigator, col metodo createinitialLayout(). 7) FacesThumbnails: Il sopracitato Binder Panel, non è altro che una vista generata dalla classe FacesThumbnails. Come in ogni vista, il metodo createPartControl() viene ridefinito e, tramite esso, si stabiliscono le componenti grafiche da disporre all’interno della vista stessa. L’inserimento delle widgets in una vista, avviene creando un’istanza delle stesse, e disponendole secondo un preciso layout, che può essere scelto in base alle esigenze. Come si evince dal diagramma delle classi, l’accesso ai metodi statici getFacesPath() e setFacesPath(), consente lo scambio di dati con le classi delegate alla gestione del Pictures Navigator. Il metodo showFaces(), è responsabile della generazione dei widgets, (nel caso specifico Buttons), associate alle miniature dei volti. Si noti che la classe FacesThumbnails, offre un’interfaccia alla classe ImageNavigator per il parsing del file data.txt, implementato in CSVMapping: non appena un’immagine viene selezionata nel navigatore, quest’ultimo invoca il metodo showFaces(), quindi viene cercato l’elenco dei volti da disporre sul Binder Panel; tale elenco può essere determinato tramite il metodo getRow() della classe CSVMapping. 8) ImageNavigator: In ImageNavigator, il metodo responsabile della gestione degli eventi di apertura files, è denominato handleOpen(), e si tratta di un metodo protetto, ridefinito dalla classe padre ResourceNavigator, all’interno del quale viene invocato il metodo FacesThumbnails.showFaces(), di cui sopra. all’estensione. Viene anche mostrata solo la directory pics del progetto aperto, in modo da evitare che l’utente acceda direttamente al contenuto di faces. 10) CSVMapping: In tale classe, ci si serve di un CSVReader, istanziato grazie alla classe omonima, e di una struttura Hash nella quale allocare i dati prelevati dal file data.txt. Il metodo in cui tutto questo viene effettuato è initReader(). 11) CSVReader: La classe CSVReader offre semplici funzionalitá di parsing e lettura di un file CSV, il metodo di tale classe utilizzato per la scansione delle righe, è il metodo getNextLine(), che utilizza un Buffered Reader. 12) ExitAction ed AboutAction: Le due actions, permettono rispettivamente l’uscita dal programma, e la visione di un About Page, dove vengono visualizzate informazioni sull’applicativo in esecuzione e sui plug-in caricati. 13) UserData: La classe UserData, consente di riporre e prelevare i dati da un file data.dat, preservato all’interno del workbench della Rich Client Application. I dati inseriti dall’utente, indicano il numero massimo di volti da mostrare nel Binder Panel, tale informazione è incapsulata attraverso i metodi getFaceNumber() e setFaceNumber(). Diverse classi fanno accesso in sola lettura a tali informazioni attraverso UserData, altre si limitano semplicemente ad effettuare le operazioni di restoreData() e saveData(), rispettivamente nella fase di attivazione e disattivazione del plug-in in runtime, con la finalità di mantenere la consistenza dei dati. L’unica classe che accede ad UserData, per la modifica dei dati utente, è la classe FaceThumbnailsPP, cioè la classe utilizzata per l’inserimento delle impostazioni nella preference page. B. Il package imageretriever.preferences 9) ImagePatternFilter: Il metodo select(), ridefinito a partire dalla classe padre ResourcePatternFilter, è un metodo delegato, invocato al momento della selezione di file nel navigatore. Tale metodo permette di filtrare, in base alle caratteristiche scelte, elementi di tipo file e di tipo risorsa. Nel caso specifico dell’applicativo Face Binder,vengono selezionati tutti quei file di tipo immagine, in base 11 Una voce di menù è detta Action 1) FaceThumbnailsPP: La pagina di preferenza, Face Thumbnails, consente di specificare il massimo numero di volti mostrati nel Binder Panel. Il metodo createContents genera un’istanza di ComboFieldEditor, in questo modo, l’utente dispone di un menù a cascata per scegliere il valore appropriato. All’interno del metodo performApply(), viene effettuato il salvataggio di stato, tramite un’invocazione del Fig. 11. Diagramma delle classi del package ”imageretriever.preferences” metodo setFaceNumber della classe UserData. Il metodo initField imposta un preference store per questa pagina di preferenze. Un preference store è un repository utilizzato per conservare dati persistenti, relativi alle impostazioni del plugin, nel contesto del workbench. Alcune di queste impostazioni saranno gestite dall’utente, mentre altre, potrebbero essere impostazioni interne che non sono mai esposte all’utente finale. 2) ImageRetrieverPreferenceInitializer: Anche questa classe effettua una chiamata ad un metodo della classe UserData; in particolare, in fase di inizializzazione della pagina di preferenza, viene richiamato il preference store relativo all’ambiente di lavoro corrente. L’operazione aggiuntiva consiste nell’impostare un valore definito dall’utente e ”immagazzinato” nella classe UserData, relativo al numero di volti da mostrare nel Binder Panel, ed è proprio tale operazione a richiedere ancora una volta alla classe UserData. 3) PreferenceConstants: Tale classe viene utilizzata come contenitore, per l’associazione di particolari costanti alle variabili definite nella pagina di preferenza. 4) SettingsAction: È l’action delegata all’apertura della pagina di preferenza. C. Il package quickimage.editors Fig. 12. Diagramma delle classi del package ”quickimage.editors” 1) QuickImageEditor: La classe QuickImageEditor, gestisce le proprietà delle componenti grafiche dell’editor, fornendo una valida interfaccia di programmazione, nel caso di eventuali modifiche o estensioni delle sue funzionalità. Dal momento che la classe è un’estensione di EditorPart, sono presenti i metodi della classe padre ridefiniti tra questi: • setFocus(), che viene invocato quando l’editor viene selezionato • createPartControls(), che permette di inizializzare le componenti grafiche dell’editor (pulsanti, image canvas, status line...) • dispose(), invocato alla chiusura dell’editor • isDirty(), invocato se qualsiasi contenuto dell’editor viene modificato dopo l’ultima operazione di salvataggio. La reale implementazione della componente EditorPart, dell’Image Canvas12 e della Status Line, risiede nel package quickimage.core, al quale la classe QuickImageEditor fa 12 Il Canvas è una superficie sulla quale disegnare elementi grafici arbitrari accesso durante l’istanziazione delle componenti principali dell’editor. VII. S INCRONIZZAZIONE DI E VENTI Poichè l’utente può generare eventi grafici di selezione, apertura, chiusura, e passaggio all’immagine precedente/successiva, all’interno dell’ Image Editor, tali modifiche devono essere coerentemente riportate nel Binder Panel, mostrando di conseguenza, le opportune miniature facciali associate alla nuova immagine selezionata nell’editor. La strategia di sviluppo adottata, che permette alle diverse componenti grafiche di interagire, consiste nel servirsi di particolari Event Listeners, cioè registratori di eventi, associati ad ogni pulsante dell’editor. La struttura utilizzata è una HashMap in essa usiamo la seguente convenzione per l’accoppiamento chiave-valore: • La chiave è il nome dell’immagine nel photo album. • I valori associati sono i nomi dei volti miniaturizzati. Ecco come entrambe le operazioni di lettura e caricamento su HashMap, vengono implementate nella funzione initReader: p u b l i c s t a t i c v o i d i n i t R e a d e r ( S t r i n g CSVFile ) { hashMap=new HashMap<S t r i n g , S t r i n g [ ] > ( ) ; CSVReader r e a d e r ; try { r e a d e r =new CSVReader ( new F i l e R e a d e r ( CSVFile ) ) ; String [] nextLine ; try { while ( ( nextLine = r e a d e r . readNext ( ) ) ! = null ) n e x t . a d d S e l e c t i o n L i s t e n e r ( new S e l e c t i o n A d a p t e r ( ) hashMap . p u t ( n e x t L i n e [ 0 ] , n e x t L i n e ) ; { } public void w i d g e t S e l e c t e d ( S e l e c t i o n E v e n t e ){ clickedNext ( e ) ; catch ( IOException e ) { } e . printStackTrace ( ) ; }); } Listing 2. Event listener del pulsante next Quando l’evento viene raccolto da un listener, il metodo delegato, non fa altro che effettuare operazioni di aggiornamento concernenti l’Image Editor stesso, ma viene invocato anche il metodo statico responsabile dell’aggiornamento del Binder Panel, in questo modo, anche i volti visualizzati vengono aggiornati, coerentemente alla nuova immagine visualizzata nell’ Image Editor. void c l i c k e d N e x t ( S e l e c t i o n E v e n t e ) { / / Operazioni di aggiornamento d e l l ’ e d i t o r FacesThumbnails . showFaces ( getPartName ( ) ) ; / / Face B i n d e r P a n e l a g g i o r n a t o } Listing 3. Metodo Delegato clickedNext(SelectionEvent) catch ( FileNotFoundException e ) { e . printStackTrace ( ) ; } } Listing 4. metodo initReader() Quest’operazione di inizializzazione viene unicamente effettuata con la creazione/importazione di un progetto. A fronte del ridotto costo delle successive interrogazioni della tabella hash, l’utente puó considerare ragionevole il tempo atteso per le suddette operazioni. L’operazione di interrogazione, richiamata automaticamente con l’apertura di un’immagine sull’Image Editor, viene banalmente implementata col metodo p u b l i c s t a t i c S t r i n g [ ] getRow ( S t r i n g key ) { r e t u r n ( S t r i n g [ ] ) hashMap . g e t ( key ) ; } VIII. PARSING DEL FILE CSV Il file data.txt, indicizza le foto personali associandole alle miniature dei volti in esse contenuti. Tale file può anche indicizzare un numero elevato di immagini (più di 1000), pertanto le operazioni di lettura ed interrogazione di tale file devono essere effettuate efficientemente. A. Allocazione su HashMap del file Una volta letta la generica riga del file data.txt, si procede all’allocazione su una struttura dati consona all’operazione di interrogazione. Listing 5. metodo getRow(String) IX. R EQUISITI ED A RCHITETTURE L’applicativo Face Binder è stato rilasciato come prodotto multi-platform grazie al plug-in RCP Delta Pack. Il plugin Delta Pack contiene tutte le risorse specifiche per la piattaforma di destinazione, ed è utilizzato per esportazioni cross-platform delle applicazioni RCP. Tra le più famose piattaforme supportate annoveriamo: Win32 con architettura x86 MacOS X con architettura x86 e ppc • Linux con architetture x86,ia64 e ppc • Solaris con architetture sparc È richiesta la versione 5.0 di Java Runtime Environment facilmente scaricabile dal sito ufficiale • • X. S VILUPPI F UTURI L’applicazione Face Binder può essere estesa dando luogo a sviluppi futuri; un esempio può essere l’integrazione di un sistema di ricerca di immagini per contenuto. L’utente, mediante la stessa GUI accede, infatti, ad una collezione di miniature o di immagini pertinenti a quella d’origine, per mezzo di determinati algoritmi di ricerca, i quali, studiando proprietà salienti delle immagini nel Database, riescono a trovare, in tempo accettabile, una similitudine tra una coppia d’immagini o un gruppo di immagini con quella selezionata. R EFERENCES [1] Eric Clayberg, Dan Rubel, Eclipse: Building Commercial-Quality Plugins,, 2rd ed. Addison-Wesley,Professional, March 22,2006. [2] Jeff McAffer, Jean-Michel Lemieux, Rich Client Platform: Designing, Coding, and Packaging Java(TM), Addison-Wesley,Professional, October 21, 2005. [3] Robert Harris, Rob Warner, The Definitive Guide to SWT and JFACE, Apress, June 21, 2004.
Documenti analoghi
Elaborato Formisano Daniele N46001429
È possibile utilizzare l’espressione
Eclipse Platform 3.3 - Università degli Studi di Parma
utilizzando un manifest file (plugin.xml)
Può racchiudere numerose funzionalità (es. HTML editor) oppure
una semplice funzione (es. l’azione per creare un file zip)