一、环境配置
- For Android build, ANDROID_NDK_HOME must be confifigured by using
export ANDROID_NDK_HOME=/path/to/ndk
- It will link
libc++
instead ofgnustl
ifNDK version >= r17b
andbazel 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。
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
保存
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文件夹
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 后 再行测试。(亲身经历)