美文网首页我爱编程
Android中使用TensorFlow

Android中使用TensorFlow

作者: kingple | 来源:发表于2017-09-15 12:44 被阅读524次

    前言

    • TensorFlow是谷歌研发的第二代人工智能学习系统,其命名来源于本身的运行原理。
    • Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流图的一端流动到另一端计算过程。
    • TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统。

    TensorFlow Android

    • tensorflow对android和ios平台都做了适配
    • android:tensorflow/tensorflow/examples/android/
    • Demo中使用的camera2 Api支持需要5.0及以上系统
    • tensorflow lib 支持android 4.0 及以上版本
    • ios : tensorflow/tensorflow/examples/ios/
    • 需要xcode 7.3

    TensorFlow 大概执行过程

    tensorFlow执行过程图
    • Session 计算模型的执行环境
    • Graph 计算模型
    • Tensor 计算过程中传递数据的结构
    • feed、fetch输入和输出数据

    编译

    • git clone https://github.com/tensorflow/tensorflow.git

    • 首先用Android Studio打开目录tensorflow/tree/master/tensorflow/examples/android

    • 修改build.gradle

      • def nativeBuildSystem = 'none'
      • 把nativeBuildSystem的值改为none, 这样就不会本地编译tensorflow库,而是直接用TensorFlow AAR from JCenter
      • 修改build.gradle和download-models.gradle文件中所有的jcenter()为jcenter { url "http://jcenter.bintray.com" } 目的是从jcenter的http地址下载相关aar包。
    • 下载模型文件并放到gradleBuild/downloads下面, 直接用gradle task downloadFile下载模型文件会超时,因为地址是https的。

    • 打开download-models.gradle文件

      https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip
      https://storage.googleapis.com/download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_android_export.zip
      https://storage.googleapis.com/download.tensorflow.org/models/stylize_v1.zip
      https://storage.googleapis.com/download.tensorflow.org/models/speech_commands_conv_actions.zip
      
      • 直接下载上面的4个文件, url地址就是MODEL_URL和文件名的拼接, 下载完后放到gradleBuild/downloads
      • 在工程目录下新建libs文件夹,添加libtensorflow_demo.so等文件
    • libtensorflow_demo.so 文件复制过来。这样就不需要自己编译jni库了

    android中使用TensorFlow

    • 引入依赖
      compile 'org.tensorflow:tensorflow-android:+'
    • 复制PB文件
      快速开发的话直接把PB文件放在assets文件夹里就行,如果正式上线的时候觉得PB文件 一起打包较大的话可以放在服务器,打开APP的时候提示下载再复制进去就好。
    • 载入TensorFlow
      System.loadLibrary("tensorflow_inference");
    • 初始化模型
      TensorFlowInferenceInterface inferenceInterface = new TensorFlowInferenceInterface(context.getAssets(),"rounded_graph.pb");
    • 设置入参
      inferenceInterface.feed();
    • 执行session
      inferenceInterface.run();
    • 获取输出数据
      inferenceInterface.fetch();
    • 输出数据变换
      fetch方法的接受变量的参数类型只有double、float、int、byte,如果有其他类型可以通过byte[]接收,然后自己解析成想要的数据类型

    TensorFlow Android demo效果

    demo效果

    相关文章

      网友评论

        本文标题:Android中使用TensorFlow

        本文链接:https://www.haomeiwen.com/subject/zwljsxtx.html