vedlegg - Høgskolen i Oslo

advertisement
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
Download