Implementation of image pre-processing methods on android

572 views Asked by At

Could you please suggest a library (or a snippet) to implement pre-processing Python methods (e.g. numpy.expand_dims() or img_to_array) on Android API 18 (to deploy an app based on TensorFlow Mobile)? There are analogous libraries to Python on Java (e.g. ND4J), but they require device or emulator that runs API level 21 or higher.

from keras.preprocessing.image import img_to_array
import numpy as np

    image = img_to_array(image)
    image = np.expand_dims(image, axis=0)
    image /= 255.
1

There are 1 answers

2
hpaulj On

I an interactive session:

In [168]: np.source(np.expand_dims)
In file: /usr/local/lib/python3.5/dist-packages/numpy/lib/shape_base.py

def expand_dims(a, axis):
    """
    .... docs
    """
    a = asarray(a)
    shape = a.shape
    if axis > a.ndim or axis < -a.ndim - 1:
        # 2017-05-17, 1.13.0
        warnings.warn("Both axis > a.ndim and axis < -a.ndim - 1 are "
                      "deprecated and will raise an AxisError in the future.",
                      DeprecationWarning, stacklevel=2)
    # When the deprecation period expires, delete this if block,
    if axis < 0:
        axis = axis + a.ndim + 1
    # and uncomment the following line.
    # axis = normalize_axis_index(axis, a.ndim + 1)
    return a.reshape(shape[:axis] + (1,) + shape[axis:])

So basically it uses reshape, with a shape that includes a size 1 dimension in the right place. That could also have been done with the [:,:,np.newaxis,...] syntax.

Whether any of that is portable to Java depends on the array implementation in that language.