Note: This is a draft and some sections are under development
Gitter Nick: ccpandhare
Institute: BITS Pilani (Pilani Campus)
Degree: B.E. Electrical and Electronics Engineering (Class of 2020)
Location: Pilani, Rajasthan, India (GMT + 5:30)
Developing Image Sequencer as a Library
Image Sequencer is in early-development phase. The core functionality (addition of a step, removal of a step, insertion of a step, etc.) is being implemented. There are a few modules present. Calculations aren't GPU accelerated. As a result, there is a lag when images larger than 700KB are handled.
Aim of my project:
The aim of my Project is to expand the module library by implementing powerful and useful image processing modules (As listed at the end of this proposal) with possible integration with GPU.js for enabling GPU-backed calculations and hence enhance performance, reliability and speed. And, ultimately, to develop Image Sequencer as an importable library for image manipulation. Also, support will be developed for JSON input. This is explained below in detail.
Current functioning of Image Sequencer
This chart shows how Image Sequencer currently works. There are certain issues attached to the current implementation of Image Sequencer:
- Long call syntax --- This can be improved upon.
- Only one image is handled per instance of Image Sequencer
- Direct DOM manipulation --- This makes Image Sequencer demo specific. i.e, Dependant on the HTML UI
- No JSON support --- This makes integration of Image Sequencer into large-scale projects impractical.
- Time Lag --- When a step is added, sequencer.run() runs through all the steps --- this creates an unnecessary time lag.
- The outputs of different steps aren't stored and hence can't be accessed at will. The library simply injects the output images into the UI.
- No functionality for modules to send logs or non-image data to user.
- Non GPU-accelerated --- This slows down speed for images > 700KB
My project aims at restructuring the code and expanding the module base which will lead to faster and neater usage.
Post-Project functioning (Draft)
This chart shows how I plan to make Image Sequencer work. These would be my milestones:
- Completing the core functionality --- addStep/s, removeStep/s, insertStep/s, getOutput, stepLog.
- Supporting JSON type input & output to enable easy use and shorter call syntaxes.
- Enhancing speed with the help of GPU accelerated calculations using GPU.js.
- Accepting logs / non-image outputs from modules.
- Enabling multiple image handling
- Reducing dependancy on UI and DOM Manipulation
- Implementing modules (non-exclusive list at end of the proposal)
- Publish to npm.
Post-Project Usage Examples (Both methods)
Method - 1 (Similar to the existing model):
Method - 2 (JSON Model):
Timeline (Coding Days: May 30 to Aug21)
Week 1 & 2 (May 30 to June 11)---Core Functionality and JSON
Implementing the core functions addStep/s, removeStep/s, insertStep/s, getOutput, stepLog, complete with JSON input/output support. This will include most of the restructuring work. ImageSelect.js will no longer have a 'special module' status as it currently does.
Week 3 (June 12 to June 18)---Multiple Image Support and GPU.js integration
Support will be added for handling multiple images. User would be able to access data relating to any step on any image at will.
GPU.js will be integrated with Image Sequencer. So that the matrix calculations of modules are GPU accelerated, whenever possible. This will include changes in /src/PixelManipulation.js and other files.
Community review for Core Functionality and JSON.
Week 4 (June 19 to June 25)---Module Logs
Module logs will be returned to user. A method getOutput will be introduced. This will enable modules to send non-image data to the user. For example, A QR Code reading module can send detected data to the user.
Community review for Multiple Image Support and GPU.js integration.
Weeks 5 & 6 (June 26 to July 9)---Module Implementation
Modules in the list of module candidates will be implemented along with Additional modules as suggested by the community. Also a special module, 'Color Space' will be implemented which changes the colour space of the image to user defined functions of r, g, b, a.
Community review for Module Logs
Weeks 7 & 8 (July 10 to July 23)---Work on Demo
Demo will be reworked, with a better UserInterface.js. UserInterface.js will be made demo-independent --- It's function will be independent of the implementation where Image Sequencer is being used.
Community review for Module Implementation.
Weeks 9 to 13 (July 24 to August 21)---Final Work, Fixes, Suggestions
This period will be for bug-fixing, goal-expansion, and implementing community suggestions. Also, My college starts functioning from July 31. So my contribution might decrease a bit in this period. This will officially conclude my work for Image Sequencer, though I'll still be associated with the project and contribute to it, as and when possible.
This is my fork of the Image Sequencer project: https://github.com/ccpandhare/image-sequencer
These are a few of my contributions to publiclab/image-sequencer:
- Added removeStep functionality (Built) [PR #17]
- Fixed addStep functionality (Merged) [PR #12] [Issue #2]
- Added Crop Module (Merged) [PR #8] [Issue #5]
- Bugfixes in ImageThreshold.js and ImageSelect.js (Merged) [PR #6] [Issue #2]
- Detected and reported issues #19, #15, #14, #13, #3, #2
I am a Web Developer and a Python enthusiast. I have worked on many technologies till date and have done that over the past six years.
Some of my notable projects:
Basic Functionality : Adding shapes, text, images, background removal form imported images, flipping objects along X and Y axes.
GitHub Link : https://github.com/ccpandhare/ziolk
- Nalanda Lite : A script to auto-download lecture slides (Python - BeautifulSoup)
Basic Functionality : Download/Update Lecture slides from our college portal, Nalanda and store them on the user's laptop.
GitHub Link : https://github.com/ccpandhare/nalandalite
- Document management portal for the District Court of Jhunjhunu, Rajasthan State, India in association with the Media Lab, BITS Pilani. (PHP - mySQL)
Front-end development frameworks used : SASS, HAML
Front-end deployment frameworks used : jQuery, Angular.js, D3.js, Bootstrap, Materialize, Fabric.js.
Back-end Experience : PHP, mySQL, Node.js
I am a part of DVM BITS Pilani. We are a group of students who create Android Applications, Websites and Videos for the various tests of our college. This is some of the latest work undertaken by DVM:
List of Module Candidates (non-exhaustive)
This list is compiled from the original Readme.md of Image Sequencer and my own online searches.
- rExtract https://github.com/linuxenko/rextract.js
- Histogram https://www.npmjs.com/package/histogram
- Flood Fill https://github.com/hughsk/flood-fill
- Blink Diff https://www.npmjs.com/package/blink-diff
- Pixel Match https://www.npmjs.com/package/@schornio/pixelmatch
- PNGJS Image https://github.com/yahoo/pngjs-image
- CannyJS https://github.com/yuta1984/CannyJS
- JSQRCode https://github.com/vicapow/jsqrcode
- quaggaJS https://serratus.github.io/quaggaJS/
- jquery.facedetection https://github.com/jaysalvat/jquery.facedetection
- Popular Image Filters