
DESCRIPTION:

ImgProc:Server:
   FILE: img_proc_s.py
   SERVICE: ImageFileResource PUT:
      - check content type, extract image type
      - insert void image to DB_imgproc:images (image.state = "inserted")
      - retrieve last image.id from DB_imgproc:images
      - update image.uri in DB_imgproc:images (composed from image.id and image extension)
      - store image to FRAMES_TO_PROCESS_DIR
      - update image.state in DB_imgproc:images to "uploaded"
      - DONE

ImgProc:Daemon:
   FILE: process_daemon.py
   FUNCTION:
      - endless cycle
         - select first image with image.state == "uploaded" from DB_imgproc:images
         - if any exist
            - run ImgProc:ProcessImage <image.id> <image.uri>
            - if succeeded
               - update image.state in DB_imgproc:images to "processed"
            - else
               - update image.state in DB_imgproc:images to "invalid"
         - else
            - sleep one second

ImgProc:ProcessImage:
   FILE: process_image.py
   ARGS: <img_id> <img_uri> // TODO hmmm asi zbytecne img_uri, je mozne jej vysát z DB
   FUNCTION:
      - target_img = FRAMES_DIR/img_uri.FRAME_EXT
      - convert image from FRAMES_TO_PROCESS_DIR/img_uri to target_img

      - run_segmentation
         - convert target_img => TMP_img (bitmap with alpha channel)
         - extract feature vectors TMP_img => TMP_feature_data
         - cluster feature vectors TMP_feature_data => TMP_seg_img
         - classify texture types, and attach unique color to segments (target_img, TMP_seg_img) => (TMP_seg_conv_img, cttm)
            - cttm - color to texture_type map
         - run ImgProc:SegToPols TMP_seg_conv_img => DB_queries
         - in DB_queries substitude keywords (IMAGE_DB_ID,TEXTURE_TYPE,DESCRIPTION) by proper values
         - insert segments to DB_imgproc

      - run_detection
         - run ImgProc:Detection target_img => DB_queries
         - in DB_queries substitude keywords (IMAGE_DB_ID,OBJ_TYPE,DESCRIPTION) by proper values
         - insert objects to DB_imgproc

ImgProc:SegToPols:
   FILE: seg_to_pols.py
   ARGS: <image>
   FUNCTION:
      - split grayscale image to set of images (one image for each segment) image => seg_image_set
      - foreach seg_image in seg_image_set:
         - trace segment image to SVG seg_image => svg_image
         - read polygon from SVG and insert it to polygon set svg_image => polygon_set
      - foreach polygon in polygon_set
         - create sql_query and print it to stdout

ImgProc:Detection:
   FILE: detection.py
   ARGS: <image>
   FUNCTION:
      - for clasifier in folder CLASSIFIERS_PATH
         - retrieve classifier parameters
         - run classifier on image => append result to detected_objects
      - for object in detected_objects
         - create sql_query and print it to stdout

ImgProc DB_imgproc
   - viz. engine/init_db.sql

USE CASE:

Case: ImageFileResource PUT
   - Server upload image, result image is in state "uploaded"
   - Daemon will find "uploaded" image and executes ProcessImage on it
      - result image is in state "processed"

Case: ImageFileResource GET
   - Test image state in DB_imgproc
   - return image data or message, based on image state

Case: ImageFileResource DELETE
   - Test if image exist and image state in DB_imgproc
   - based on state:
      - delete image segments and detected objects
      - delete image itself

