EasyDL图像Android-ARM-SDK集成快速开始
简介
本文档包括两个部分,分别适用于SDK测试、SDK集成。开发者可根据实际需求选择参考:
- SDK测试文档:供测试Demo时参考
- SDK集成文档:供将SDK集成进自己的代码时参考
测试前的准备
-
Android系统的硬件及开发环境
- 详情参考下方文档
-
EasyDL平台的Android SDK
- 以图像分类为例,前往操作台训练模型后,选择发布为Android系统的通用设备端SDK,发布成功后即可从平台下载
-
用于激活设备端SDK的序列号
- 前往控制台申请用于激活通用设备端SDK的序列号
Android SDK 测试文档
这个部分将为新手提供一个快速测试Easydl & EasyEdge的Android Demo的图文教程。
效果展示
测试前的准备
- 硬件:
- 准备一台PC机
- 准备一台较新款的Android 手机 不支持模拟器
- SDK
- 您已经生成Android SDK 并且已经下载成功
- 您已经通过扫描二维码的形式,在这台Android 手机上测试成功想要的功能。
- 生成序列号
- 如果是开源模型版本,不需要序列号,
- 如果测试的是“按单台设备激活”,需要额外获取一个序列号
- 如果需要额外测试“产品线激活”的序列号,需要再准备一个包名。demo的包名com.baidu.ai.easyaimobile.demo。
- 开发环境
- 因为Android是google公司的项目,测试过程中可能需要访问国外网站下载资源。
- PC机上安装较新版本的Android Studio, 本文使用的是4.0.1版本。下载地址
- 在这台Android手机上测试通过一个Android HelloWorld项目
Android Studio的安装及手机测试
本段简单地描述如何通过Android Studio在手机上运行一个自带的Demo,有android基础的可以跳过本段。
手机上需要打开开发者模式,您也可以下载91助手,按照软件提示连接手机。
更多Android Studio的安装测试也可以百度下 【Android Studio自动生成Demo】。
新建Android Studio自带的测试项目, 菜单File->New Project.. , 弹框中选择“Basic Activity”,点“Next”, 之后用默认配置, 点“Finish”后项目就生成了
。
小技巧:Android项目需要同步后才能出现编译和运行的选项。强制同步的方法为:菜单File->Sync Project with Gradle Files
导入成功后,有以下的图标:
导入官方Demo
导入项目: 菜单File->New-> Import Project .. , 选择PaddleOCR\deploy\android_demo目录
。 注意千万不要使用菜单File->New-> New Project..
导入项目后,会触发gradle的自动同步,最终效果如下:
此时项目可以正常编译,
- 如果是开源模型版本,此时可以正常运行。
- 如果需要序列号的情况,此时会界面会报错“序列号错误”
填入序列号
如果是开源模型版本,不需要序列号,序列号保持为null即可 在MainActivity开头部分填入您的序列号
此时项目可以正常编译及运行。
-如果“产品线激活”的序列号, 还需要额外修改包名
修改包名(仅“产品线激活”需要)
如果您填入的包名是"com.baidu.ai.easyaimobile.demo" 如图修改:
此时项目可以正常编译及运行。
精简版测试
仅限通用arm的 图像分类,物体检测,文字识别。其它引擎可以参考自行写。 如果是开源模型版本,不需要序列号,序列号保持为null即可。
使用MiniActivity可以在如下情况下测试:
- 不带摄像头或官方demo运行摄像头报错的开发板
- 避免摄像头预览占用CPU导致耗时测试不准确
具体步骤如下:
A. 在infertest.MainActivity中,修改文件开始位置的序列号
B. 修改启动Activity为infertest.MainActivity,修改AndroidManifest.xml文件。主要不要漏掉开头的“.”
此时启动在logcat中会发现缺少test.jpg
C. 将你的测试图片test.jpg 放入assets目录。
此时再次运行,点击界面上的按钮,有如下测试成功的界面:
Android SDK集成文档
这个部分以Android Studio 自带的Empty Activity 模板项目为例,展示如何集成OCR Android的代码到您自己的项目中
集成前的准备
- 需要一个较新款的Android手机
- 请先根据上方的测试文档配置环境及测试官方Demo
- 请先根据上方的测试文档测试MiniActivity,本文以MiniActivity为模板集成
集成后的代码下载
如果觉得下面步骤有模糊的地方,可以参照修改好的代码进行下载。
链接:https://pan.baidu.com/s/1cTFxYrzb1jp8bWBs6eoF8A 提取码:u7xv
zip 文件名 | 说明 |
---|---|
myedge-init.zip | 初始化的“Empty Activity”模板项目 |
myedge-finished.zip | 做完本文所有步骤后的项目 |
新建一个项目
新建Android Studio自带的测试项目, 菜单File->New Project.. , 弹框中最后一个项目模板 “Empty Activity”,点“Next”, 之后用默认配置, 点“Finish”后项目就生成了
。这里比如给给这个项目起名为myedge
查看Logcat
有Android开发经验的用户可以跳过本段。
修改MainActivity文件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 加上下面这行
Log.i("MainActivity", "SHOW in Logcat"); // 表示记录info级别的日志
// Example of a call to a native method
TextView tv = findViewById(R.id.sample_text);
tv.setText(stringFromJNI());
}
代码会标红, 此时鼠标在红色的“Log”上点以下,会提示Alt+Enter,按下Alt+Enter, 文件的第6行左右会自动添加
import android.util.Log;
再次运行项目,可以在界面的“Run”和Logcat里看见我们之前打印的日志 "SHOW in Logcat"
“Empty Activity”模板项目目录介绍
本文会操作上图中的目录及文件:
- app/libs 目录下放入jar库文件,也可以放so文件
- app/src/main/java java代码目录
- app/src/main/assets 目前无此目录,之后放入模型文件
- app/src/main/AndroidManiftest.xml AndroidManiftest.xml文件,设置启动Activity和权限
- app/src/main/res/layout UI布局目录
- app/build.gradle 编译配置,比如修改包名
集成代码
集成之前,请确认已经跑通官方demo的精简版,官方demo有如下界面及类似结果
集成步骤:
- 集成库
- 集成java代码
- 设置权限及配置项
- 复制模型文件
1. 集成库
复制app/libs 目录下库文件到自己的项目中
A. 复制easyedge-sdk.jar库文件
- 如果项目中已经有其它的jar文件,那么和这些jar文件放一起
- 如果项目中没有其它的jar文件,参照官方demo方式,复制到app/libs目录下(本文的情况), 与官方demo放在相同的位置
B. 复制so目录
需要复制官方demo的libs/arm64-v8a 及 armeabi-v7a
- 如果项目中已有so库目录,arm64-v8a 及 armeabi-v7a下的so与已有目录合并。如果比如自己项目只存在arm64-v8a目录,那么官方demo的armeabi-v7a就不需要复制了。
- 如果项目中没有so库目录(本文情况),以下二个方式二选一
复制arm64-v8a 及 armeabi-v7a目录 到 app/src/main/jniLibs目下
参照官方demo方式,复制arm64-v8a 及 armeabi-v7a目录到 app/libs目录下, 与官方demo放在相同的位置。并修改app/build.gradle, 设置
jniLibs.srcDirs
2. 集成java代码
复制官方demo的infertest目录到自己项目中的infertest目录下,不必修改自己项目的包名。复制layout下的activity_main_test.xml到自己的项目中。之后修改android.appcompat类为androidx.appcompat下的。
具体步骤如下:
A. 复制官方demo的infertest目录
打开官方demo,右键点击java目录下的infertest目录,点“copy”
复制到自己项目中类似位置:
B. 复制官方demo的layout下的app/src/main/res/layout/activity_main_test.xml到自己项目的同名文件
此时会发现xml文件里android.support.constraint.ConstraintLayout不存在,原因是自己的项目新建时用的是androidx.appcompat
C. 修改activity_main_test.xml文件
将 android.support.constraint.ConstraintLayout 修改为androidx.constraintlayout.widget.ConstraintLayout
D. 修改infertest/MainActivity.java文件
删除飘红的类导入:
选下面的飘红的类,使用Alt+Enter自动导入缺少的类。
此时项目可以编译成功,但是不能运行
3. 设置权限及配置项
将启动的Activity改为infertest.MainActivity, 并根据官方demo添加网络和外部储存权限
具体步骤如下:
A. 将启动的Activity改为infertest.MainActivity
修改app/AndroidManifest.xml文件,将启动的Activity改为从.MainActivity改为infertest.MainActivity,
B. 根据官方demo添加网络和外部储存权限
添加如下权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
注意,android 6.0以上,需要额外代码ActivityCompat.requestPermissions申请权限,具体代码见infertest.MainActivity中initPermission方法
4. 复制模型文件
复制官方demo的app/src/main/assets目录到自己项目的同名目录。
如果已经存在,合并即可。
此时运行,可以获得和官方demo精简版一样的效果。
修改包名(仅“产品线激活”需要)
如果您填入的包名是"com.baidu.ai.easyaimobile.demo" 如图修改app/build.gradle:
一点小优化
添加指定架构(C++ 方式可能需要)
app/build.gradle中添加指定
ndk {
abiFilters "arm64-v8a", "armeabi-v7a"
}