版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android是以Linux为基础的操作系统,它的源代码是开源的,主要应用在移动端设备上,国内一般称其为“安卓”。Android操作系统最初由AndyRubin开发,最初主要支持手机。Android系统正式发行前,分别有两大操作是苹果公司的ios和RIM的BlackberryOS。2011年第一季度,Android在全球的市场份额超过塞班系统,跃居全球第一。目前,Android系统在智能手机领域的用户使用率已超过85%。Android的系统架构同其它操作系统一样,也采用了分层的架构。Android从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux核心层。Android是以Linux为核心的一个手机操作平台,作为一个开放式的操作系统,随着Android的不断发展,已经开始允许使用多种编程语言来开发Android应用程序,而也不是单纯的以Java语言开发,从而受到更多开发者的喜爱,成为真正意义上的开放式操作系统[95-97]。1.Linux内核层Android系统建立在Linux2.6内核以上,这一层为Android设备中的各种硬件提供了底层的驱动,比如内存管理、安全性、网络协议、进程和驱动模型等核心系统服务都要依赖Linux内核。Linux内核同时也是系统硬件和软件栈中间的抽象层。2.系统运行库层这一层以一些C/C++库为Android系统提供了主要的特性支持。本层中还有Android运行时库,主要提供一些核心库,可以允许开发者使用Java语言去编写需要的Android应用。因此系统运行库层主要由提供Android系统特性的函数库和Android运行时库两部分组成。一般说来,Android应用开发者不能直接调用这套C/C++库集,但可以通过其上的应用框架层来调用这些库。常用的一些核心库及其功能如下所示:(1)系统C库:针对于嵌入式Linux设备设置而成;(2)多媒体媒体库:该库可以支持录制和回放音频和视频格式,以及静态图像文件,包括MPEG4,MP3,AMR,JPG和PNG等多种格式;(3)3D库:是基于OpenGLES1.0API实现的,该库使用硬件3D加速或高度3D软件光栅扫描器;(4)界面管理器:管理访问显示子系统和从多个程序中合成二维和三维图形层(5)FreeType:用于位图和矢量字体渲染(6)SQLite:给所有应用程序提供轻量级的关系数据库引擎图5-1Android系统架构层次Fig.5-1AndroidsystemarchitecturelevelAndroid运行环境大致有两大部分构成,分别是Android核心库集和Dalvik虚拟机。Android核心库集,允许使用者用Java语言去编写Android应用程序;而Dalvik虚拟机可以使单独的Android应用在进程中独立运行,并拥有一个自己的Dalvik虚拟机实例。Dalvik虚拟机与PC或服务器运行的虚拟机对比而言,更适合在应用在移动终端,Dalvik虚拟机运行时拥有专有的.dex文件,减少运算产生的冗余信息,提高运算性能,节省大量的内存空间。3应用框架层大量的API被储存在Android应用程序框架层内部,研发者可以使用,面向的对象是底层的应用程序框架。应用程序框架层不仅可以作为程序开发的基础模块,也能用作软件复用,研发者只要遵守了框架的约定,那他们所研发的任何一个应用程序均可发布,那么这个功能模块也能被其它应用程序调用。本层为开发者可以方便使用组件和硬件奠定了基础,可供开发出更完美优秀的应用程序。4.应用层这一层包含安装在手机上的所有应用程序。Android系统同样会自带一些应用程序,主要有电子邮件客户端、地图、短信、联系人、日历、浏览器等。这些API框架的核心程序可以被开发者使用。松散耦合的组件构成了全部的Android应用程序,并通过程序Manifest捆绑在一起,其中我们可以清楚地在AndroidManifest.xml文件中看到应用程序中每个组件的属性以及它们存在什么样的交互方式。还可以作为指定硬件和平台要求、应用程序元数据、外部库或所涉及到的权限。一个Android应用程序由四个部分组成,主要包括Activity、BroadcastReceiver、Server、ContentProvider。图5-2Android系统四大组件Fig.5-2FourcomponentsofAndroidsystem在打开应用程序时,一个Activity就表示一个用户界面,就是我们看见的手机屏幕显示的一屏,在用户界面中我们可以放置不同的控件,比如TextView、Button、ImageView等。Activity也可以起到监听的作用,并对接收的信息及时做出回应。用户与Activity进行交互时有一个界面我们称其为视图,通常一个应用程序内部由几个或十几个Activity构成,应用程序中的Activity要实现跳转就要用到Insent,在跳转时同样能进行页面间的数据传输。每个Activity从开始到结束有一个过程称其为Activity的生命周期,图5-3展示了一个Activity整个的历程,打开一个界面就是一个Activity的开始,启动Activity系统先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。若手机被锁屏或被其他Activity顶替,系统调用onPause,暂停当前Activity。若解开手机锁屏或Activity被覆盖的状态被解除,系统再次调用onResume,Activity会重新进入运行状态。当手机界面回到主页或跳转到一个新的Activity应用程序界面时,原来的界面会退到后台,系统先后使用onPause和onStop,应用程序开始停滞状态。用户退出此时Activity,系统先后使用onPause、onStop和onDestory,结束目前Activity应用程序界面。图5-3Activity生命周期历程Fig.5-3ActivitylifecyclehistoryActivity一般状况下有四种状态:(1)当Activity处于栈顶时,也就是处于屏幕最前方,此时Activity处于正在运行阶段。(2)当Activity不再集中但此时仍然能看见(栈顶Activity处于透明状态或栈顶Activity分屏显示在整个手机屏幕上),这时Activity就是暂停状态。(3)当Activity被其他Activity完全遮挡,此时此Activity对用户不可见,此时处于停止状态。(4)当Activity由于人为或系统原因(如低内存等原因)被销毁,此时Activity处于销毁状态2.ServiceService是用于在后台完成指令的操作程序,它自己本身不能运行,只能被其他组件调用才能去运行,是一种长时间储存在后台但没有用户界面的应用组件,只要被启动就不会被其它组件影响到。除此以外,应用组件可以与绑定的服务进行交互,也可以与在执行过程中的进程进行通信(IPC)。例如,可以执行文件I/O或者播放铃声,而以上的这些操作可以在后台实现,Service通常以两种形式存在,如图5-4所示:(a)启动状态(b)绑定状态图5-4Service的两种状态形式Fig.5-4Twostatesofservice启动状态:如图5-4(a)所示,当调用Startservice()时,应用组件服务处于“启动”状态。启动后,后台中的服务将不受其他启动服务的组件的影响可以不限时地运行,除非人工去调用才能停止服务,启动后的的服务只是单一操作,产生的结果不会再返回。绑定状态:如图5-4(b)所示,当调用bindService()时,应用组件这时处于“绑定”状态。绑定状态下的服务提供了一个与客户交互的接口,这个接口允许组件与服务之间可以进行通信,返回结果、发送请求,或者进行进程通信(IPC)。该状态下的服务允许不同的组件去绑定,绑定后的组件只有全部解绑后,该服务才能被销毁。3.ContentProvider内容提供者(ContentProvider)内部含有一个标准接口,不同种类的数据类型通过内部提供者被应用程序读取或者保存,应用程序可以通过自身传播自己的数据。外部应用程序不需要担心它如何存储或在何处存储接收到的数据,它们只需使用内部提供者携带的R接口来访问接收到的数据。4.BroadcastReceiver应用程序之间需要传递消息,Intent正好能起到这样的作用去启动和停止或实现各个Activity来回跳转。在Android程序中,应用程序使用广播接收器(BroadcastReceiver)去筛选系统发出或接收的信息,对有用信息(如信息进入,或外部有可用网络等)及时接收并有回应。广播接收器不能提供可视化界面,当接收到的数据信息时,它们会启用Activity或Service做出响应,或通过NotificationManager去帮助用户获知信息,例如闪光灯、震动、音效等。广播接收者有两种注册方法,分别是程序动态注册和在AndroidManifest文件中设置静态注册。动态注册广播接收器特点是当用户注册的Activity注销掉后,广播也随之失效了。静态注册广播接收器就无需担忧用户注册的Activity是否被关闭,只要设备处于开启状态,广播接收器同时也是打开的。也就是说哪怕App本身未被启动,该APP订阅的广播在也会被触发。本文的Android开发环境配置如下:第一步,开发环境依赖JAVA环境,在Oracle公司下载JDK,根据自己电脑系统(本机Window10系统)选择jdk1.8,安装好jdk后,配置环境变量。第二部,本文开发平台是Google公司研发的Androidstudio,下载并安装,配置Androidstudio的环境,后面下载AndroidSDK,SDK工具提供了开发Android应用程序所需的API库和构建、测试和调试Android应用程序所需要的开发工具。全部安装完成后,即可进入Androidstudio,可以看到整个开发环境如图5-5所示,就可以进行模型移植和下一步相关程序的编写。图5-5Androidstudio开发软件示意图Fig.5-5SchematicdiagramofAndroidStudiodevelopmentsoftware试验采用的软硬件环境如下所示:(1)Ubuntu16.04(LST);(2)GPU是英伟达TESLAK20,CUDA是Toolkit9.0,CUDNN是V7.0,搭载Intel®Xeon(R)CPUE5-2683V3@2.00GHzx56处理器;(2)TensorFlow1.8学习训练框架;(3)AndroidStudio手机APP开发平台;(4)Python语言(5)荣耀V10(摄像头像素2000万+1600万,屏幕分辨率2160*1080)。TensorFlow是一个分析和处理的系统,它的工作原理是把复杂的结构传送到智能神经网中。随着机器视觉的发展,TensorFlow开始应用于图像或语音识别等机器学习领域,2017年TensorFlowLite的发布,使得TensorFlow可以摆脱笨重的设备可以采用轻量级的网络去学习训练,然后嵌入到移动端或嵌入式设备,具有以下特点:(1)速度快:专为为移动设备而设计,大幅度加快模型载入时间,并且可以从硬件上支持加速。(2)轻量级:允许更小的二进制大小的文件和快速初始化的设备端机器学习模型进行推断(3)跨平台:设计时允许在Android或iOS上运行。安装Ubuntu16.04系统,后续安装相关依赖,配置对应版本的CUDA和CUDNN。SudopipinstallSudopipinstalltensorflow-gpu==1.8sudoapt-getupdate&&sudoapt-getinstallbazel(3)bazel的安装,bazel在开发环境里可以快速大规模地构建数据,共享代码库,后面用来编译构建TensorFlow。sudoapt-getupdate&&sudoapt-getinstallbazelsudoapt-getinstallpython-numpyswigpython-devsudoapt-getinstallpython-numpypython-devpython-pippython-wheelsudoapt-getinstallpython-numpyswigpython-devsudoapt-getinstallpython-numpypython-devpython-pippython-wheel(5)bazel开启GPU支持bazelbuild--config=opt--config=cudabazelbuild--config=opt--config=cuda//tensorflow/tools/pip_package:build_pip_packagebazel-bin/tensorflow/tools/pip_package/build_pip_package/tmp/tensorflow_pkg本文的植物病害识别系统是在安卓平台上实现,需要完成客户端的设计和实现。在AndroidStudio软件中,建立工程项目,编程语言使用Java语言和XML语言。前期在计算机端得到的识别模型和预测模型。每一个Android项目都有AndroidMainfest.xml文件,该文件是整个项目的配置清单文件。该文件中主要含有一些权限、版本号、组件、包名等配置。项目在运行之前会首先启动清单文件,运行完之后,便能够了解整个系统的内容。下面列出本系统的AndroidMainfest.xml文件:在app/res/layout目录下有activity_main.xml文件,该文件是用于设置界面的大小,以及调用摄像头,调用摄像头用于采集预测图像。下面的代码是应用程序调用摄像头的程序。首先把训练好的pb模型放到Android项目中app/src/main/assets下,其次,下载libandroid_tensorflow_inference_java.jar文件把它放到app/libs目录下,把libtensorflow_inference.so放到app/libs/armeabi-v7a目录下,在app/build.gradle里进行如下配置:在defaultConfig里添加multiDexEnabledtruendk{abiFilters"armeabi-v7a"}在Android里添加在dependencies中添加libandroid_tensorflow_inference_java.jar,即:implementationfiles('libs/libandroid_tensorflow_inference_java.jar')所有配置已经完成,下面是在AndroidStudio中调用模型,先要加载libtensorflow_inference.so库和初始化TensorFlowInferenceInterface对象,代码为:在APP页面添加三个标签按钮,分别是选择照片按钮、病害识别按钮、病害程度识别按钮,配置按钮对TF模型的调用,执行“BuildAPK(S)”,即可生成可安装文件包(APK文件)。然后,通过4G/无线网络传输到Android手机,也可以通过有线方式把安装包移至Android手机,即完成了基于Android的植物病害叶片APP的安装。目前已经完成了在线的植物病害检测的系统,在此基础
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 道德与法治 人民代表大会的职权 课件-2025-2026学年统编版道德与法治八年级下册
- 2026全球与中国砷化铟镓PIN光电二极管行业发展动态及需求规模预测报告
- 2025-2030中国板(COB)发光二极管行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国无卤阻燃环保电线电缆材料行业现状调查与投资策略咨询研究研究报告
- 2025至2030生命科学仪器行业市场现状研发动态及投资潜力评估分析研究报告
- 2026中国椰子肉市场营销态势及销售效益预测报告
- 2026-2030液晶彩电行业市场深度分析及发展策略研究报告
- 2026中国液罐车行业运行态势与需求规模预测报告
- 2026全球及中国溴化聚苯乙烯(BPS)行业运行态势及需求前景预测报告
- 2025-2030中国双频激光干涉仪市场营销趋势及未来销售格局规划研究报告
- GB/T 26941-2025隔离栅
- T-CBJ 2310-2024 酱香型白酒核心产区(仁怀) 酱香型白酒(大曲)生产技术规范
- 长春公益岗管理办法
- 国网竞聘面试题库及答案
- 矿山救护队培训知识课件
- 托育园急救知识培训课件
- 桌游设计基础知识培训课件
- 智慧生态环境概述
- GA/T 2175-2024公安交通集成指挥平台接入规范
- 保障性住房政策课件
- 《守株待兔》公开课课件
评论
0/150
提交评论