Innholdsfortegnelse for vedlegg INNHOLDSFORTEGNELSE FOR VEDLEGG ........................................................................................................... 1 VEDLEGG 1 GANTT-DIAGRAM VERSJON 1 ........................................................................................................ 3 VEDLEGG 2 GANTT-DIAGRAM VERSJON 2 ........................................................................................................ 4 VEDLEGG 3 PROSJEKTSKISSE ............................................................................................................................ 5 HOVEDPROSJEKT I DATA - PROSJEKTSKISSE ................................................................................... 5 VEDLEGG 4 FORPROSJEKTRAPPORT ................................................................................................................. 6 FORPROSJEKTRAPPORT .................................................................................................................................... 6 Presentasjon .................................................................................................................................................. 6 Sammendrag ................................................................................................................................................. 6 Dagens situasjon............................................................................................................................................ 6 Mål og rammebetingelser ............................................................................................................................. 7 Løsninger/alternativer ................................................................................................................................... 7 Analyse av virkninger ..................................................................................................................................... 8 VEDLEGG 5 JAVA CODE STYLE ........................................................................................................................... 9 TABLE OF CONTENTS ................................................................................................................................................ 9 INTRODUCTION ..................................................................................................................................................... 10 NAMING CONVENTIONS .......................................................................................................................................... 10 Classes ......................................................................................................................................................... 10 Methods....................................................................................................................................................... 10 Variables ...................................................................................................................................................... 10 Constants ..................................................................................................................................................... 11 CLASS AND INTERFACE DECLARATIONS ....................................................................................................................... 11 METHOD DEFINITIONS ............................................................................................................................................ 11 INDENTATION ....................................................................................................................................................... 11 Wrapping Lines ............................................................................................................................................ 11 STATEMENTS ........................................................................................................................................................ 12 The if-else class of statements should have one of the following forms: .................................................... 12 A for statement should have one of the following forms: ........................................................................... 12 A while statement should have one of the following forms: ....................................................................... 12 A do-while statement should have one of the following formats: ............................................................... 13 A try-catch statement should have one of the following formats: .............................................................. 13 A switch statement should have the following format: ............................................................................... 13 WHITE SPACE ....................................................................................................................................................... 13 Blank Lines ................................................................................................................................................... 13 Blank Spaces ................................................................................................................................................ 14 COMMENTS ......................................................................................................................................................... 14 VEDLEGG 6 EXIF .............................................................................................................................................. 15 ULIKE TYPER METADATA I ET JPEG BILDE ....................................................................................................... 15 VEDLEGG 7 KLASSIFIKATORUTVIKLING ........................................................................................................... 16 DEVELOPING NEW CLASSIFIERS ...................................................................................................................... 16 GUI Selection Choice .................................................................................................................................... 16 The Classifier Constructors .......................................................................................................................... 16 The Component Constructors ...................................................................................................................... 17 Example Constructor.................................................................................................................................... 17 Abstract Methods ........................................................................................................................................ 17 Exif values .................................................................................................................................................... 19 Vedlegg for Project Sunstone 1 VEDLEGG 8 ORDFORKLARINGER ..................................................................................................................... 20 API................................................................................................................................................................ 20 Brennvidde (Focal length) ............................................................................................................................ 20 Checksum ..................................................................................................................................................... 20 Classifier....................................................................................................................................................... 20 Collectionclassifier ....................................................................................................................................... 20 Controller ..................................................................................................................................................... 20 Eksponeringstid ........................................................................................................................................... 20 Exif ............................................................................................................................................................... 20 Filter ............................................................................................................................................................. 20 GUI ............................................................................................................................................................... 20 Hash ............................................................................................................................................................. 20 Heksadesimal ............................................................................................................................................... 21 ISO hastighet ............................................................................................................................................... 21 JPEG (eller JPG) ............................................................................................................................................ 21 JVM .............................................................................................................................................................. 21 Klasse ........................................................................................................................................................... 21 Klassefil ........................................................................................................................................................ 21 Klassifikator ................................................................................................................................................. 21 Kompilert ..................................................................................................................................................... 21 Konstruktør .................................................................................................................................................. 21 Makernotes.................................................................................................................................................. 22 MD5 ............................................................................................................................................................. 22 Metadata / Metainformasjon ..................................................................................................................... 22 Metadata-Extractor ..................................................................................................................................... 22 Metode ........................................................................................................................................................ 22 Model........................................................................................................................................................... 22 MVC (Model – View – Controller) ................................................................................................................ 22 Samlingsklassifikator ................................................................................................................................... 22 Photobrowser .............................................................................................................................................. 22 Primærnøkkel (Primary key) ........................................................................................................................ 22 Public Domain .............................................................................................................................................. 22 Runtime ....................................................................................................................................................... 22 Testcase ....................................................................................................................................................... 23 View ............................................................................................................................................................. 23 Wrapper ....................................................................................................................................................... 23 Hovedprosjektrapport for Project Sunstone 2 Vedlegg 1 Gantt-diagram versjon 1 Utviklet i Excel Hovedprosjektrapport for Project Sunstone 3 Vedlegg 2 Gantt-diagram versjon 2 Utviklet i GanttProject Hovedprosjektrapport for Project Sunstone 4 Vedlegg 3 Prosjektskisse Hovedprosjekt i data - Prosjektskisse Høgskolen i Oslo, våren 2010 Sted og dato: Oslo, 3. desember 2009 Foreløpig tittel: En annerledes photobrowser Gruppemedlemmer: Jostein Haukeli 3AB s147811 Martin Haukeli 3AB s147773 Marit Olsen 3AB s140751 Oppdragsgiver: Høgskolen i Oslo, avdeling for ingeniørutdanning Postboks 4, St. Olavs plass 0130 OSLO Telefon: 22 45 32 00 E-post: iu@hio.no Kontaktperson: Frode Eika Sandnes Telefon: 22 45 32 49 E-post: frodes@hio.no Det eksisterer en rekke programvarepakker for å organisere og kikke på fotosamlinger tatt med digitalkamera, for eksempel Google Picasa. I slike programmer organiseres bildene vanligvis kronologisk. Ved ingeniørutdanningen er det utviklet noen algoritmer og programvare som kan sortere bilder inn i meningsfylte kategorier. Oppgaven vår blir å lage et Java program som bruker de bibliotekene som er utviklet, slik at det blir lettere for brukere å finne frem til ønsket bilde i store samlinger. I møte med oppdragsgiver har vi fått vite at oppgaven kan gjøres som et rent programmeringstungt Java-prosjekt dersom det er ønskelig. Oppdragsgiver har sagt at han kan variere vanskelighetsgraden til å passe vårt behov og ønsker om å trekke inn ny teknologi. Vi har også blitt enige om at det kan passe bra at vi lager GUI på en slik måte at andre enkelt kan videreutvikle dette. Hovedprosjektrapport for Project Sunstone 5 Vedlegg 4 Forprosjektrapport Forprosjektrapport Presentasjon Tittel: Sunstone Project Oppgave: Lage et utvidbart rammeverk for photobrowsing Oppdragsgiver: Frode Eika Sandnes, Høgskolen i Oslo Veileder: Frode Eika Sandnes Gruppe nr: 17 Gruppemedlemmer: Jostein Haukeli, Martin Haukeli og Marit Olsen Sammendrag Vi skal i løpet av prosjekt-tiden utvikle et fleksibelt rammeverk for sortering og kikking på bildesamlinger tatt med digitalkamera. Programmet skal kunne implementere en rekke klassifikatorer som kan analysere ulike deler av bildenes metadata, og på denne måten sortere bildene inn i meningsfylte kategorier spesifisert av brukeren. Programmet skal implementeres i Java. Dagens situasjon Vi har ingen kjennskap til photobrowsere som kan sortere bilder etter hvor de er tatt, om det er dag eller natt, eller egendefinerte kategorier. De photobrowserene som eksisterer per idag sorterer stort sett etter dato, navn og størrelse på bildet. Ett eksempel på dette er Google Picasa som sorterer etter disse tre egenskapene. Det finnes digitalkameraer som bruker GPS (Global Positioning System) for å lagre hvor bildene er tatt, men dette er ikke standard på vanlige kameraer som gjennomsnitts brukere har. De kameraene som har GPS bruker også som oftest lang tid på å koble seg opp mot satellitt og er dermed ikke så praktisk i bruk. De fleste digitalkameraer som produseres idag lagrer metainformasjon som gjør det raskt og enkelt å finne mye informasjon om bildet. Innstillinger som ble brukt på tidspunktet da bildet ble tatt blir lagret i et Exif-format (Exchangeable image file format). Eksempler på disse kan være informasjon om kameraet, dato, tid, eksponeringstid, brennvidde og mye mer. Ut fra denne informasjonen har vår oppdragsgiver laget en del «klassifikatorer» som bruker disse og kan blant annet finne ut omtrent hvor i verden bildene er tatt, om det er natt eller dag, og om Hovedprosjektrapport for Project Sunstone 6 bildet er tatt ute eller inne. Dette gjør at man enkelt kan finne frem i store bildesamlinger som gjerne er tatt på et mye tidligere tidspunkt. Mål og rammebetingelser Målet med oppgaven er å designe et utvidbart rammeverk for en photobrowser som kan sortere bilder i meningsfylte kategorier. Dette skal skje basert på algoritmer og programvare som er utviklet ved ingeniørutdanningen ved HiO. Denne photobrowseren skal gjøre det lettere for brukere å finne frem til ønsket bilde i store samlinger. For at alle klassifikatorene skal fungere optimalt må vi gjøre en del antagelser om bildesamlingene som skal sorteres. Disse samlingene bør inneholde bilder tatt utendørs, og bestå av bilder tatt mens det er lyst ute. Videre bør klokken på kameraet også vise riktig tid. Systemet skal inneholde: Et utvidbart brukergrensesnitt Metode for å skanne bilder effektivt Mulighet for å arrangere bilder i en samling etter valgte klassifikatorer Klassifikatorene skal være utvidbare Det skal være lett og legge til nye klassifikatorer Programmet skal oppdage bilder som har endret seg og skanne disse på nytt Det skal være enkelt å laste ned, installere og kjøre programmet Koden skal være oversiktlig og lett utvidbar Programmet skal ikke gjøre noen endringer på brukerens filer Systemet bør inneholde: Testklassifikatorer Testcase - noe og vise frem for å demonstrere programmet Brukervennlig GUI En løsning som gjør venting mindre kjedelig ved innlasting av bilder Løsninger/alternativer Vi skal lage en photobrowser som sorterer bilder etter brukerens egne valg. Photobrowseren skal sortere etter informasjon gitt av klassifikatorer som vil gå på Exif data og ikke bildet i seg selv. Det har også vært snakk om muligheter for klassifikatorer som kan finne informasjon ut ifra selve bildet i tillegg. Dette er en løsning oppdragsgiver har ønsket seg, og vi er enige om at denne er den beste for vårt prosjekt. Teknologier: Java sun versjon 6 Hovedprosjektrapport for Project Sunstone 7 Utviklingsprogram: Eclipse Programmeringsspråk: Java Andre programmer: Adobe Photoshop, GIMP, MS Office, Open Office, Picasa Utviklingsmetode: UP-light Med UP light mener vi en lettvekts versjon av Unified Process, tilpasset våre behov. Dette innebærer at vi lager de artefaktene som er nødvendige og nyttige for oss i utviklingsprosessen. Analyse av virkninger Store personlige bildesamlinger er blitt mer og mer vanelige mens digitalkameraer blir billigere og mer avanserte. Ettersom samlingene blir større blir de også som oftest vanskeligere å finne frem i og det kan ta mye tid å sortere bildene inn i meningsfylte kategorier. Vår løsning kan føre til at vanlige brukere vil kunne prøve ut denne nye måten å sortere bilder på ved hjelp av klassifikatorene fra vår oppdragsgiver. Dessuten kan vi tenke oss at løsning kan bidra til å øke interessen for denne måten å organisere og finne frem i bildesamlinger på for andre utviklere av photobrowsere. Hovedprosjektrapport for Project Sunstone 8 Vedlegg 5 Java code style Table of contents VEDLEGG 5 JAVA CODE STYLE ........................................................................................................................... 9 TABLE OF CONTENTS ................................................................................................................................................ 9 INTRODUCTION ..................................................................................................................................................... 10 NAMING CONVENTIONS .......................................................................................................................................... 10 Classes ......................................................................................................................................................... 10 Methods....................................................................................................................................................... 10 Variables ...................................................................................................................................................... 10 Constants ..................................................................................................................................................... 11 CLASS AND INTERFACE DECLARATIONS ....................................................................................................................... 11 METHOD DEFINITIONS ............................................................................................................................................ 11 INDENTATION ....................................................................................................................................................... 11 Wrapping Lines ............................................................................................................................................ 11 STATEMENTS ........................................................................................................................................................ 12 The if-else class of statements should have one of the following forms: .................................................... 12 A for statement should have one of the following forms: ........................................................................... 12 A while statement should have one of the following forms: ....................................................................... 12 A do-while statement should have one of the following formats: ............................................................... 13 A try-catch statement should have one of the following formats: .............................................................. 13 A switch statement should have the following format: ............................................................................... 13 WHITE SPACE ....................................................................................................................................................... 13 Blank Lines ................................................................................................................................................... 13 Blank Spaces ................................................................................................................................................ 14 COMMENTS ......................................................................................................................................................... 14 Hovedprosjektrapport for Project Sunstone 9 Introduction This document contains a small amount of guidelines to follow when programming on this project. This is done to make the code easier to work on now, and later for maintenance. These guidelines will improve the readability of the software. This document is not a direct copy of any previously written code style, but has been developed from how we have learned to write code, our own preferences, and some good tips and ideas from reading code styles like Sun’s code conventions for Java (http://java.sun.com/docs/codeconv/), and Geosoft’s Java Programming Style Guidelines (http://geosoft.no/development/javastyle.html). Naming conventions Naming conventions are important to make programs more understandable and easier to read. This is especially important when read by other programmers that don’t have the same understanding of the code as the author. Writing self-explaining names are also an easy way to provide the reader with information of what function the item in question has in the program. Classes Class names should always start with a capital letter, and every internal word in the name should have its first letter capitalized. Like all names, class names should also be kept simple and descriptive of their primary function. It is usually a good idea to use whole words, and avoid using abbreviations. This does of course not apply in cases such as JPEG or Exif, since the abbreviations are more widely used than the full names. class Core; class DatabaseWrapper; Methods Methods should be written with the first letter lowercase, followed by the first letter of each internal word capitalized. Generally the same ideas should be kept in mind when naming methods, as when naming classes. traverse(); loadDriver(); sortClassifiers(); Variables Variables should always have a lowercase first letter. It’s a good for variable names to be kept short, and at the same time meaningful. One-character variable names should be avoided. An exception from this rule applies when using temporary variables, for example inside a for loop. Common names for such variables are i, j, k, m, and n for integers, in that specific order. int i; char c; float myWidth; Hovedprosjektrapport for Project Sunstone 10 Constants In cases where constant variables are declared, these should be written with all letter capitalized, having words separated by underscores. int MIN_WIDTH = 9; int MAX_WIDTH = 70; Class and interface declarations public class Classifier_contentRGB extends Classifier implements Cloneable { … } Method definitions Public void someMethod() { … } Indentation Four spaces should be used as the unit of indentation. Tabs should be set to represent 4 spaces (Eclipse default). Wrapping Lines When an expression will not fit on a single line, breaking them down according to these general principles may be a good idea: • Break after a comma where possible. • Break before an operator. • Align the new line with the beginning of the expression at the same level on the previous line. • If the above rules lead to confusing code, the programmer may have to judge whether to ignore the above rules or apply them in a slightly different way. function(longExpression1, longExpression2, longExpression3, longExpression4, longExpression5); var = function1(longExpression1, function2(longExpression2, longExpression3)); The second example below should be avoided. longName1 = longName2 * (longName3 + longName4 - longName5) + 4 * longname6; // PREFER // avoid doing this longName1 = longName2 * (longName3 + longName4 - longName5) + 4 * longname6; Either of the indentation styles described below may be applied if long if statements are present in the code. Hovedprosjektrapport for Project Sunstone 11 if ((condition1 && condition2) || (condition3 && condition4) ||!(condition5 && condition6)) { doSomethingAboutIt(); } if ((condition1 && condition2) || (condition3 && condition4) ||!(condition5 && condition6)) { doSomethingAboutIt(); } Statements The if-else class of statements should have one of the following forms: if (condition) { statements; } else { statements; } if (condition) { statements; } else { statements; } if (condition) { statements; } else if (condition) { statements; } if (condition) { statements; } else if (condition) { statements; } A for statement should have one of the following forms: for (initialization; condition; update) { statements; } for (initialization; condition; update) { statements; } A while statement should have one of the following forms: while (condition) { statements; Hovedprosjektrapport for Project Sunstone 12 } while (condition) { statements; } A do-while statement should have one of the following formats: do { statements; } while (condition); do { Statements; } while (condition); A try-catch statement should have one of the following formats: try { statements; } catch (ExceptionClass e) { statements; } try { statements; } catch (ExceptionClass e) { statements; } A switch statement should have the following format: switch (condition) { case ABC: statements; /* falls through */ case DEF: statements; break; case XYZ: statements; break; default: statements; break; } White space Blank Lines Blank lines are especially important to improve the readability of the code, and providing enough room for «air» in the code. Blank lines also help grouping pieces of code that are logically related together. Hovedprosjektrapport for Project Sunstone 13 A blank line should (always) be used in the following cases: • Between methods • Between the local variables in a method and its first statement • Between logical sections inside a method to improve readability Blank Spaces Blank spaces should be used in the following circumstances: • A keyword followed by a parenthesis should be separated by a space. Example: while (true) { ... } Note that a blank space should not be used between a method name and its opening parenthesis. The reason for this is to help distinguish keywords from method calls. • A blank space should appear after commas in argument lists. • All binary operators except the . (dot) should be separated from their operands by spaces. Blank spaces should never separate operators such as increment (++) and decrement (--) from their operands. Examples of proper application of this can be reviewed below. a += c + d; a = (a + b) / (c * d); while (d++ = s++) { n++; } print("size is " + foo + " bar."); • The expressions in a for statement should be separated by blank spaces as shown below. for (expr1; expr2; expr3) • Casts should always be followed by a blank whitespace as shown below. myMethod((byte) aNum, (Object) x); myFunc((int) (cp + 5), ((int) (i + 3)) + 1); Comments Although all parts of the code should contain self-explaining code, it’s important to use comments to further explain the functions of some parts. The programs may have either single line comments (//), or multi-line comments (/* … */). if (foo > 1) // Do something. else return false; // Explain why here. /* * This is a multi-line comment. */ Hovedprosjektrapport for Project Sunstone 14 Vedlegg 6 Exif Ulike typer metadata i et JPEG bilde Eksemplene i dette vedlegget beskriver hvordan informasjonen som hentes ut gjennom metadata-extractor biblioteket vil kunne se ut. Informasjonen er noe modifisert for penere visning i dette dokumentet. Ofte vil en kunne oppleve at store mengder informasjon fra makernote feltene går tapt, og vises på formen [Canon Makernote] Unknown tag (0xc121) – 0. Disse feltene er tatt ut av dette vedlegget. [Exif] Image Description [Exif] Flash - Flash did not fire, auto [Exif] Make - Canon [Exif] Focal Length - 18,098 mm [Exif] Model - Canon PowerShot G11 [Exif] User Comment [Exif] Orientation - Top, left side (Horizontal / normal) [Exif] FlashPix Version - 1.00 [Exif] X Resolution - 180 dots per inch [Exif] Color Space - sRGB [Exif] Y Resolution - 180 dots per inch [Exif] Exif Image Width - 3648 pixels [Exif] Resolution Unit - Inch [Exif] Exif Image Height - 2736 pixels [Exif] Date/Time - 2009:10:25 15:48:42 [Exif] Focal Plane X Resolution - 146/1824000 inches [Exif] YCbCr Positioning - Datum point [Exif] Focal Plane Y Resolution - 73/912000 inches [Exif] Exposure Time - 1/15 sec [Exif] Focal Plane Resolution Unit - Inches [Exif] F-Number - F4 [Exif] Sensing Method - One-chip color area sensor [Exif] ISO Speed Ratings - 80 [Exif] File Source - Digital Still Camera (DSC) [Exif] Exif Version - 2.21 [Exif] Custom Rendered - Normal process [Exif] Date/Time Original - 2009:10:25 15:48:42 [Exif] Exposure Mode - Auto exposure [Exif] Date/Time Digitized - 2009:10:25 15:48:42 [Exif] White Balance - Auto white balance [Exif] Components Configuration - YCbCr [Exif] Digital Zoom Ratio - 1 [Exif] Compressed Bits Per Pixel - 3 bits/pixel [Exif] Scene Capture Type - Standard [Exif] Shutter Speed Value - 1/14 sec [Exif] Compression - JPEG (old-style) [Exif] Aperture Value - F4 [Exif] Thumbnail Offset - 5108 bytes [Exif] Exposure Bias Value - 0 EV [Exif] Thumbnail Length - 5860 bytes [Exif] Max Aperture Value - F4 [Exif] Thumbnail Data - [5860 bytes of data] [Exif] Metering Mode - Multi-segment Figur 1. Eksempel på generell Exif informasjon generert med et Canon PowerShot G11 digitalkamera. [Canon Makernote] Macro Mode - Normal [Canon Makernote] Long Focal Length - 30500 1000 [Canon Makernote] Self Timer Delay - 2.0 sec [Canon Makernote] Short Focal Length - 6100 1000 [Canon Makernote] Quality - Fine [Canon Makernote] Focal Units per mm - 1000 [Canon Makernote] Flash Mode - No flash fired [Canon Makernote] Flash Activity - Flash did not fire [Canon Makernote] Focus Mode - Single [Canon Makernote] Flash Details - Unknown (0) [Canon Makernote] Image Size - Large [Canon Makernote] Focus Mode - Continuous [Canon Makernote] Easy Shooting Mode - Manual [Canon Makernote] White Balance - Auto [Canon Makernote] Digital Zoom - No digital zoom [Canon Makernote] Sequence Number - 0 [Canon Makernote] Contrast - Normal [Canon Makernote] AF Point Used - Right [Canon Makernote] Saturation - Normal [Canon Makernote] Flash Bias - 0.0 EV [Canon Makernote] Sharpness - Normal [Canon Makernote] Auto Exposure Bracketing - 0 [Canon Makernote] Iso - Unknown (16464) [Canon Makernote] AEB Bracket Value - 0 [Canon Makernote] Metering Mode - Evaluative [Canon Makernote] Subject Distance – 3449 [Canon Makernote] Focus Type - Auto [Canon Makernote] Image Number - 1080257 [Canon Makernote] AF Point Selected - Unknown [Canon Makernote] Image Type - PowerShot G11 JPG [Canon Makernote] Exposure Mode - Av-priority [Canon Makernote] Owner Name [Canon Makernote] Firmware Version - Firmware Version 1.00 [Canon Makernote] Continuous Drive Mode - Single shot with self-timer Figur 2. Eksempel på kameraspesifikke makernotes generert med et Canon PowerShot G11 digitalkamera. Hovedprosjektrapport for Project Sunstone 15 Vedlegg 7 Klassifikatorutvikling Developing new Classifiers To develop a new Classifier for Sunstone you start by extending no.hio.iu.sunstone.Classifier. The best way to do this is by importing the Sunstone.jar as a library to your IDE. Refer to your IDE manual for information on how to do this. Classifier is the API used to write new classifiers and contains abstract methods that must be overridden. There is also Javadoc for each of the abstract methods which should help you determine how to write the methods. Note: The underlying system will never call any other method in your classifier. This is because only the abstract methods will be visible. There are 2 types of Classifiers; Classifiers that receive and do calculation on one image at a time and Classifiers that need to work on the whole collection of images at once. The latter is known as a Collection Classifier. Note: It is recommended to only write Collection Classifiers if a regular Classier cannot be used. This is because Collection Classifiers require more processing of image data and much more memory when it is being used. A classifier may serve two purposes; Showing a GUI component to filter images by and/or calculating a new value for each image to compare images by. GUI Selection Choice There are 4 different ways a Classier may display it's filter component in the GUI: To have no filter (not shown in the GUI, hence a utility classifier meant to be used by other classifiers). To have a column of radio boxes. To have a drop-down menu. To have a slider. This selection is made in the constructor of your Classifier, where you are able to supply a Component. If you do, it will be drawn in the GUI as a component to filter images by. Else its value will be saved with each image for use by other classifiers. The Classifier Constructors There are two constructors in the Classifier API: public Classifier(boolean collectionClassifier, Component graphicalComponent) public Classifier(boolean collectionClassifier) The first constructor is for Classifiers with a GUI filter, the second is for utility classifiers. Hovedprosjektrapport for Project Sunstone 16 Break down of parameters: 'collectionClassifier' tells the system whether or not it is a Collection Classifier, see above about Classifier Types. 'graphicalComponent' is the no.hio.sunstone.gui.Component that will be drawn in the GUI while the program runs. If this is not given then no filter will be visible in the GUI. The Component Constructors Component (no.hio.sunstone.gui.Component), this is the graphical component that will be shown in the GUI as a filter, allowing the user to filter images on this Classifier. Component has two constructors. Which one is called decides what the filter will look like in the GUI: public Component(String label, String description, String[] options, boolean dropDownList) public Component(String label, String description, int minValue, int maxValue) The first constructor is for making a column of radio boxes or a drop-down list. The second constructor is for making a slider. Break down of parameters: 'label' is displayed as a header of the filter. 'description' is a text describing what the filter does. 'options' is an array containing the names of the options the user may choose from. 'dropDownList' is a boolean choice of whether there should be a column of radio boxes or a drop-down list. 'minValue' the lowest selectable value on the slider. 'maxValue' the highest selectable value on the slider. Example Constructor This is the constructor from ClassifierDayNight, see the source code for the full text: public ClassifierDayNight() { super(false, new Component("Day or night", "Show photos of day or night", new String[]{ "Day", "Night" }. true )); } NOTE: The constructor has no parameters. This is important, as the Sunstone Core cannot send any arguments to your Classifier. Abstract Methods It is required that new Classifiers override all the abstract methods. But, depending on what type of Classifier you are writing, some of the methods may simply return null. There are 5 abstract methods, 'getGUISelectionValue' Hovedprosjektrapport for Project Sunstone 17 'getRequiredClassifiers' 'getRequiredMetaData' 'processElement' 'processCollection' If your classifier needs data from another classifier, you need to provide the name of that classifier when the Core calls 'getRequiredClassifiers' in a LinkedList<String>. The classifier name must be the full name. Example: “no.hio.iu.sunstone.classifiers.examples.ClassifierExposureValue”. If your classifier requires metadata(Exif-data) from the image, you need to provide what fields in the 'getRequiredMetaData' method, just like in the previous method. See the Exif values list provided in this document for a list of available fields. But, take note that not all cameras support all values and some imaging programs delete metadata. If your classifier also works as a Filter in the GUI, you will need to translate the value from the GUI component to your type of object. This must be done in the 'getGUISelectionValue'. To see what the GUI component sends with the various component types and user choices, a System.out.println(value) in this method should be sufficient. If your classifier is a “one image at a time classifier” you will get the input for your classifier in the 'processElement' method. This method will be called once for each image in the collection, with the values you requested. Here you must return a value that will be saved with the image. On the other hand, if you are writing a collection classifier, you will get the input in the 'processCollection' method. This method will only be run once, but the requested data of all the images in the collection will be given at once. You need to return a HashMap here, where each Entry in the HashMap should be image hash as key and your value as the value. The hash of each image will always be added to the input as the 'hash' field in the HashMap. If you have completed the above, your new classifier should be ready for testing. Please remember to use proper package names for your classifiers! Hovedprosjektrapport for Project Sunstone 18 Exif values This is a list of metadata values that can be requested in the 'requestMetaData' method. The list is subject to change in future versions of Sunstone, the ExifWrapper and the metadataextractor library. To request a value, refer to it by the field name. Note that null may be sent if an image lacks the given metadata. Name F-Number Exposure Time ISO Speed Ratings Date/Time Original Make Model Image Width Image Height Exif Version Exposure Bias Value Orientation Exposure Program Flash Focal Length Focal Length 35 Metering Mode Compression White Balance Field name “f-number” “exposuretime” “iso” “timestamp” “make” “model” “width” “height” “exifversion” “exposurebias” “orientation” “exposureprogram” “flash” “focallength” “focallength35” “meteringmode” “compression” “whitebalance” Datatype double double int long String String int int double double String String String double double String String String Hovedprosjektrapport for Project Sunstone 19 Vedlegg 8 Ordforklaringer API API blir i dette dokumentet omtalt som et grensesnitt for utvikling av klassifikatorer. Dette kan tenkes på som en oppskrift for utvikling av klassifikatorer til programmet. Brennvidde (Focal length) Brennvidden forteller hvor sterkt et kamera samler eller sprer lys. Checksum Checksum, eller sjekksum er en kort tekst som kan genereres ut ifra en større mengde data. Dersom to checksummer er like, vil en med stor sannsynlighet kunne anta at datakilden er identisk. Classifier Se klassifikator. Collectionclassifier Se samlingsklassifikator. Controller Kontrolleren er den delen av systemet som oppdaterer modell og visning, basert på hva brukeren foretar seg. Eksponeringstid Eksponeringstiden er en verdi som beskriver hvor lenge lys får slippe inn i kameraet ved fotografering. Exif Exif står for Exchangeable image file format, og er en teknisk standard for metainformasjon som brukes av de aller fleste digitalkameraer. Dette til tross for at spesifikasjonen ikke blir vedlikeholdt av noen organisasjon. Den siste versjonen av Exif, versjon 2.2, kalles Exif Print og ble sist endret i april 2002. Filter I enkelte tilfeller vil der være mer naturlig å omtale en klassifikator som et filter. Et filter er i hovedsak en klassifikator som filtrerer ut en mengde bilder. Se forklaring av klassifikator. GUI Graphical User Interface, eller Grafisk Brukergrensesnitt, er den delen av programmet som tilbyr brukeren å kommunisere med programmet ved hjelp av museklikk på ulike deler av skjermen, i motsetning til kun å skrive inn tekst i en kommandolinje. Hash En hashfunksjon er en funksjon som oversetter en større mengde inputdata til en mindre mengde output data. Hovedprosjektrapport for Project Sunstone 20 Heksadesimal Det heksadesimale tallsystemet benytter seg av 16 tallssystemet, i motsetning til 10 tallssystemet som er det mest vanelige. Dette innebærer at man kan telle fra 0 til 9, og så fra A til F før en når grunntallet og må øke tallet til venstre, i motsetning til å telle fra 0 til 9 før en når grunntallet 10. ISO hastighet En verdi for lysfølsomheten i et kamera. Navnet kommer av International Standards Organisation, som er organisasjonen som først definerte denne verdien. Også kalt filmhastighet. JPEG (eller JPG) Blant formatene som støtter Exif metadata er JPEG (Joint Photographic Experts Group) det viktigste. Videre er JPEG en komprimeringsmetode som innebærer kvalitetstap av varierende grad, men som til gjengjeld har en stor fordel med tanke på filstørrelse i forhold til formater uten komprimering. JVM Java Virtual Machine er et program er enkelt forklart et program som er ansvarlig for kjøring av Java programmet. Klasse I Java beskrives alle objekter i form av klasser. En slik klasse beskriver alle egenskapene det bestemte objektet skal ha. Et eksempel på dette kan være et objekt som representerer en del av en bil. Hver bil vil bli produsert ved hjelp av en rekke forskjellige objekter. Samtidig vil hver av bilene innholde et identisk sett av objekter. Klassefil Klassefiler er kompilerte Java filer, ferdige til bruk i Javas virtuelle maskin, JVM. Klassifikator Et verktøy for filtrering av en samling filer, slik at en sitter igjen med en ny samling filer som oppfyller klassifikatorens krav. For eksempel bilder tatt mens det er lyst ute. Kompilert Å kompilere vil si å oversette programkode til kode som kan leses og forstås av datamaskinen. Konstruktør En konstruktør kan blant annet brukes til å tildele et objekt en startverdi som blir satt når objektet opprettes. Konstruktøren har også som oppgave å reservere minne på maskinen til et gitt objekt. Hovedprosjektrapport for Project Sunstone 21 Makernotes Exif gir kameraprodusenten mulighet til å legge inn ustandardisert informasjon, som ofte vil variere med modell. Her lagres store menger nytting informasjon om bildet, som dessverre også viser seg å være svært vanskelig å hente ut. MD5 Message-Digest algorithm 5 er en hashfunksjon med en hash verdi som har lengde 128 bit. Metadata / Metainformasjon Data som definerer eller beskriver andre data. Metadata i JPEG bilder kan for eksempel innholde dato, klokkeslett og kamerainnstillinger for et enkelt bilde. Metadata-Extractor Bibliotek for uthenting av Exif informasjon fra JPEG filer. Metode Programbiter som har ansvar for å utføre en bestemt oppgave kalles ofte for metoder. Model I dette systemet omtales modellen som den delen av MVC som lagrer data. Generelt vil model også ha ansvar for å si ifra dersom den endres. MVC (Model – View – Controller) Implementasjonsmodell for programvare. Se model, view og controller. Samlingsklassifikator I motsetning til vanlige klassifikatorer, fungerer multiklassifikatorer ved å sammenligne verdier fra en rekke bilder. Photobrowser En photobrowser er et verktøy for enklere navigering og kikking på bilder i en bildesamling. Primærnøkkel (Primary key) Primærnøkkel i en relasjonsdatabase er en unik verdi som identifiserer en gitt rad i en tabell. Public Domain Arbeid som gis ut til Public Domain blir ikke dekket av noen som helst form for rettigheter. For programkode innebærer dette at hvem som helst kan benytte seg av, redistribuere og gjøre endringer i programkoden. Runtime En enkelt installasjon av en gitt programvare på en datamaskin. Hovedprosjektrapport for Project Sunstone 22 Testcase Et sett av betingelser som må oppfylles for å avgjøre om et system fungerer slik det skal. I denne rapporten omtales ofte testcase om en samling bilder som kan benyttes i programmet for å undersøke om det fungerer som forventet. View Visningen er del delen av programmet som gjør det mulig for brukeren å endre modellen. Wrapper En wrapper er en innpakning av funksjonaliteten som blir tilbudt av en programdel. Dette gjør at en tryggere kan benytte seg av den innpakkede programdelen. Wrappers kan også gjøre det lettere å bytte ut den innpakkede programdelen på et senere tidspunkt. Hovedprosjektrapport for Project Sunstone 23