Public Lab Research note

Google Summer of Code 2019 Public Lab Final Work Product: Pranshu Srivastava

by rexagod | August 25, 2019 23:43 25 Aug 23:43 | #20666 | #20666

rexagod was awarded the Javascript Enthusiasm Barnstar by gauravano for their work in this research note.

Project Details

Project Description


matcher-core essentially employs the ORB(Oriented FAST and Rotated BRIEF) algorithm to mine patterns using the well-known FAST(Features from Accelerated Segment Test) keypoint detector and the BRIEF(Binary Robust Independent Elementary Features) descriptor technologies, which provide appreciable performance boosts on low computational costs.


A Node-based CLI utility for headlessly testing custom matcher-core configurations, this module eases any development process on the matcher-core library by allowing the user to run a set of commands on their locally deployed Chromium environment in a headless manner, i.e., right from the CLI, without the need to open the browser whatsoever, be it testing, demonstration, debugging issues, etc. matcher-cli enables headless support for all of these tasks, and can easily integrate with your choice of CI to automate any of the above tasks right inside your CI.


A Leaflet extension to distort images -- "rubbersheeting" -- for the (src) image georectification service by Public Lab. Leaflet.DistortableImage allows for perspectival distortions of images on the client-side.

Project Demonstrations


Watch the matcher-core in action by mapping two 4K images this demo.


Run the following command inside your terminal for an interactive demo.

$ bash <(curl -s


Checkout the stitcher and projector helper modules for matcher-core in action here by enabling matcher.js from the bottom-left. The current progress is demonstrated here which I got the opportunity to contribute to for some time as well.

Project Involvement

Being welcoming in nature, the README.mds below have been catered from a contributor's perspective, and include almost every resource a contributor would require in order to get started with these.

FTOs can be found below.

Project Leftovers and Future Plans

  • matcher-core
    • Implementing streams for data flow between sockets. This would immensely reduce noise, and speed up the load time. The idea's pretty simple, send the utils promise directly to the socket in the form of a stream and resolve it there and then.
    • Rebasing rexa-soc-ldi after we shift to ES6.
    • Containerized build through Docker on the CI.
    • More (unique) headless automated tasks (other than tests, for eg., crossposting back to the PR on each build, etc.) on the CI.
    • Rebasing matcher-module once we modify image-sequencer for asychronous modules (as proposed to @jywarren).
  • matcher-cli
    • Vorpal was incorporated for a better understanding of the codebase, but takes a bit to load. Implementing Vorpal's APIs purely in Node would definitely bring up the loading time, but it would be a tradeoff for code abstractions.
    • Generalize standard methods and expose APIs to gain flexibility.
  • Leaflet.DistortableIamge
    • PWA conversion! Perhaps take a step further and integrate electron as well.
    • In-browser drag and drop functionality.
    • Headless tests on CI.

Project Overall Contribution

Project Experience

The Public Lab community has supported me througout the duration, and even before this Summer of Code began, and granted me such a great opportunity to work among such brilliant and supportive people, for which I'll always be obliged to them. I've undoubtedly learnt numerous stupendous concepts throughout my time here, and perfected my passion for JavaScript through the guidance of my mentors, who were always there to support me, motivate me, and help me push my limits, for which I'll always be thankful.

Thank you, Public Lab, for such a fascinating experience, I'd love to continue being a part of and keep on contributing to this amazing community!


@gauravano awards a barnstar to rexagod for their awesome contribution!

Reply to this comment...

Although, the research paper you referenced at the top explains the algorithm but, try to explain it via a rough sketch/GIF/Video about the algorithm. You can also add a GIF to matcher-core and matcher-cli Readme files.

Thank you so much for your great contributions in all the projects. Your enthusiasm for JS is great. I hope, you'll motivate many new developers and contributors, and will learn more and grow more.


Reply to this comment...

Great work pranshu!!!

Reply to this comment...

Login to comment.