Android TensorFlowLite sdk接入详细记录

前言

最近在研究ML的相关内容,开始在Android应用中接入TensorFlowLite。花了不少时间,添了不少坑,如果是裸的空项目接入还好,如果是现有的线上产品的接入,还是会有不少问题需要处理的,而且过程中,很多错误,网上的结论都是错误的,这个流程是我手把手一步步走的~亲测靠谱

先看效果


图片名称

接入sdk

开始只是以为简单的接入TensorFlowLite的 aar,

发现TensorFlowLite使用了JAVA 8的类属性,之前我们的Android工程使用的是gradle 2.3,需要加入JackOption,但是打开之后,整体编译特别慢,而且经常GC too many time,导致编译崩溃,因为最后添加了jack的dex转换,我们工程大的情况下20分钟是出不来的。。。

决定升级gradle到3.X

升级gradle3.X

开始直接升级到了gradle 4.1, Android build tool升级到了3.1.3,因为很久没有琢磨gradle了。

发现有3个主要的显式变化,还有很多编译器的改动,加入了D8,aapt2,编译速度有很大的提升。

1. compile改成implementation,test和debug的依赖也以此类推,子模块可以不用改动,而且日志里 写的到2018年底,全面废除compile,我们提前改了吧。
2. 第二个注解库,需要显式声明,具体样式如下compile 'org.weex.plugin:processor:1.0.2'annotationProcessor 'org.weex.plugin:processor:1.0.2'3. 子库里的依赖,可以通过一个processer属性配置,依赖该子模块的主模块需要添加javaCompileOptions {annotationProcessorOptions {includeCompileClasspath true}}

终于可以编译了:

然后发现通过AndroidStudio直接运行,会因为安全图片无法加载,阿里郎登录就直接崩溃,排查了一下,发现是因为InstantRun导致,新版里面增量编译导致了这个问题,于是关闭了InstanceRun,ok,加密图片ok

加入TensorFlowLite的sdk

这个时候加入sdk,发现直接崩溃,报了一个C++层的错误,开始以为是模型被压缩了,导致加载模型报错了,网上查结论只是说换一个版本的TensorFlowLite的sdk,版本从+换成0.1,换了依然崩溃。

仔细分析了下原因,发现网上的各个解决方案都不太正确,其实是JNI层的问题,首先这个so有没有加载成功,我把apk解压缩,就会发现,其实是因为lib里面libtensorflowlite_jni.so没有armeabi的so,导致的。。。

研究了一波TensorFlowLite的aar,发现只打包了

  armeabi-v7a, arm64-v8a, x86, x86-64

那只有修改ndk的abi支持类型咯,但是发现如果修改了ndk配置,那很多应用中用到的armeabi的so的sdk就无法运行,我只能自己编译一个armeabi的so来使用了。

编译TensorFlowLite自己生成libtensorflowlite_jni.so

既然官方的aar没有对应的so,又是开源的,那我自己编译一个so出来吧,

查看文档,先安装bazel,通过brew可以很快的安装

现在TensorFlow的根目录的WORKSPACE添加android配置项目,注意这个地方是新增

接着配置好Androidsdk 和 Android Ndk的路径,我之前用NDK14编译最新代码会有问题,所以换成了16,不用17,目前的17会有别的问题。。。

android_sdk_repository (name = "androidsdk",api_level = 23,build_tools_version = "26.0.1",path = "/Users/XXX/Library/Android/sdk",
)android_ndk_repository(name = "androidndk",path = "/Users/XXX/Library/Android/sdk/ndk-bundle",api_level = 16,
)

安装完bazel之后,再安装Xcode(刚换的电脑,所以还没有Xcode,也算是踩到另一个坑),最新版本,然后又报了一个找不到的错误stdlib官方组件的问题。

这个地方一定要注意一点,如果你安装了xcode的组件,然后还是报依赖错误,很有可能是因为你clone的姿势不对
一定要这么clone

git clone --recurse-submodules https://github.com/tensorflow/tensorflow.git

编译的过程中碰到的几个问题,也发出来吧

this rule is missing dependency declarations for the following files included by 'external/flatbuffers/src/util.cpp':'/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/stdlib.h'

这个之后,通过cat /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/stdlib.h

会提示安装Xcode的CPP组件库

一波安装之后

在一切准备好之后,就可以按照下面这个命令行去进行TensorFlow的so编译了,因为官方库里没有armeabi的so,而集团里又没有指定机型的,所以只有自己动手丰衣足食

bazel build --cxxopt='--std=c++11' //tensorflow/contrib/lite/java:tensorflowlite --crosstool_top=//external:android/crosstool --host_crosstool_top=@bazel_tools//tools/cpp:toolchain --cpu=armeabi

编译生成的产物在这个路径下:

bazel-bin/tensorflow/contrib/lite/java/libtensorflowlite_jni.so
bazel-bin/tensorflow/contrib/lite/java/libtensorflowlitelib.jar

ok,在完全准备之后,我们先把demo的activity给接入一下,测试一下效果,OK,全部跑通~

然后就可以看到之前的那个图片了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/29288.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云ECS云服务器搭建Docker,nginx 环境服务

步骤一:安装Docker CE Docker有两个分支版本:Docker CE和Docker EE,即社区版和企业版,本教程基于CentOS 7安装Docker CE 1 首先安装Docker 的依赖库 yum install -y yum-utils device-mapper-persistent-data lvm22 添加Docker C…

typora+picgo+阿里云配置

typorapicgo阿里云配置 typorapicgo阿里云配置1.typora2.picgo阿里云(1)端口配置(与typora的一样)(2)阿里云配置1.配置后阿里云:2.密钥管理:3.查看密钥:4.picgo配置阿里云5.typora测试picgo连接 1.typora 用的破解版 2.picgo阿里云 不知道为什么,刚开始用的picgo是2.2.2一直…

Vue打包部署到阿里云服务器

来自 <https://blog.csdn.net/u014225032/article/details/125283332> 来自 <https://blog.csdn.net/w20101310/article/details/78835668?ops_request_misc%257B%2522request%255Fid%2522%253A%2522168296374616800222874174%2522%252C%2522scm%2522%253A%25222014…

阿里云服务器安装并配置nginx代理转发请求

阿里云服务器安装并配置nginx代理转发请求 下载nginx安装包&#xff0c;或者上传nginx安装包&#xff0c;此处我用的是Xmanager工具从本地上传了一个nginx安装包。 安装依赖库 yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel yum -y install gcc …

阿里云ECS部署chat-web代理访问

1、ECS服务器申请 使用阿里云账号购买了一个美国&#xff08;弗吉尼亚&#xff09;的2C/2G的CentOS7.9 x64服务器。 2、系统版本升级 CentOS7.9默认的python和pip版本都是3.6的&#xff0c;需要升级到3.9以上&#xff0c;升级步骤百度&#xff0c;大致如下&#xff1a; wget…

2022年互联网直播行业研究报告

第一章 行业概况 自2000年后&#xff0c;随着网络时代到来&#xff0c;普及的电视直播逐渐被互联网直播取代&#xff0c;成为“直播”的代名词。近年来&#xff0c;随着互联网的高速发展与网民规模的持续增加&#xff0c;网络直播产业不断发展&#xff0c;进入更多人的视野&am…

直播软件技术介绍,能帮到你

我们公司开发的一套直播系统&#xff0c;完全自主开发的&#xff0c;是给其他公司开发的&#xff0c;外包项目。没有使用第三方的SDK。公司不做了&#xff0c;就想着把这个项目源码分享给爱技术的人。源码分为3个部分&#xff1a;服务端源码&#xff08;完整、可以成功部署&…

行业分析| 为什么互动直播可以发展如此迅速?

我国网络直播行业始于2005年&#xff0c;在2015-2016年进入爆发期。期间&#xff0c;受到政策和资本双重压力&#xff0c;直播行业迎来洗牌&#xff0c;期间&#xff0c;直播战场由PC端转向移动端&#xff0c;同时&#xff0c;各行业开始青睐直播形式&#xff0c;直播行业也由单…

直播行业迎来多元化发展

随着直播的内容表达形式逐渐被更多人所接受&#xff0c;直播渗透率不断加深&#xff0c;已经与娱乐、学习、购物、工作等越来越多场景融合在一起。 在互联网发展的下半场&#xff0c;随着头部互联网平台的布局与垂直领域应用的发展&#xff0c;直播行业将迎来更多元化的应用场…

百度内容审核实现

百度内容审核平台 Baidu-AIP的java-sdk的guithub 流程 打开百度内容审核平台 一、创建AppID、API Key及Secret Key 接入指南&#xff08;获取百度内容审核需要用到的AppID、API Key及Secret Key&#xff09; 创建后就可以得到AppID、API Key及Secret Key 二、构建百度…

【微信小程序】如何上传、提交审核、发布操作

【地址】https://jingyan.baidu.com/article/456c463b3bcd950a5831449f.html 微信小程序对个人开发者也提供无认证发布上传、提交审核、提交发布等&#xff0c;个人可以开发一些小程序发布&#xff0c;发布成功后&#xff0c;微信中也可以搜索到&#xff0c;下面小编教教大家如…

2020年5月-苹果审核新规则

自本年五月&#xff08;2020年&#xff09;起&#xff0c;很多开发者陆续收到一种全新的邮件&#xff0c;邮件内容如下&#xff0c;虽说这是APP被拒了&#xff0c;但是又没说明确的违规条款&#xff0c;这也是继2019年账号审查之后的又一大幺蛾子&#xff01;苹果只说需要更多的…

JAVA深度学习文本审核_内容审核-文本

内容审核-文本Moderation(Text)&#xff0c;基于华为自研的深度学习和内容审核模型&#xff0c;可自动识别出文本中出现的涉政、色情、广告、辱骂、灌水等内容&#xff0c;帮助客户降低业务违规风险&#xff0c;净化网络环境&#xff0c;提升用户体验 应用场景 电商评论筛查 检…

twitter推文采集案例

案例内容:twitter的推文采集。 通过游客身份获取twitter中用户的推文。 用户推文:只能翻22页,1页45条左右。 每个用户最多获取最近900条推文 (登录后),不登录区别也不大。 UserByScreenName 一般只有用户名的时候,需要先通过UserByScreenName接口获取 rest_id 用于后…

微信小程序发布审核基本步骤(带图)

本文作为烂笔头记录或小白感性认识或为客户做基础说明&#xff08;复杂性时间等&#xff09;大佬请勿费神。 微信小程序源码编辑与调试略、微信小程序注册略。 一、安装微信开发者工具 微信开发者工具下载地址与更新日志 | 微信开放文档 二、绑定微信小程序开发者 1、登录…

AI助力多文档审查丨合同风险审查、招投标文件、合同和中标通知书一致性审查

当下&#xff0c;企业管理的数据和文档管理中充斥着大量有复用价值的数据、资料和内容性信息。每一家企业都有许多商业文档和法律文档需要使用和维护&#xff0c;其中包含了不同语言文字、手写体、数字、公式等。 然而&#xff0c;目前企业的各种文档资料仍主要依靠人工手段进行…

身边的那些信审人员都去哪了?

最近几天看到朋友圈很多信用卡审核中心的老同事&#xff08;老同学&#xff09;在秀到深圳9周年&#xff0c;在2013年的时候&#xff0c;大家都是一起通过校招来到了XX银行信用卡中心的信贷审批部&#xff0c;成为了信用卡人工审核员&#xff0c;那时候入职信贷审批部近百人&am…

facebook审核流程

1.点击连接https://developers.facebook.com/进去facebook的后台&#xff1b; 2.点击选择自己注册的应用&#xff0c;如下图&#xff1a; 3.点击应用之后&#xff0c;进去设置&#xff0d;基本选项&#xff0c;点击添加开放平台添加ios的平台&#xff0c;如果已经加了&#x…

关于苹果审核团队内部消息以及一些过审小方法

这几天空下来的时间&#xff0c;我突然想到一个问题&#xff0c;苹果审核团队这种神秘的团队到底几个人在弄&#xff0c;平时工作量是不是不大才闲的挑刺&#xff1f;出于内心的这个问题&#xff0c;我在网上搜索了相关资料以及跟几位开发者沟通下来&#xff0c;做出今天的文章…

出口合规证明信息,苹果提交审核的时候弹出的是否加密

现在有四个选项&#xff0c;问是否加密&#xff0c;选择最后一个“不属于上述任何一种算法”即可。 也可以直接在代码info.plist中配置 <key>ITSAppUsesNonExemptEncryption</key> <false/> 文本是对的&#xff0c;复制过去可能有空格什么的&#xff0c;稍微…