资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

EasyDL图像Android-ARM-SDK集成快速开始

简介

本文档包括两个部分,分别适用于SDK测试、SDK集成。开发者可根据实际需求选择参考:

  • SDK测试文档:供测试Demo时参考
  • SDK集成文档:供将SDK集成进自己的代码时参考

测试前的准备

  • Android系统的硬件及开发环境

    • 详情参考下方文档
  • EasyDL平台的Android SDK

    • 以图像分类为例,前往操作台训练模型后,选择发布为Android系统的通用设备端SDK,发布成功后即可从平台下载
  • 用于激活设备端SDK的序列号

    • 前往控制台申请用于激活通用设备端SDK的序列号

Android SDK 测试文档

这个部分将为新手提供一个快速测试Easydl & EasyEdge的Android Demo的图文教程。

效果展示

1.png

测试前的准备

  • 硬件:
  1. 准备一台PC机
  2. 准备一台较新款的Android 手机 不支持模拟器
  • SDK
  1. 您已经生成Android SDK 并且已经下载成功
  2. 您已经通过扫描二维码的形式,在这台Android 手机上测试成功想要的功能。
  • 生成序列号
  1. 如果是开源模型版本,不需要序列号,
  2. 如果测试的是“按单台设备激活”,需要额外获取一个序列号
  3. 如果需要额外测试“产品线激活”的序列号,需要再准备一个包名。demo的包名com.baidu.ai.easyaimobile.demo。
  • 开发环境
  1. 因为Android是google公司的项目,测试过程中可能需要访问国外网站下载资源。
  2. PC机上安装较新版本的Android Studio, 本文使用的是4.0.1版本。下载地址
  3. 在这台Android手机上测试通过一个Android HelloWorld项目

Android Studio的安装及手机测试

本段简单地描述如何通过Android Studio在手机上运行一个自带的Demo,有android基础的可以跳过本段。

手机上需要打开开发者模式,您也可以下载91助手,按照软件提示连接手机。

更多Android Studio的安装测试也可以百度下 【Android Studio自动生成Demo】。 新建Android Studio自带的测试项目, 菜单File->New Project.. , 弹框中选择“Basic Activity”,点“Next”, 之后用默认配置, 点“Finish”后项目就生成了

2.png

小技巧:Android项目需要同步后才能出现编译和运行的选项。强制同步的方法为:菜单File->Sync Project with Gradle Files

导入成功后,有以下的图标: 3.png

导入官方Demo

导入项目: 菜单File->New-> Import Project .. , 选择PaddleOCR\deploy\android_demo目录。 注意千万不要使用菜单File->New-> New Project..

4.png

导入项目后,会触发gradle的自动同步,最终效果如下:

5.png

此时项目可以正常编译,

  • 如果是开源模型版本,此时可以正常运行。
  • 如果需要序列号的情况,此时会界面会报错“序列号错误”

填入序列号

如果是开源模型版本,不需要序列号,序列号保持为null即可 在MainActivity开头部分填入您的序列号

6.png

此时项目可以正常编译及运行。

-如果“产品线激活”的序列号, 还需要额外修改包名

修改包名(仅“产品线激活”需要)

如果您填入的包名是"com.baidu.ai.easyaimobile.demo" 如图修改:

7.png

此时项目可以正常编译及运行。

精简版测试

仅限通用arm的 图像分类,物体检测,文字识别。其它引擎可以参考自行写。 如果是开源模型版本,不需要序列号,序列号保持为null即可。

使用MiniActivity可以在如下情况下测试:

  • 不带摄像头或官方demo运行摄像头报错的开发板
  • 避免摄像头预览占用CPU导致耗时测试不准确

具体步骤如下:

A. 在infertest.MainActivity中,修改文件开始位置的序列号

8.png

B. 修改启动Activity为infertest.MainActivity,修改AndroidManifest.xml文件。主要不要漏掉开头的“.”

9.png

此时启动在logcat中会发现缺少test.jpg

C. 将你的测试图片test.jpg 放入assets目录。

10.png

此时再次运行,点击界面上的按钮,有如下测试成功的界面:

11.png

Android SDK集成文档

这个部分以Android Studio 自带的Empty Activity 模板项目为例,展示如何集成OCR Android的代码到您自己的项目中

集成前的准备

  1. 需要一个较新款的Android手机
  2. 请先根据上方的测试文档配置环境及测试官方Demo
  3. 请先根据上方的测试文档测试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

12.png

13.png

查看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;

14.png

再次运行项目,可以在界面的“Run”和Logcat里看见我们之前打印的日志 "SHOW in Logcat"

15.png

“Empty Activity”模板项目目录介绍

16.png

本文会操作上图中的目录及文件:

  • 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有如下界面及类似结果

17.png

集成步骤:

  1. 集成库
  2. 集成java代码
  3. 设置权限及配置项
  4. 复制模型文件

1. 集成库

复制app/libs 目录下库文件到自己的项目中

A. 复制easyedge-sdk.jar库文件

  • 如果项目中已经有其它的jar文件,那么和这些jar文件放一起
  • 如果项目中没有其它的jar文件,参照官方demo方式,复制到app/libs目录下(本文的情况), 与官方demo放在相同的位置

18.png

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”

19.png

复制到自己项目中类似位置:

20.png

B. 复制官方demo的layout下的app/src/main/res/layout/activity_main_test.xml到自己项目的同名文件

21.png

此时会发现xml文件里android.support.constraint.ConstraintLayout不存在,原因是自己的项目新建时用的是androidx.appcompat

C. 修改activity_main_test.xml文件

将 android.support.constraint.ConstraintLayout 修改为androidx.constraintlayout.widget.ConstraintLayout

22.png

D. 修改infertest/MainActivity.java文件

删除飘红的类导入:

23.png

选下面的飘红的类,使用Alt+Enter自动导入缺少的类。

24.png

此时项目可以编译成功,但是不能运行

3. 设置权限及配置项

将启动的Activity改为infertest.MainActivity, 并根据官方demo添加网络和外部储存权限

具体步骤如下:

A. 将启动的Activity改为infertest.MainActivity

修改app/AndroidManifest.xml文件,将启动的Activity改为从.MainActivity改为infertest.MainActivity,

25.png

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"/>

26.png

注意,android 6.0以上,需要额外代码ActivityCompat.requestPermissions申请权限,具体代码见infertest.MainActivity中initPermission方法

4. 复制模型文件

复制官方demo的app/src/main/assets目录到自己项目的同名目录。

如果已经存在,合并即可。

27.png

此时运行,可以获得和官方demo精简版一样的效果。

28.png

修改包名(仅“产品线激活”需要)

如果您填入的包名是"com.baidu.ai.easyaimobile.demo" 如图修改app/build.gradle:

29.png

一点小优化

添加指定架构(C++ 方式可能需要)

app/build.gradle中添加指定

    ndk {
            abiFilters   "arm64-v8a", "armeabi-v7a"
     }

30.png

上一篇
EasyDL零售行业版快速开始
下一篇
通用设备端Linux ARM