• / 4
  • 下载费用:5 金币  

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

关 键 词:
基于 ANDROID 二维码 生成 识别 系统 设计 实现 马鸣
资源描述:
C o m p u t e r K n o w l e d g e a n d T e c h n o l o g y 电脑知识 与技术 人工智能及识别技术 本栏目责任编辑 : 唐一东 第 8 卷第 26 期 ( 2012 年 9 月 ) 基于 Android 的二维码的生成与识别系统的设计与实现 马鸣 1 , 李海波 2 ( 南阳理工学院 , 河南 南阳 473004 ) 摘 要 : 随 着 二 维 码 的 广 泛 应 用 和 Android 智 能 手 机 的 进 一 步 普 及 , 该 文 介 绍 了 一 个 通 过 Android 平 台 下 的 摄 像 和 绘 图 功 能 , 利 用 二 维 码 的 编 码 和 解 码 原 理 , 通 过 Android 手 机 对 二 维 码 的 数 据 进 行 解 析 和 编 码 , 实 现 对 二 维 码 生 成 和 识 别 系 统 。 该 系 统 内 容 包 括 两 部 分 : 二 维 条 码 的 生 成 系 统 设 计 和 二 维 条 码 的 识 别 系 统 设 计 。 生 成 系 统 完 成 了 从 输 入 数 据 到 生 成 相 应 二 维 码的功能 , 识别系统完成对采集到的二维码符号进行译码还原出所携带信息的功能 。 关键词 : 二维码 ; 二维码生成 ; 二维码识别 ; Android 平台 中图分类号 : TP 311 文献标识码 : A 文章编号 : 1009 - 3044 ( 2012 ) 26- 6 353 - 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: [email protected] http://www.dnzs.net.cn Tel:+ 86- 551 - 5690963 5690964 ISSN 1009- 3044 C o m p u t e r K n o w l e d g e a n d T e c h n o l o g y 电脑知识与技术 Vol. 8, No. 26 , September 2012. 6353C o m p u t e r K n o w l e d g e a n d T e c h n o l o g y 电脑知识 与技术 本栏目责任编辑 : 唐一东 人工智能及识别技术 第 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); 6 354C o m p u t e r K n o w l e d g e a n d T e c h n o l o g y 电脑知识 与技术 人工智能及识别技术 本栏目责任编辑 : 唐一东 第 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 = mSurfaceHolder 01 .lockCanvas(); mC 1 .drawColor(getResources().getColor(R.drawable.white)); Paint mP = new Paint(); mP 1 .setStyle(Paint.Style.FILL); mP.setColor(colorFill); mP 1 .setStrokeWidth( 1 . 0 F); 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 ), mP 1 ); } } } mSurfaceHolder 01.unlockCanvasAndPost(mC 1 ); } 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); 6355C o m p u t e r K n o w l e d g e a n d T e c h n o l o g y 电脑知识 与技术 本栏目责任编辑 : 唐一东 人工智能及识别技术 第 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 . 6 356
展开阅读全文
1
  金牌文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:基于Android的二维码的生成与识别系统的设计与实现_马鸣.pdf
链接地址:http://www.gold-doc.com/p-255451.html
收起
展开