首页 > > > 基于Android的二维码的生成与识别系统的设计与实现_马鸣.pdf

基于Android的二维码的生成与识别系统的设计与实现_马鸣.pdf

基于Android的二维码的生成与识别系统的设计与实现_马鸣.…

上传者: scott 2013-03-29 评分1 评论0 下载54 收藏10 阅读量81 暂无简介 简介 举报

简介:本文档为《基于Android的二维码的生成与识别系统的设计与实现_马鸣pdf》,可适用于手机软件领域,主题内容包含ComputerKnowledgeandTechnology电脑知识与技术人工智能及识别技术本栏目责任编辑:唐一东第卷第期(年月)基于Android符等。

Computer Knowledge and Technology电脑知识与技术 人工智能及识别技术本栏目责任编辑:唐一东 第8卷第26期 (2012年9月) 基于Android的二维码的生成与识别系统的设计与实现 马鸣 1,李海波 2 (南阳理工学院,河南 南阳 473004) 摘要:随着二维码的广泛应用和Android智能手机的进一步普及,该文介绍了一个通过Android平台下的摄像和绘图功能, 利用二维码的编码和解码原理,通过Android手机对二维码的数据进行解析和编码,实现对二维码生成和识别系统。该系 统内容包括两部分:二维条码的生成系统设计和二维条码的识别系统设计。生成系统完成了从输入数据到生成相应二维 码的功能,识别系统完成对采集到的二维码符号进行译码还原出所携带信息的功能。 关键词:二维码;二维码生成;二维码识别;Android平台 中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2012)26-6353-04 Design and Realization of the QR Code Generation and Recognition System Based on Android MA Ming 1, LI Hai-bo 2 (Nanyang Institute of Technology, Nanyang 473004, China) Abstract: Along with the wide application of QR Code and Android smart phones further popularity. This paper introduces a camera and drawing function in the Android workbench. Using of QR Code encoding and decoding principle, through the An⁃ droid mobile phone resolve and code planar barcode to realize the QR Code identification and generate system. The content of this project includes the design of creation and recognition. The creation system completes the process from the input data to QR Code,and the recognition system completes the process of translating QR Code to relevant information. Key words: QR Code; The generation of QR Code; The recognition of QR Code; The Android Platform 一维条码自出现以来,由于受信息容量的限制,不得不依赖数据库的存在。在没有数据库和不联网的地方,一维条码的使用受 到了较大的限制。另外,要用一维条码表示汉字的场合,显得十分的不方便,且效率低下。 二维码的出现是为了解决一维条码无法解决的问题而产生。因而它具有高密度、高可靠性等特点,所以可以用它表示数据文 件(包括汉字文件)、图像等。二维码是大容量、高可靠性信息实现存储、携带并自动适读的最理想的方法。手机二维码的业务类型 主要有两种:一是识读,就是借助应用软件直接读出码上信息,它可以衍生出上网浏览、电子购物等多种应用;二是被读,就是由商 家向手机用户发送二维码信息,通过设备识读,可作身份识别、电子凭证等之用。 1 系统相关技术分析 1.1 Android系统架构 Android是一种以Linux为基础的开放源代码操作系统,主要使用于便携设备。Android的系统架构采用了分层的架构。android 分为四个层,分别是应用程序层、应用程序框架层、系统运行库层和 linux内核层。随着Android的快速发展,如今已允许开发者使用 多种编程语言来开发Android应用程序,而不再是以前只能使用 Java开发Android应用程序的单一局面,因而受到众多开发者的欢 迎,成为真正意义上的开放式操作系统[1]。 1.2 开发环境 系统主要分为两个大的模块:二维码的生成和二维码的识别。二维码的生成主要就是基于Winnows上的开发工具Netbeans开 发,而同时又开发一个在Android平台下的二维码生成。而二维码的识别主要就是基于Android平台来开发,主要就是运用Android SDK和Eclipse共同开发,但是环境需要搭建。 二维码的生成主要设计的是在电脑上运行的桌面程序。通过在电脑上开发一个 Java程序来生成二维码。其开发环境主要如 收稿日期:2012-07-03 作者简介:马鸣(1983-),男,河南南阳人,助教,硕士,主要从事《移动开发》、《C#语言程序设计》、《C#winform开发》、《ASP.NET基 础》、《ASP.NET高级应用》等课程的教学工作;李海波(1982-),男,陕西宝鸡人,助教,硕士,主要从事《C#语言程序设 计》、《ASP.NET技术基础》、《ASP.NET高级编程》等课程的教学工作。 E-mail: eduf@cccc.net.cnhttp://www.dnzs.net.cnTel:+86-551-5690963 5690964 ISSN 1009-3044 Computer Knowledge and Technology电脑知识与技术 Vol.8, No.26, September 2012. 6353 Computer Knowledge and Technology电脑知识与技术 本栏目责任编辑:唐一东人工智能及识别技术 第8卷第26期 (2012年9月) 表1。 表1 Windows平台上开发使用的环境 需求名称 开发工具 优化工具 开发语言 运行环境 测试环境 平台及工具 Net beans Photoshop Java Windows XP+JDK Windows XP+JDK 二维码的识别和生成是在Android平台上的开发的,并使用Eclipse IDE工具进行开发的。Eclipse IDE安装ADT插件搭建了很 好的Android开发平台,方便与编程。至于识别的功能要用到摄像头,虚拟机上面是没有摄像头的,这就需要有真机进行二维码的 识别测试。Android平台开发环境如下表: 表2 Android平台开发使用的环境 需求名称 开发工具 优化工具 开发语言 运行环境 测试环境 平台及工具 Eclipse、Android SDK、测试机 Photoshop Java Android平台 Android平台 2 系统的设计 2.1 系统框架设计 本系统框架结构主要分成生成和识别两大部分。 识别功能主要就是对二维码和条形码的识别。主要就是通过手机的摄像头对二维码或者是条形码进行扫描,然后把把扫描到 的二维码或者是条形码送到后台进行解析,如果解析成功后,就不再进行扫描。如果解析不成功,就会在进行扫描采集图像,在传 到后台解析,直到能够识别图像为止[2]。 生成功能主要就是对二维码的生成。而生成这个功能可以在电脑上运行生成,也可以在手机上运行生成。二维码的生成主要 支持名片、短信、文本、电子邮件及网络书签的生成。当用户选择好多要生成的对象时,就会把用户输入的信息送到后台,通过调用 解析包,来生成还有相应信息的二维码。 2.2 二维码的生成设计 二维码的生成,支持多种形式内容的二维码生成。所以用户要先进行选择要生成的类型,当选择类型以后,系统将转入到多选 该类型的生成界面给用户,用户将相应的信息填写完成,点击生成二维码,会跳转到生成界面,显示生成的二维码[3]。 2.3 二维码的识别设计 二维码的识别主要是通过对摄像头的调用,启用多线程,对摄像头进行快速的回调应用,当一次回调的图像没有识别出来就进 行下一次的回调,直到识别出二维码为止[4]。同时由于对与二维码的大小不同,显示的模糊度不同等等原因,会使摄像头不能很好 的采集图像,在这里要使摄像头能够进行自动对焦,从而使识别更快的实现。当识别完成以后就对用户进行提醒,对手机进行震动 和播放声音,播放完成,显示识别出来的结果。 3 系统的实现 3.1 二维码生成的实现 二维码的生成主要是靠官方相应的编码包,将用户输入字符转换成二维数组,然后根据二维码的编码规范,使用绘图功能将二 维码进行绘制。二维码的生成主要分为名片、短信、文本、电子邮件、网络书签的生成。需要有相应的框架使程序与用户进行交互, 使用户有选择自己想要生成的类型,然后就是用户将自己想编辑的信息输入到系统内,系统应该提供相应的交互界面给用户输入 [5]。该功能具体代码如下: public void QREncode(String strEncoding, int qrcodeVersion) { c.swetake.util.Qrcode testQrcode = new c.swetake.util.Qrcode(); testQrcode.setQrcodeErrorCorrect('M'); testQrcode.setQrcodeEncodeMode('B'); testQrcode.setQrcodeVersion(qrcodeVersion); 6354 Computer Knowledge and Technology电脑知识与技术 人工智能及识别技术本栏目责任编辑:唐一东 第8卷第26期 (2012年9月) byte[] bytesEncoding = strEncoding.getBytes("utf-8"); if (bytesEncoding.length > 0) { boolean[][] bEncoding = testQrcode.calQrcode(bytesEncoding); drawQRCode(bEncoding, getResources().getColor(R.drawable.black));} } //绘制条形码 private void drawQRCode(boolean[][] bRect, int colorFill) { int intPadding = 20; Canvas mC = mSurfaceHolder01.lockCanvas(); mC1.drawColor(getResources().getColor(R.drawable.white)); Paint mP = new Paint(); mP1.setStyle(Paint.Style.FILL); mP.setColor(colorFill); mP1.setStrokeWidth(1.0F); for (int i = 0; i < bRect.length; i++) { for (int j = 0; j < bRect.length; j++) { if (bRect[j][i]) { mC.drawRect(new Rect(intPadding + j * 3 + 2, intPadding + i * 3 + 2, intPadding + j * 3 + 2 + 3, intPadding + i * 3 + 2 + 3), mP1); } } } mSurfaceHolder01.unlockCanvasAndPost(mC1); } 3.2 二维码识别的实现 系统在手机上实现图像的采集是重要的一步,在Android 平台上,是使用Camera 类来完成摄像头的调用和图像采集 使用 Camera mCamera = Camer-a. open () 获得Camera 的实例,然后使用 Camer-a.Parameters 来设置获得图像的大小,最后通过实现 Camera. Preview-Callback 的接口 onPreviewFrame( byte[]data,Camera camera) 来获得摄像头的图像数据data。 为能够较快地获得清晰的图像,提高识别速度,文中使用了自动对焦技术。另外还应该对对焦进行定时操作,这就需要设置一 个定时器对自动对焦进行定时调用。 后台对摄像头传过来的图像数据data进行解码处理,如果能够解析出来,则上面的对焦调用,摄像头回传图像数据调用等将暂 停。如果解析不成功,则继续轮回调用。节约解析的时间[6]。 后台对摄像头传过来的图像数据data进行解码处理,如果能够解析出来,则上面的对焦调用,摄像头回传图像数据调用等将暂 停。如果解析不成功,则继续轮回调用。节约解析的时间。主要实现代码如下: public void handleMessage(Message message) { switch (message.what) { case R.id.auto_focus: if (state == State.PREVIEW) { CameraManager.get().requestAutoFocus(this, R.id.auto_focus); } break; case R.id.restart_preview: Log.d(TAG, "Got restart preview message"); restartPreviewAndDecode(); break; case R.id.decode_succeeded: Log.d(TAG, "Got decode succeeded message"); state = State.SUCCESS; Bundle bundle = message.getData(); Bitmap barcode = bundle == null ? null : (Bitmap) bundle .getParcelable(DecodeThread.BARCODE_BITMAP); activity.handleDecode((Result) message.obj, barcode); 6355 Computer Knowledge and Technology电脑知识与技术 本栏目责任编辑:唐一东人工智能及识别技术 第8卷第26期 (2012年9月) break; case R.id.decode_failed: state = State.PREVIEW; CameraManager.get().requestPreviewFrame(decodeThread.getHandler(), R.id.decode); break; case R.id.return_scan_result: Log.d(TAG, "Got return scan result message"); activity.setResult(Activity.RESULT_OK, (Intent) message.obj); activity.finish(); break; case R.id.launch_product_query: Log.d(TAG, "Got product query message"); String url = (String) message.obj; Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); activity.startActivity(intent); break; } } 4 结束语 本课题的研究目的是实现二维条码的生成与识别系统设计,设计内容包括两部分:二维条码的生成系统设计和二维条码的识 别系统设计。生成系统完成了从输入数据到生成相应二维码的功能,识别系统完成对图像的自动采集和数据编码解析。 参考文献: [1] 杨丰盛.Android应用开发揭秘 [M].北京:机械工业出版社,2010:48-50. [2] 刘宁钟,杨静宇. 基于傅里叶变换的二维条码识别 [J].中国图像图形学报,2011,18(2):45-46. [3] 肖翔,刘晓明,王云柯. QR码图像的矫正与定位方法研究[J].计算机科学,2007,23(2):18-20. [4] 谷晓琳,黄明,戚海英. 基于遗传算法的二维QR码图像识别[J].大连铁道学院学报,2005,12(3):35-38. [5] 王文豪,张亚红,全银, 等.QRCode二维条码的图形识别技术[J].计算机技术与发展,2009,8(2):40-43. [6] 梁凤梅.快速识读QRCode码[J].电脑开发与应用,2002,12(2):50-55. (上接第6347页) 参考文献: [1] 郭齐胜,郅志刚.装备评估概论[M].北京:国防工业出版社,2005. [2] 宋广宁.关于指挥信息系统软件研发的几点思考[J].中国人民解放军电子工程学院学报,2011(12):81-84. [3] 许树柏.层次分析法原理[M].天津:天津大学出版社,1988:43-51. [4] 王富军,刘增良,刘振浩.基于Fuzzy-AHP的指挥信息系统可信性评估模型研究[J].指挥控制与仿真,2011(4):41-44. [5] Butnariu D,Klement E P.Triangular norm-based measures and games with fuzzy coalitions[M].Kluwer Academic Publishers,1993. 6356

该用户的其他资料

  • 名称/格式
  • 评分
  • 下载次数
  • 资料大小
  • 上传时间

用户评论

0/200
    暂无评论
上传我的资料

相关资料

资料评价:

/ 4
所需积分:2 立即下载
返回
顶部
举报
资料
关闭

温馨提示

感谢您对爱问共享资料的支持,精彩活动将尽快为您呈现,敬请期待!