1

我在 Python 中使用 Keras 制作了一个图像分类模型,格式为“.h5”。我正在尝试使用 Deeplearning4j 在我的 Android 应用程序中使用它。

当我尝试通过使用NativeImageLoader构造函数加载Mat图像来进行图像分类时,我遇到了一个问题。代码如下:

NativeImageLoader nativeImageLoader = new NativeImageLoader(60, 60, 3);
INDArray image = nativeImageLoader.asMatrix(testImage);   // testImage is of Mat format

// 0-255 to 0-1
DataNormalization scaler = new ImagePreProcessingScaler(0, 1);
scaler.transform(image);
// Pass through to neural Net
INDArray output = model.output(image);
INDArray labels = model.getLabels();

当应用程序构建时,它会在上面代码的第二行给出错误,即INDArray image = nativeImageLoader.asMatrix(testImage);

构建 apk 时出现以下错误:

Error:(1109, 51) error: cannot access BufferedImage
class file for java.awt.image.BufferedImage not found

我试图找到解决方案,但这表明Android 不支持 AWT 包。

请帮助我解决方案或解决方法。谢谢你。

4

1 回答 1

0

您必须重构 Deeplearning4j 以将 java-awt 特定库移植到平台独立 Java 库,并使用 platfrom 特定处理程序用于 android 和 awt/j2se

在 java Deeplearning4j 库中,您必须将所有 java-awt 特定类(如 BufferedImage)隐藏在接口 IBitmap 后面,并为 j2se 和独立地为 Android 实现该接口。

我已经成功地完成了 exif/icc/ipc 元数据处理并实现了接口 pixymeta-lib/.../IBitmap.java 并实现了 j2se pixymeta-j2se-lib/.../j2se/BitmapNative.java 和 android pixymeta- android-lib/.../android/BitmapNative.java

所以我有这些包

  • pixymeta 库
    • 转换后的平台独立库,其中所有 awt 引用都替换为 IBitmap 接口
  • pixymeta-j2se-lib
    • IBitmap 的 awt/j2se 实现
  • pixymeta-android-lib
    • IBitmap的android实现

这个答案的一部分是从这里复制的

于 2017-05-04T07:23:20.290 回答