APP下载

基于Android图像识别系统的设计与实现

2021-03-07刘杰于启红戈军王璐

电脑知识与技术 2021年36期
关键词:图像识别

刘杰 于启红 戈军 王璐

摘要:针对人们对日常生活中见到的事物进行灵活、实时地识别分类的需求,设计开发了一款基于Android的图像识别系统。通过百度AI开放平台中图像识别数据服务接口与图像库,对用户上传的图像数据进行实时抓取和识别,达到图像识别的核心功能。系统实现了图像识别的移动化、实时化、便捷化,能够有效地提高对物体的识别精度、识别速度,并且具有占用手机存储资源低的优点。

关键词:Android;图像识别;SVM;百度AI;OKHttp协议

中图分类号:TP319      文獻标识码:A

文章编号:1009-3044(2021)36-0092-03

开放科学(资源服务)标识码(OSID):

Design and Implementation of Image Recognition System Based on Android

LIU Jie, YU Qi-hong, GE Jun, WANG Lu

(Institute of Information Engineering, Suqian College, Suqian 223800, China)

Abstract: Aiming at the demand of people's flexible and real-time recognition and classification of things seen in daily life, an image recognition system based on Android is designed and developed. Through the image recognition data service interface and image library in Baidu AI open platform, the image data uploaded by users are captured and recognized in real time to achieve the core function of image recognition. The system realizes the mobility, real-time and convenience of image recognition, can effectively improve the recognition accuracy and recognition speed of objects, and has the advantages of low occupation of mobile phone storage resources.

Key words: Android; image recognition; SVM; Baidu AI; OKHttp protocol

1 背景

日常生活中,在人们的身边伴随着形形色色的事物,其中最直观的展现形式就是人们通过自己的肉眼观察这些事物[1]。得益于当今计算机视觉和图像处理技术的发展,对图像进行识别分类的研究和应用场景越来越多,一些软件公司也成功研发了许多图像识别应用系统,比如小米的智能识物,锤子科技的图像处理等[2-3]。但是目前大多数图像识别应用系统都是在计算机上操作实现的,难以满足数量庞大的移动用户的需求[4]。在人们不断地追求物质生活与精神生活的今天,用户也渴望着能够拥有更方便更快捷的方式方法去解决问题,能够实时地对图像进行识别分类的工作,在自己的手机上实现物体图像识别无疑会给人们带来极大的便利。所以,设计和开发一款基于Android的图像识别系统,用户可以随时随地拍摄或从手机相册上传待识别对象,系统能够高精度识别图像,在移动化图像识别的同时能提高图像识别的精度和及时性。

2 需求分析

本系统旨在设计出一款手机App,方便人们随时随地可以拿出手机来识别自己身边想要知道的事物。系统在上传图片之前可以显示用户拍摄的图片;经用户确认后通过网络上传至服务器;服务器接收到图片后,开始执行识别程序,并将识别结果返回到客户端,系统的识别精度也会随之相应地给出。具体需求如下:

1)运用本系统可以做到对绝大多数事物进行识别,如动物、植物、汽车、菜品;

2)App操作便捷,系统不可过于烦琐,需要面向大部分人群,老人幼儿都可使用;

3)识别的精确度较肉眼识别的准确,确保对相似物体的识别准确率,要求达到0.7以上;

4)除了可以利用手机摄像头拍照之外,还可以访问手机相册中的图片,使得图像采集更加人性化;

5)识别图像需要快速,效率要高,要求达到1秒以下;

6)手机App在使用一段时间之后,不可占用大量的手机内存,要求在50MB以下。

3 系统设计

3.1 系统功能设计

本系统主要识别4类常见的物体:动物识别、植物识别、汽车识别以及菜品识别。在识别物体之前,首先预判待识别物体是否满足这4类,经预判后,进入待识别物体界面进行图像采集,采集之后的图像经OKhttp协议上传至服务器,进行图像的特征提取并识别,然后通过信息交互模块将识别的信息回传至客户端,保存识别数据。系统的流程图如图1所示。

3.2 系统功能模块设计

系统的主要功能是采集用户的待识别图像的信息,并且通过设计数据接口向App提供数据源,同时经OKhttp协议上传至服务器,进行图像的特征提取并识别,然后通过信息交互模块将识别的信息回传至客户端,保存识别数据。后台服务程序设计分为:客户端模块、数据服务接口和信息交互模块,系统功能模块图如图2所示。

1)客户端模块:此模块主要设计系统的界面及功能交互,对待识别物体主要分为四类以及数据的记录的显示。

2)数据服务接口:当App客户端向数据服务接口发出请求,处理程序根据对应的请求对图像进行特征提取与识别的操作,同时返回响应数据提供给App客户端进行显示。

3)信息交互模块:通过OKHttp协议实现拦截器拦截请求,往请求头里面添加 token,发送同步的GET请求与异步的POST请求。

4 系统实现的关键技术

4.1 线性多分类SVM

线性多分类SVM大致可分为两类[5],本系统使用SVM n(n=2)分类器,它允许不完整的分类和异常的惩罚因子C;内核函数是一个线性的内核函数,不需要任何的指向高维空间的方向映射以及线性的区别。核心代码如下:

vector<Mat> vecImages;

vector<int> vecLabels;

CvSVM *mySVM = new CvSVM();

CvSVMParams params = CvSVMParams();

params.svm_type = CvSVM::C_SVC;

params.kernel_type = CvSVM::LINEAR;

params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 10000, 1e-10);

vector<float> vecDescriptors;

4.2 图形库的建立

建立相关的图片库,并进行了base64格式的字符串与图片相互转化,每样各30万张,如表1所示。

服务器端是整个系统的核心,实现的功能主要有:调用百度AI图像识别接口对图像的预处理、图像特征的提取与图像识别、建立百度AI图像库。

4.3 客户端模块实现

客户端模块的功能是:获取待识别图片并上传至服务器。实现的逻辑表述如下:

1)系统初始界面设计:主要用来展现系统的名称以及作者,体现了本设计的严谨性,该界面主要由ImageView与TextView两个控件组成。

2)系统主界面设计:用handler处理机制,使初始界面在三秒后进入主界面activity_main,该界面按照系统的实际需求,分为4种常见的图像种类识别,分别为动物、植物、汽车、菜品。系统主界面上每个图标点击时可以识别不同的事件,空白部分用于存储用户的使用记录,如图3所示。

3)圖片上传界面设计:将拍照所得或图库中的图片上传到服务器,点击拍照/图库按钮,响应上传图片事件。此处,通过OKHttp协议,向Web站点发送GET请求、POST请求,并从Web站点取得响应,获取图片相关信息以及可信度的评估,图4所示为动物上传后的识别测试。

4.4 服务器模块实现

服务器端是整个系统的核心,实现的功能主要有:调用百度AI图像识别接口对图像的预处理、图像特征的提取与图像识别、建立百度AI图像库。实现的逻辑表述如下:

1)百度相同图/相似图/商品图检索:API服务支持开发者基于自建图片库进行入库、检索、删除、更新操作。开发者在控制台创建应用后,需要在控制台-应用详情页申请建库,建库成功后相关接口能力可正常调用。

2)申请建库时,图库的图片数量上限为50万,避免浪费资源;如果容量不够用,可以申请扩容,每次扩容的申请上限也是50万,可以反复申请扩容,原则上图库总量无上限。

3)图像搜索已上线图库管理功能:支持对图库里的图片进行可视化管理,可小批量上传图片、预览大图、修改摘要和分类信息、删除图片、查询某张图是否在库里,入口在控制台-应用详情页管理图库。识别的前提是需要对识别功能做一个简单的训练:先对图片进行预处理,更加突出特征,然后采用的特征来进行训练,所以提取图像的HOG特征,加入SVM训练器,经过几分钟后将会得到一个识别模型,该模型将是后期识别物体所需要的模型[6],也就是说,机器通过该模型就具备了识别所选物体种类的能力。

4.5 信息交换模块实现

信息交互模块主要功能就是将客户端与服务器连接起来。为了在Android项目中使用OkHttp,首先需要登录http://square.github.io.okttp/站点下载OKHttp的两个JAR包,即okhttp-3.10.0.jar和okio-1.14.0.jar (版本号可能更新)。在Android Studio中添加第三方JAR包只需如下两步。

Step1:拷贝JAR包:将okhttp-3.10.0.jar和okio-l.14.0jar添加到Android项目中的libs目录下。

Step2:添加库:在AndroidStudio左上角的项目管理界面中切换为Project视图,在该视图下选中okhttp-3. 10.0.jar和okio-l.14.0.jar两个JAR包,单击鼠标右键,在弹出的快捷菜单中单击Add As Library即可。

为Android项目添加了OKHttp之后,接下来即可使用OKHttp来实现网络通信了。客户端与服务器端的信息交互主要通过使用OkHttp来完成,主要代码如下:

public HttpResponseListener(Context context, Request<?> request,

HttpListener<T> httpCallback, boolean canCancel, boolean isLoading) {

this.mContext = context;

this.mRequest = request;

if (context != null && isLoading) {

mWaitDialog = DialogUtils.initLoadingDialog(context, "正在加载中...");

}

this.callback = httpCallback;

}

@Override

public void onStart(int what) {

}

5 测试结果分析

系统的測试结果的分析主要从图像识别的精度、图像识别的速度以及识别之后占用手机内存空间的大小进行分析。以图像识别精度为例,手机上经过多次测试之后,得到了大量的测试结果,经过精心的比较与分析之后,得出了如表2所示统计表。

最终测试结果经过分析后,平均识别率已经可以达到0.7以上,达到了系统设计预期要求。

6 结束语

基于Android的图像识别分类系统主要包括客户端模块、数据服务接口和信息交互模块等。客户端通过拍照或从手机相册中获取一个待识别的图片对象,之后通过使用OKHttp协议将图片上传至网络,图片接收服务器接收图片并保存到指定目录,经过图像识别服务器读取指定目录识别目录下的图片,然后将结果信息返回Android 客户端进行显示,并使得识别的精度达到0.7以上,系统实现了图像识别的移动化、实时化、便捷化。

参考文献:

[1] 陈新磊.基于灰度变换及边缘检测的脑地形图像识别算法的研究[J].电脑编程技巧与维护,2019(3):131-133.

[2] 张宝燕.基于深度学习模型的图像识别应用研究[J].山西电子技术,2020(6):87-89,93.

[3] 倪凡,舒彧,冯光璐.图像识别技术的应用与发展[J].产业创新研究,2020(22):44-45,48.

[4] 黄晓璐.基于计算机智能图像识别的算法与技术研究[J].电子制作,2020(22):67-68.

[5] 管峻,毛保磊,刘慧英.利用单分类SVM算法检测Android应用程序[J].计算机系统应用,2021,30(6):148-153.

[6] 刘思,马靖瑜,袁倩,等.基于边缘计算的人脸识别系统[J].软件工程,2020,23(12):40-42.

【通联编辑:谢媛媛】

猜你喜欢

图像识别
基于Resnet-50的猫狗图像识别
高速公路图像识别技术应用探讨
图像识别在物联网上的应用
图像识别在水质检测中的应用