CameraBlur:Portrait mode using DeeplabV3+ Semantic Image Segmentation

A simple android app to implement Portrait mode using a single sensor like in Pixel 2 (well not exactly exactly like Pixel 2's). This app allows you to either click image from your phone or select an image from storage and apply the blur. This app can run on ARM32 bit ARM v7A as well as ARM64 ARMv8-A.


Download apk from here



Some Samples


For developers

I have 3 pre-trained models of different crop sizes Default 1025 px. You can use any one of them but with increased crop size the processing time also increases (by a lot), so use them as per your requirement. Crop size is the size of the image that the input image will be resized to and sent for processing. The output dimensions are always less than crop size.

For using 1537 px: Copy InputSize 1537px\frozen_inference_graph.pband paste it in CameraBlur\app\src\main\assets\.

Then change CameraBlur\app\src\main\java\com\anondev\gaurav\camerablur\DeeplabProcessor.javaline 28


public final static int INPUT_SIZE = 1025;


public final static int INPUT_SIZE = 1537; 


v0.0.2 Added SoftBlur around edges

v0.0.3 Implemented blur using Android RenderScript

v1.0.0 Exported MobilenetV2 model with depth multiplier=0.5(mobilenetv2_dm05_coco_voc_trainaug ). Accuracy is slightly reduced but performance gain is extremely high.


Attributions/Thanks/External code

This application wouldn't have been possible without the great material produced by the community. I would like to give special thanks to the authors of essential parts I've got on the internet and used in the code.:

  title={Inverted Residuals and Linear Bottlenecks: Mobile Networks for Classification, Detection and Segmentation},
  author={Mark Sandler and Andrew Howard and Menglong Zhu and Andrey Zhmoginov and Liang-Chieh Chen},

Photo Credits


Copyright 2018 Gaurav Chaudhari, and licensed under the Apache License, Version 2.0. No attribution is necessary but it's very much appreciated. Star this project if you like it!