2017-09-05 45 views
0

您能否建議一個庫(或代碼片段)在Android API 18上實現預處理Python方法(例如numpy.expand_dims()img_to_array)(部署基於TensorFlow Mobile的應用程序) ? Java上有類似於Python的庫(例如ND4J),但它們需要運行API級別爲21或更高的設備或模擬器。在android上執行圖像預處理方法

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. 
+0

有一個鏈接到功能文檔頁面上的源代碼。 – hpaulj

回答

0

我一個交互式會話:

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:]) 

所以基本上它使用reshape,其形狀包括在正確的地方大小1尺寸。這也可以通過[:,:,np.newaxis,...]語法完成。

是否有任何可移植到Java取決於該語言的數組實現。

+0

非常感謝您的回答。我看到了源代碼。我的問題與此完全相關:「是否有任何可移植的Java依賴於該語言中的數組實現。」我之前在Java中寫過空行,並將我的Python代碼移植到Java是我的映像的唯一途徑預處理需求。 –

+0

這種重塑在'numpy'中很容易,因爲數據實際上存儲在1d緩衝區中,並且形狀(尺寸)以元組的形式存儲。形狀影響對數據的解釋和迭代,但不影響存儲。但是,如果多維數組以數組的形式存儲,就像使用Python列表一樣,任何形式的重塑都需要更多的工作。 – hpaulj

+0

我明白了,再次感謝你! –