Show and Tell - Dash Image Processing App with Pillow, S3 and Redis

Try out the app here: https://dash-image-processing.plot.ly/

Recently, while I was been playing around with ImageJ, an image processing app in Java, I was wondering if it was possible to bring two changes: port the app into a browser interface, and shift the computation to the backend (so that extremely large images can also be processed).

This app wraps Pillow, a powerful image processing library in Python, and abstracts all the operations through an easy-to-use GUI. All the computation is done on the back-end through Dash, and image transfer is optimized through session-based Redis caching and S3 storage.

This is how I thought about making a Dash app that would wrap Pillow, the modern version of the Python Imaging Library. This was the natural thing to do because Dash itself is already based on Flask, and Plotly already has the graph objects for manipulating images. Adding S3 storage to keep the uploaded file and caching the operations with Redis were absolutely painless because of the easy integration with Python.

Although only a subset of Pillow is currently present, you are welcome to add any type of plugins, e.g. ML-based image processing. Here are a couple of idea I have in mind:

  • Using Mask R-CNN for object segmentation, then use pillow to automatically apply operations (color2gray, blur, depth blur, etc.)
  • Use MobileNet for automatic cropping

Guidelines for contributing and how to add more features will come soon. If you have any suggestion in how to structure the supplementary plugins, feel free to propose them in an issue or PR!

Interested in contributing? Check out the project repo and make a PR with your addition: https://github.com/plotly/dash-image-processing

Screenshot:

5 Likes

This is pretty cool.