openjpeg/applications/jpip
Kaori Hagihara 93f3e2b007 Add README description for stateless requests 2011-09-16 14:36:51 +00:00
..
doc added system architecture description on the documentation 2011-05-25 12:07:39 +00:00
libopenjpip fixed cmake and autotools files to reflect recent changes in JPIP 2011-08-26 12:44:28 +00:00
opj_client opj_dec_server enabled stateless requests 2011-09-16 14:20:00 +00:00
opj_server changed terminating status of opj_server in debug/non-server mode 2011-09-01 13:32:42 +00:00
tools reorganization of indexer before importing extentional libopenjpeg files 2011-08-28 21:43:57 +00:00
CHANGES Add README description for stateless requests 2011-09-16 14:36:51 +00:00
CMakeLists.txt added cmake support to openjpip 2011-08-12 13:57:36 +00:00
Makefile.am
Makefile.nix bug fixed for error concerning parameter name modification, Makefile.nix also corrected 2011-07-06 19:40:26 +00:00
README Add README description for stateless requests 2011-09-16 14:36:51 +00:00
mainpage.h JPIP : fixed autotools to work with recent name changes 2011-07-06 10:21:25 +00:00

README

========================================================================
                    OpenJPIP software 1.0 ReadMe

OpenJPEG:
http://www.openjpeg.org

Written by:
Kaori Hagihara
UCL/SST/ICTM/ELEN
February 18 2011
========================================================================

Contents:
1. Introduction
2. License
3. System requirements
4. Implementing instructions
5. JP2 encoding instructions


----------
1. Introduction
----------

OpenJPIP software is an implementation of JPEG 2000 Part9: Interactivity tools, APIs and protocols (JPIP).
( For more info about JPIP, check the website: http://www.jpeg.org/jpeg2000/j2kpart9.html)
The current implementation uses some results from the 2KAN project (http://www.2kan.org).

First Version 1.0 covers:
 - JPT-stream (Tile based) media types
 - Session, channels, cache model managements
 - JPIP over HTTP
 - Indexing JPEG 2000 files
 - Embedding XML formatted metadata
 - Region Of Interest (ROI) requests

----------
2. License
----------

This software is released under the BSD license, anybody can use or modify the library, even for commercial applications.
The only restriction is to retain the copyright in the sources or the binaries documentation.
Neither the author, nor the university accept any responsibility for any kind of error or data loss which may occur during usage.

----------
3. System requirements
----------

 - OpenJPEG library (currently assumes it is installed on the system => will not use the one built higher in the directory structure)
 - FastCGI development kit (C libraries) at server (http://www.fastcgi.com)
 - Java application launcher at client
 - Kakadu software ( http://www.kakadusoftware.com). Currently required to encode jpeg 2000 images with tile-parts. This will be implemented soon in openjpeg, making this requirement obsolete.
<Optional>
 - Xerces2 java XML parser on the client for accessing embedded image metadata (http://xerces.apache.org/xerces2-j)

We tested this software with a virtual server running on the same Linux machine as the clients.

----------
4. Building instructions
----------

A Makefile is available in the same directory as this README file. Simply type 'make' and it will build all the required C-executables.
Concerning the java-based opj_viewer, simply type 'ant' in the corresponding directory (requires 'ant' utility of course)

CMake files ar planned to be included ASAP.

The documentation can be build this way (requires doxygen utility):
  cd doc
  doxygen Doxyfile

----------
5. Usage
----------

Preliminary notes : 
  * HTML documentation is available at http://www.openjpeg.org/jpip/doc/html
  * Example image is available at http://www.openjpeg.org/jpip/data/copenhague1.zip (20 Mb !)

Webserver: 
  You need a webserver running with the fastcgi module enabled and correctly configured. 
  For Apache, add the following line to your /etc/apache2/mods-available/fastcgi.conf configuration file:
  
      FastCGIExternalServer /var/www/myFCGI -host localhost:3000
  
  where /var/www is your DocumentRoot. 
  Please refer to 'http://www.openjpeg.org/jpip/doc/ApacheFastCGITutorial.pdf' for more details.

Server:
 1. Store JP2 files in the same directory as opj_server

 2. Launch opj_server from the server terminal:
    % spawn-fcgi -f ./opj_server -p 3000 -n
 
 For shutting down JPIP server:
     %GET http://hostname/myFCGI?quitJPIP
     Notice, http://hostname/myFCGI is the HTTP server URI (myFCGI refers to opj_server by the server setting)
     Requst message "quitJPIP" can be changed in Makfile, modify -DQUIT_SIGNAL=\"quitJPIP\"

Client:
 1. Launch image decoding server, and keep it alive as long as image viewers are open
    % ./opj_dec_server

    You might prefer to implement this program from another directory since cache files are saved in the working directory.
    % mkdir cache
    % cd cache
    % ../opj_dec_server

 2. Open image viewers (as many as needed)
    % java -jar opj_viewer.jar http://hostname/myFCGI JP2_filename.jp2 [stateless]
    ( The arguments 
      - http://hostname/myFCGI is the HTTP server URI (myFCGI refers to opj_server by the server setting)
      - JP2_filename.jp2 is the name of a JP2 file available on the server.
      - stateless if stateless request is desired, otherwise session request is implemented
    Image viewer GUI instructions:
      Scale up request: Enlarge the window
      ROI request:      Select a region by mouse click and drag, then click inside the red frame of the selected region
    <If Xerces2 is installed>
    % java -jar opj_viewer_xerces.jar http://hostname/myFCGI JP2_filename.jp2
      Annotate image with ROI information in XML metadata: Click button "Region Of Interest"
      Open a new window presenting an aligned image with a locally stored image: Click button "Image Registration" (Under Construction)

 3. Quit the image decoding server through the telnet, be sure all image viewers are closed
    % telnet localhost 5000
      quit

----------
5. JP2 encoding instructions
----------

An example to encode a TIF image "copenhague1.tif" at resolution 4780x4050, 8bit/pixel, grayscale.

 1. J2K encoding using Kakadu with an option which introduces the tile-part flag at each resolution level
    % ./kdu_compress -i copenhague1.tif -o copenhague1.j2k Corder=RPCL  ORGtparts=R Stiles={256,256}

 2. JP2 encoding with embedding indexing data
    % ./j2k_to_idxjp2 copenhague1.j2k copenhague1.jp2

<Option>
 3. Embed metadata into JP2 file
    % ./addXMLinJP2 copenhague1.jp2 copenhague1.xml
    Input metadata file "copenhague1.xml" looks like:
    <xmlbox>
      <roi name="island" x="1890" y="1950" w="770" h="310"/>
      <roi name="ship" x="750" y="330" w="100" h="60"/>
      <roi name="airport" x="650" y="1800" w="650" h="800"/>
      <roi name="harbor" x="4200" y="1650" w="130" h="130"/>
      <irt refimg="name1.jp2" m1="0.50" m2="-0.50" m3="0" m4="0.80" m5="-0.80" m6="0" m7="500" m8="1000" m9="0"/>
    </xmlbox>