当前位置:首页 > 数码产品 > 正文

手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中

简介效果展示本文所涉及的所有项目代码(集成前、集成后),可通过以下链接或扫描二维码获取。可以导入对应的项目,对比项目代码,进行参考设...

效果展示

本文所涉及的所有项目代码(集成前、集成后),可通过以下链接或扫描二维码获取。

可以导入对应的项目,对比项目代码,进行参考设置,导入方法:“File->New-> Import Project ..”。


链接:

https://pan.baidu.com/s/1Rz84s2hi2KU5mzrVHQLu2g

提取码:10by


手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第1张

集成方法简介

本文教大家两种集成方法:

1、JNI调用C++自定义类集成方式,适合需要修改C++代码的情况。

2、so库集成方式,适合项目中没有C++代码的,并且不需要修改demo的C++代码的情况。

两种方式,集成OCR模型前后对比如下图所示。绿色代表两种方式相同,红色代表so方式独有,粉色代表调用C++自定义类方式独有。


手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第2张

集成操作涉及以下目录和文件:

  • app # 程序module的主目录

  • assets # 模型文件、测试所需图片

  • cpp # (C++源代码方式)C++ 程序代码目录

  • jniLibs # (so方式)与cpp 目录的操作二选一

  • java # java程序代码目录

  • res # layout定义用户界面

  • OpenCV # OpenCV库

  • PaddleLite # PaddleLite库,用于调用模型进行推理预测

下面给大家介绍具体的操作步骤。

新建一个空项目

新建Android Studio自带的测试项目,菜单File->New Project.. , 弹框中最后一个项目模板 “Native C++”,点“Next”, 之后用默认配置, 点“Finish”。这样就能得到一个完整可运行,且没有任何功能的工程。比如,给这个项目起名为myorcapp。


手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第3张

生成Project之后,调整左侧项目结构的布局(Android改为Project)。

手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第4张

点击“运行”,即可在手机上看见新建项目的运行app。

接下来,我们在此项目基础上,通过添加和修改文件,集成OCR模型以及必要的功能。

将OCR模型集成到项目

(JNI调用C++自定义类)

与下一节的so方式二选一即可。

对新建的项目进行以下操作:

步骤1:删除cpp文件夹下的所有文件。

步骤2:拷贝:对压缩包app.zip和src.zip进行解压,并将文件放到对应目录,最终确保目录结构如左图所示。

步骤3:修改:右图四个文件。


手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第5张


手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第6张

1)如果MiniActivity出现飘红的“R”,则MiniActivity右侧同时按Alt+Enter,选择“Import class”,导入R的类。


手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第7张

2)打开MainActiviy文件,删除以下代码

static {
System.loadLibrary("native-lib");
}

3)在AndroidManitest.xml中,添加权限。


然后修改启动Activity为MiniActivity

 

两步完成后修改的截图如下:


手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第8张

4)将build.gradle中的minSdkVersion改为23,并添加以下代码。

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


手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第9张

步骤4:编译和运行

点击“编译”进行编译。编译成功后,数据线将电脑与手机连接好,然后点击“运行”。


手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第10张

将OCR模型集成到项目

(so方式)

使用此方式,自己的项目不需要依赖NDK,但是修改原始的C++代码较为复杂。

需要对官方demo编译生成apk文件,然后再解压提取lib目录下的so目录,并放到自己项目的app/src/main/jniLibs目录下。

具体步骤如下:

步骤一:生成release版本的apk

小tips:如果调试的版本的so话,可以点菜单Build->Build Bundle(s) Apk->Build Apk

以release版本为例,在官方demo项目中,点击菜单Build->Generate Signed Bundle /Apk…

手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第11张

手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第12张

弹框后选择apk,进入jks证书设置页面, 密码比如都填“123456”:

手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第13张

之后进入下一步:

手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第14张

手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第15张

等待片刻后,等Android studio界面下方的build进度完成,点击“locate”链接:

手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第16张

或者build结束后,直接在app/release目录下查找,app-release.apk文件

步骤二:提取so文件的目录

将apk文件改为zip文件,打开app-release.zip,提取lib目录下的arm64-v8a和armeabi-v7a这两个目录,复制到自己的demo中libs目录下。

手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第17张

效果如左图所示:


手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第18张

步骤三:对压缩包src.zip进行解压,并将文件放到对应目录,确保目录结构如中图所示


手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第19张

步骤四:修改下图中的3个文件


手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第20张

1)如果MiniActivity出现飘红的“R”,则MiniActivity右侧同时按Alt+Enter,选择“Import class”,导入R的类。


手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第7张

2)AndroidManitest.xml 是app的组件声明和权限声明,在此文件添加权限,并修改启动Activity为MiniActivity。

 

两步完成后修改的截图如下:


手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第8张

3)build.gradle 是app的编译脚本,设置minSdkVersion为23,并添加以下代码。

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


手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第9张

步骤五:编译和运行

点击“编译”进行编译。编译成功后,数据线将电脑与手机连接好,然后点击“运行”。


手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第10张

此时集成完毕,项目可以正常运行。

避坑指南

1. NDK版本要与Setting一致

注意app/build.gradle中NDK的版本要与File > Settings > Appearance & Behavior一致。


手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第25张


手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第26张

2. 修改官方java demo文件的包名

注意OCRPredictorNative的这个java文件的包名必须和native.cpp里函数的名字对应。

即下面二者一致,否则会有libNative.so里找不到implemented method的报错。

OCRPredictorNative.java:
package com.baidu.paddle.lite.demo.ocr;

native.cpp: com_baidu_paddle_lite_demo_ocr
Java_com_baidu_paddle_lite_demo_ocr_OCRPredictorNative_init

3. 强制同步和清空缓存

如果修改app/build.gradle中的SdkVersion、NDK版本,建议先使用“Invalidate Caches/Restart”清空缓存,然后再执行“Sync Project with Gradle Files”。


手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第27张

4. 查看Logcat

在Android Studio中用真机测试的时候由于log太多,很难找到我们需要的log,我们需要对log的数量进行设置,并对log的filter进行设置,方便找到我们需要的log。

设置方法:在MainActivity文件中添加Log.i("MainActivity", "SHOW in Logcat");

@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行左右会自动添加

java
import android.util.Log;


手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第28张


手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第29张

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

手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第30张

手把手教你移动端AI应用开发(二)——将AI模型集成到安卓应用中  第31张

下周我们为大家带来该系列第三篇文章,将为大家讲解集成OCR模型核心代码,并对Java、C++两种集成方式进行解读。

如在使用过程中有问题,可加入飞桨官方QQ群进行交流:1108045677。


·百度飞桨PaddleOCR 项目地址·

GitHub: 

https://github.com/PaddlePaddle/PaddleOCR 

Gitee: 

https://gitee.com/paddlepaddle/PaddleOCR

·飞桨官网地址·

https://www.paddlepaddle.org.cn/

·飞桨开源框架项目地址·

GitHub: 

https://github.com/PaddlePaddle/Paddle 

Gitee: 

https://gitee.com/paddlepaddle/Paddle

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 3561739510@qq.com 举报,一经查实,本站将立刻删除。