一、环境配置

 

  请参照小米官方的文档:https://mace.readthedocs.io/en/latest/installation/env_requirement.html

 

  •  For Android build, ANDROID_NDK_HOME must be confifigured by using export ANDROID_NDK_HOME=/path/to/ndk
  •  It will link libc++ instead of gnustl if NDK version >= r17b and bazel version >= 0.13.0, please refer to NDK cpp-support.

 

二、框架搭建

  

  1、下载小米MACE镜像

    轻量版 mace-dev-lite 镜像下载    

# Pull lite edition docker image
docker pull registry.cn-hangzhou.aliyuncs.com/xiaomimace/mace-dev-lite
# Build lite edition docker image
docker build -t registry.cn-hangzhou.aliyuncs.com/xiaomimace/mace-dev-lite ./docker/mace-dev-lite

        完全版mace-dev镜像下载(包含多版本的NDK和一些其他工具)

# Pull full edition docker image
docker pull registry.cn-hangzhou.aliyuncs.com/xiaomimace/mace-dev
# Build full edition docker image
docker build -t registry.cn-hangzhou.aliyuncs.com/xiaomimace/mace-dev ./docker/mace-dev

  2、创建容器

       以mace-dev-lite为例

# Create a container named `mace-dev`
docker run -it --privileged -d --name mace-dev \
           -v /dev/bus/usb:/dev/bus/usb --net=host \
           -v /local/path:/container/path \
           -v /usr/bin/docker:/usr/bin/docker \
           -v /var/run/docker.sock:/var/run/docker.sock \
           registry.cn-hangzhou.aliyuncs.com/xiaomimace/mace-dev-lite
# Execute an interactive bash shell on the container
docker exec -it mace-dev /bin/bash

  3、克隆源码

git clone https://github.com/XiaoMi/mace.git
git fetch --all --tags --prune

# Checkout the latest tag (i.e. release version)
tag_name=`git describe --abbrev=0 --tags`
git checkout tags/${tag_name}

  4、进行源码编译、生成库文件以及创建工程、测试。

  方法一

    (1)一步直接完成编译和相关库、文档的创建和配置 。不需要任何其他操作。

  cd mace/example/android
  ./build.sh

    (2)使用Android studio打开mace/example/下的android项目,在file>Project Structure>SDK Location中的Android NDK Location 中 配置Android studio 的NDK 路径到自己所安装的路径。

     (3)连接Android手机进行测试。

    注:若出现闪退现象,可能手机权限不够,可以对测试机进行 ROOT 后 再行测试。(亲身经历)

  方法二

   (1)克隆mace model zoo ,放在与mace文件同目录下。

  git clone https://github.com/XiaoMi/mace-models.git

  (2)编译mace library。

  cd mace
  bash tools/build-standalone-lib.sh

  (3)在转化静态库时将模型转化为C++代码,转化有两种方式

     以使用mobilenet-v2为例:

      修改   mace-models/mobilenet-v2    文件夹下的   mobilenet-v2.yml  和   mobilenet-v2-host.yml。

      1)将模型图转换为代码,将模型权重转换为具有以下模型配置的文件。
 
            model_graph_format: code
            model_data_format: file

      2)将模型图和模型权重转换为下面的模型配置代码。

                model_graph_format: code
                model_data_format: code

          --在此建议全部转化为模型配置代码--

      即 将 mobilenet-v2.yml 和 mobilenet-v2-host.yml  文件中的         

           model_graph_format: code
           model_data_format: file
           #改为#
           model_graph_format: code
           model_data_format: code

      保存

  
  (4)将模型转化为mace格式的模型。
 
  python tools/converter.py convert --config=/path/to/mace-models/mobilenet-v2/mobilenet-v2.yml       #/path/to/  为自己的文件路径

  

   (5)转化后会在 builds/ 文件夹下生成  include, lib, mobilenet-v2 等文件夹。

 

   (6)在android项目中的macelibrary/src/main/cpp 文件夹下

    

    mace/example/android/macelibrary/src/main/cpp 文件夹下

          -- 新建include/mace/public文件

       -- 新建lib文件夹

       -- 新建model文件夹
  (7)将库文件夹mace/builds/下的相关文件复制到工程文件 mace/example/android/ 下的相关文件夹下 。
    1、将 builds/include/mace/public/ 下的mace.h 以及 mace_runtime.h拷贝进去macelibrary/src/main/cpp/include/mace/public中
    2、将 builds/mobilenet-v2/include/mace/public/ 下的mace_engine_factory.h 以及 mobilenet_v2.h拷贝至 macelibrary/src/main/cpp/include/mace/public中
    3、将 builds/mobilenet-v2/model 下的mobilenet-v2.a 拷贝至 macelibrary/src/main/cpp/model中,并修改mobilenet-v2.a 为 mobilenet.a
    4、将 builds/lib下的文件都拷贝至macelibrary/src/main/cpp/lib中
    5、修改 macelibrary/src/main/cpp/include/mace/public 下 所有 .h 文件中引入的文件地址

        为

         #include "src/main/cpp/include/mace/public/mace.h"

     注:若文件中没有路径文件,则在头文件下加上以上地址;若存在,则跟换为以上地址。

 

  (8)使用Android studio打开mace/example/下的android项目,在file>Project Structure>SDK Location>Android NDK Location 中 配置

     Android studio 的NDK 路径到自己所安装的路径。

 

   (9)由于这个测试的app默认是使用mobilenet_v1的模型的,所以我们更改一下代码让他使用mobilenet_v2,修改android studio工程下

     app/src/main/java/com.xiaomi.mace.demo.result/InitData.java文件中的。 

         model = MODELS[0];
     改为:
      model = MODELS[1];

     

 

       (10)连接Android手机进行测试。

    注:若出现闪退现象,可能手机权限不够,可以对测试机进行 ROOT 后 再行测试。(亲身经历)

 

 

 

 

   

    

   

    

 

posted on 2018-08-14 19:41  KAMINI  阅读(814)  评论(1编辑  收藏  举报