We have an image viewer, which reads in a directory of images, and displays them based upon the <id> tag in an XML file. We require a script, which is able to sort or group images in a source directory (without moving them), based upon visual similarities (e.g. small, medium, large, thumbnails, fuzzy, higher / lower quality versions of the same image should appear together). This means that after sorting the images in the directory in order, the script will need to modify the <id> value in a copy of the XML to the new order to display the images.
Specification (deliverables) of the application tool to be developed:
1. An executable script which asks the user to select:
a. A parent directory of images (it must also be able to scan folder trees (i.e. folders within folders)
b. An XML file, which contains details of every image in the directory in the following example format:
<?xml version="1.0" encoding="utf-16"?>
(Please note, the above is an example only shows the record of 2 the images. In a real example, the structure will be consistent, however, there will be many more images, and will be more details in each <Image> record, e.g. <note>, <description> … etc. The tags <picture>, <id> and <hash> will be present in each record)
2. To sort the images in order based upon visual similarity (i.e. grouping similar images together). This must include accounting for smaller, larger, lower quality, fuzzy, thumbnail versions of the same image, results or order must also be outputted as a log file in the same directory as the XML file.
The <hash> of each <image> is a unique MD5 hash given to each file, please use this when referring to the file, with the name between the <picture> tag as the second sort (in the event two hashes are the same). Any video or non-image files found in the directory must be included at the end.
3. Create a copy of the original XML File with the same name and rename the original XML file to ORIGINALNAME_Old.xml
4. In the new XML file, change the number between the <id> tags to order which the file appears in within the sorted directory. The <id> tag is used by our image viewer to display images in this order – therefore the similar images should appear together.
Important accuracy related requirements:
• Must compensate for thumbnail versions, lower quality versions, smaller and larger versions of images etc (i.e. grouping all of these together)
• Must not move or modify the original files
• Corrupt images, un-open able images, videos and other non-image files must be moved to the end
*** BEFORE APPLYING PLEASE NOTE: When sending proposals or messages, please include a statement confirming that you can deliver all of the above specifications and requirements, also, how you will develop the application and the estimated time it will take. This is a fixed price project, so please ensure your bid reflects this. No payments will be made up-front, but can be deposited on the oDesk system. The money will be released on satisfactory project completion ***
- Splash screen on load appears for 5 seconds “For HurstTrentham use only”, with the ability for us to modify the wording or disable this in the source code
- A desktop executable script with basic onscreen GUI (e.g. select image directory, select XML file, run, results “X image files sorted” etc.)
- Basic GUI preferably created in Eclipse Window Builder or NetBeans
- Must be able to be combined and further developed as part of a larger application
- Must be provided to HurstTrentham with an Application Programming Interface for interaction without needing to use the GUI
- All source code and functions will be plain text and commented
- Must work on Windows
- The freelancer must disclosure which how images are sorted an any techniques used
- Any third-party code must be highlighted, and must be free for commercial usage by HurstTrentham
- All source materials, including a number of actual tests must be included, along with a simple user guide on how to run, and what to expect
- The system must create a log file for each sort with filename as ‘Sort Log’ with date and time
- Must be able to handle all common image files including (JPG, JPEG, BMP, GIF, RAW, EXIF, TIFF, PNG etc)
- The freelancer must collect test data, none will be provided
- Any programming language can be used, as long as it can compiled as an executable, and have the ability to interact, be packaged and controlled by a Java front-end or Java Application
- The ability for the executable to run on Windows, Mac and Linux