农产品质量安全追溯智能终端系统构建与应用

2014-12-23 11:30:08成维莉王清辉
江苏农业学报 2014年1期
关键词:服务端译码条码

毛 林, 程 涛, 成维莉, 刘 凯, 王清辉

(1.江苏省泰州市农业物联网工程技术中心,江苏 泰州225300;2.江苏农牧科技职业学院,江苏 泰州225300)

食品安全问题是全社会关注的焦点,农产品质量安全为食品安全的基础,可追溯制度建立是农产品质量安全管理的最有力手段。可追溯系统强调农产品生产、储运和销售整个过程的质量溯源与全程监管,建立和实行农产品追溯制度,及时发现并召回危害健康的农产品,实施整改、惩罚措施,强化产业链上各企业责任,保障食品安全性[1]。在国外,欧盟、美国等相继颁布食品安全相关法案并建立主要应用于畜牧产品的可追溯系统,强制实施畜禽、肉制品追溯制度[1-2]。国内,自颁布《食品安全法》、《农产品质量安全法》等食品安全法律法规以来,强化了食品安全监管力度,确保了安全监管整体效能[3]。中国标准化研究院中国物品编码中心多年致力于“中国条码推进工程”在食品溯源中的应用[4]。国内开展可追溯系统研究至今,各省市相继开发了本区域应用的农产品质量安全追溯系统[5-11],对农产品信息获知、农产品产地源头的定位更加快速和便利,同时可准确追溯到危害发生的根源[1]。其中,国内最具影响的可追溯系统包括北京市农业局的食用农产品质量安全追溯系统、农业部的肉牛生产全程质量安全可追溯体系等[4],主要实现了以网站、短信、电话、触摸屏方式进行的查询追溯,但针对智能手机的查询追溯系统的研究甚少[12]。然而消费者购买农产品时,希望能以最快捷方式通过随身智能手机扫描一下产品条码,在第一时间查询获知农产品信息,完成快速追溯,及时避免危害事件发生。因此,农产品质量追溯智能终端系统的构建和应用具有重要的研究意义。本研究结合农产品质量安全追溯管理体系研究与试点项目——农产品质量安全追溯平台JS_APQT,对智能终端追溯业务流程与系统架构进行设计,重点研究手机端QR 二维码识读、译码、通信端口与服务端数据交换接口关键技术的实现方法,提出基于Android 手机的农产品质量追溯智能终端解决方案。

1 JS_APQT 业务流程与编码方法

JS_APQT 平台包括:公共服务平台、数据管理中心、系统管理中心、政府监管中心、农产品基地追溯系统、质量安全检测系统(第三方系统)及农药残留检测设备集成模块、智能终端数据交换接口与基础设施(硬件、软件支撑)业务模块,如图1 所示。JS_APQT核心业务流程为生产经营主体备案、生产档案填写、产地准出检测、追溯标识打印与张贴、生产档案完善、动态监管。JS_APQT 通过业务流程,完成生产记录存储,实现产品流向追踪及储运信息查询,实施对农产品生产、加工、流通、销售全过程质量安全的全程可追溯监管(图2)。在任何时刻、任何地点,任何用户可通过网络登录平台查询产品信息,进行农产品质量溯源,行使消费者知情权;监管机构能准确掌握实时的农产品质量安全状况,获取相关信息,对问题产品可及时召回、采取处罚措施[2]。

图1 JS_APQT 平台业务模块Fig.1 JS_APQT platform business modules

农产品追溯码是农产品终端销售时承载追溯信息、直接面对展现给消费者的统一代码[13]。JS_APQT 平台中,农产品追溯码按类别分成种植业追溯码、养殖业追溯码两大类。以种植业为例,农产品追溯码由产地码、产品信息码两部分构成,共29 位数字(图3)。产地编码为农产品生产基地归属地的身份编码,由行政区划+乡镇(街道)+村(社区)+产地分类+产地代码构成。根据农业部NY/T 1430-2007《农产品产地编码规则》标准[14],行政区划为6位数字,乡镇(街道)为3 位,村(社区)为3 位,产地分类为5 位,产地代码为3 位,共计20 位;产品信息码为9 位,由产品生产档案号+采收批次号组成。生产档案号包括产品备案号3 位,年份2 位与生产批次1 位,共6 位,采收批次号可按3 位的顺序号或时间间隔数来表示,其中,产品备案号第1 位代表大类标识,0 ~2 为种植业农产品。

农产品标识码是农产品质量追溯成功的关键,分一维码和二维码。JS_APQT 平台采用QR 条码数字编码规则,QR 条码承载信息量大、存储空间小、容错强、可靠性高、高速全方位识读,支持多种符号、汉字的编码,即使局部受损仍可识读完整信息,最适合农产品追溯系统[15]。

图2 JS_APQT 平台追溯业务流程Fig.2 Tracing business processes of JS_APQT platform

图3 农产品追溯码结构Fig.3 Tracing code structure of agricultural product

2 系统总体架构设计

Android 嵌入式系统为智能终端主流操作系统之一,是一个基于Linux 的半开放原始码作业系统,主要用于智能手机,因其开放性、便于开发的优势广受欢迎,Android 手机是目前主流的、应用最广的智能手机之一。本研究构建基于Android 手机追溯的智能终端系统。

2.1 系统业务流程

手机客户端的数据来源由服务器接口提供,客户端发送农产品追溯码,查询产品信息、追溯的访问请求经运营商网络提交至服务器端,业务流程见图4。本系统中,农产品二维码是关联到服务端后台数据库的。当手机手动输入追溯码或扫描产品二维码经译码获得追溯码时,首先在Android 智能端通信接口测试系统服务端相连接,若连接成功,访问系统服务端,将追溯码发送到系统服务端,并通过数据交换接口接受追溯码,通过相关业务逻辑到数据库中查询相关的农产品控制信息,再将这些信息转换成一种特定数据交换格式的数据发回到手机端。手机端验证来自系统服务端的连接,若连接成功,将接受数据解析成手机支持的数据格式,通过操作系统适配器将信息显示到手机页面上[16]。

2.2 系统架构

系统架构是基于C/S 的三层结构,即Android 手机客户层、服务层以及通信链路层(无线网络)(图5)。手机端内置的Android 系统、移动网络、工具软件是手机应用的支撑平台,手机系统因受到硬件资源的限制[17],仅适合满足轻量级的应用需求,在Android 手机端直接进行条码识读、译码,占用资源小、计算要求低,可完全满足手机性能要求,无需通过访问远程服务器。服务层(JS_APQT 平台)有强大的数据处理、复杂运算、存储能力等硬件资源条件,承担海量的农产品控制信息存储和复杂的数据访问业务处理,在服务端部署数据交换接口,满足手机应用需求。

图4 系统业务流程Fig.4 System work flow

图5 系统架构Fig.5 System architecture

2.3 系统功能设计

系统由手机客户端子系统与服务端子系统两大部分构成,客户端子系统包括QR 条码识读功能组件、译码功能组件、通信接口组件。QR条码识读组件对条码标签进行拍码、生成二维码图像文件、存储二维码图像文件。译码功能组件读取符号图像文件,转换为数字模块矩阵,识读格式信息并检测纠错,恢复数据追溯码。通信接口组件测试手机网络连接,以主动模式向远程服务器发送请求,接收服务器返回的数据。服务端子系统包括数据交换接口功能组件、业务逻辑组件、数据访问组件。数据交换接口接收客户端请求,调用业务逻辑组件、数据访问组件,查询数据库,返回给客户端。本研究中,智能终端追溯的关键是条码识读、译码、追溯查询通信、数据交换的实现。

3 系统实现

3.1 Android 环境配置

Android 手机端功能软件是基于Eclipse 工具、Android 包ADT 与第三方开源库设计实现的。本研究选择Eclipse3.6+Android2.3.1+ADT18.0.0+Zxing,在Eclipse 中导入Android2.3.1、ADT18.0.0、Zxing,部署Android 开发环境。Eclipse 为面向Android 的集成开发环境,ADT 为Android 底层支持工具包,提供UI、接口、网络通信、数据库、公共工具类服务。Zxing(Horse Crossing)为Google 的一个开源项目半成品框架,支持对QR、Data Matrix、UPC 各种条码的图像捕捉、编码和译码[18],便于在此框架进行二次开发。

3.2 客户端实现

客户端子系统运用Android 事件处理机制进行条码识读、译码、数据通信的业务处理,它包括基于监听的事件处理和消息处理等方式。事件监听处理模型通过事件处理器类实现,包含4 个对象:事件源、事件、事件监听器、事件处理器。监听处理机制是:手机界面组件作为事件源,手机用户触发组件时产生事件对象,事件对象作为参数传递到事件源的事件监听器,事件监听器调用事件处理器[19],完成一次业务处理。为高效地进行手机端条码识读、译码与追溯查询通信业务处理,事件处理器类Activity类中通过onCreate 方法向手机用户呈现初始操作界面,界面组件(按钮、菜单项等)作为事件源绑定到事件监听器OnClickListener,OnClickListener 监听到用户操作事件,调用事件处理器onClick 处理事件,实现相关业务操作。可返回呈现结果界面给用户。不同的Activity 可以完成不同类型的交互,在Activity 定义Intent 对象为用户呈现下一步应用状态。Intent 承担传递要启动下一个Activity 的“信使”,Intent 可避免组件耦合、提高系统响应速度[19]。条码识读、译码、数据通信的具体实现过程分述如下。

3.2.1 条码识读 在Eclipse 工作区中的qr.google.zxing 包下创建CaptureActivity 监听器类,在此类创建事件监听器对象和事件处理器方法。条码识读步骤是:(1)点击手机界面上的二维码扫描按钮,打开手机摄像头;(2)对准产品条码标签拍照。实现过程如下:

1)在CaptureActivity 中创建并实现onCreate(Bundle savedInstanceState)方法,onCreate 方法中使用CameraManager.init(getApplication())来初始化手机摄像头,onCreate 调用setContentView()、find-ViewById()方法控制界面布局、加入按钮等组件。当启动CaptureActivity 后,onCreate 被回调,呈现手机操作界面。

2)定义事件监听器OnClickListener,为二维码扫描按钮绑定OnClickListener 对象,监听用户动作,在方法中创建Intent 对象,Intent 对象启动译码监听器类QRcoderesult 的意图,以qrcode 键值保存,创建startActivity(intent)方法传递给QRcoderesult 启动执行译码业务。用户按下二维码扫描按钮后,触发on-Click 事件,手机屏幕上呈现摄像镜头,镜头对准条码进行拍照,识读条码图像后,呈现条码图像,并将启动信息提交到译码监听器类,通知做好译码准备,提高了系统响应速度。

3.2.2 条码译码 译码是编码的逆过程,是将手机端摄取的条码图像解析成追溯码,它是实现提交查询追溯的前提。本系统采用QR 条码的数字译码方法获得追溯码。译码步骤[15]是:(1)定位、获取符号图像,转换模块为0、1 矩阵;(2)识读格式信息,去除掩模图形,纠错格式信息模块,识别纠错等级与掩模图形参考;(3)识读符号版本;(4)用掩模图形或编码区位图消除掩模;(5)按照模块排列规则,识读符号字符,恢复信息的数据与纠错码字;(6)用纠错码字检测错误纠错;(7)数据码字按模式和字符计数指示符分为多个模式段;(8)按照采用模式译码获得以数据字符表示的追溯码。

译码前首先要启动一个译码的监听器类,获取启动译码的意图,依据意图调用android 译码业务类android.os.Bundle.getString 执行并完成译码,android.os.Bundle 负责译码。实现过程是:(1)创建译码监听器类QRcoderesult,在Qrcoderesult 中定义实现onCreate(Bundle savedInstanceState)方法,监听启动意图。(2)Qrcoderesult 启动意图后,读取Intent 中启动译码意图的信息,存入Bundle,以便使用译码工具android.os.Bundle;(3)调用执行android.os.Bundle 的getString 业务方法,返回产品条码对应的追溯码。

3.2.3 手机端通信 手机端通信端口负责与远程服务器交互,包括测试手机网络连接、向服务端发送请求、接收返回结果。在Qrcoderesult 的onCreate 中创建getInfoByQrcode()方法,实现手机端通信端口,过程是:(1)调用android.net.ConnectivityManager 测试手机连接网络,支持WiFi 等网络;(2)设置访问服务端网络资源地址URL,http://IP 地址/mob/prod_castBack.action,检查URL 是否有效;(3)通过URL 的openConnection()方法测试HttpURLConnection,HttpURLConnection 获取连接到服务端的响应码;(4)响应码有效时,追溯码参数键/值对转换成网络传输格式HTTP.UTF_8 后,追加到URL,用HttpPost 装载服务端URL,由HttpClient 提交到服务器;(5)HttpResponse 获取返回的查询追溯信息;(6)EntityUtils 经数据转换后,按照生产环节、农产品认证、监测信息、田间作业进行分类,输出到手机。主要代码如下:

private void getInfoByQrcode(){

WebData wd = new WebData();

ConnectionDetector cd = new ConnectionDetector(this);

returnJsonStr = wd.getJsonData(Sysconfig.URL_GET_RETROSPECT_INFO,

Sysconfig.KEY_GET_RETROSPECT_INFO,qr-Code);

HttpClient httpclient = new DefaultHttpClient();

HttpPost post = new HttpPost(url);

ArrayList<NameValuePair>params = new Array-List<NameValuePair>();

params.add(new BasicNameValuePair(key,value));

post.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));

HttpResponse response = httpclient.execute(post);

String inf = EntityUtils.toString(response.getEntity());

}

3.3 服务器数据交换

数据交换接口是服务端与手机端应用进行交互的关键组件。采用基于“消息或请求服务发现”的数据交换处理机制,以减轻、消除系统瓶颈,保证通信稳定性与可靠性[20]。Web Service 将服务端应用程序对外发布为开放式服务(接口),通过此服务在网络上共享开放出来的功能。通过XML、SOAP、WSDL、UDDL 等Web 服务语言来发现、描述和访问Web Service 服务接口。Web Service 开发服务端交换接口的过程是:

1)首先在JS_APQT 工程包下创建Aprod-CheckService 类,在类中定义、编写getNodeBase-ByTracId(String aprodTracId)方法,该方法作用是查询农产品生产基地信息、认证信息、检测信息、田间农事信息。

2)在WEB-INF 目录下创建deploy.wsdd 文件,使用wsdd 方法定制发布Web Service,配置如下:service 代表WebService 服务,AprodCheck 为Web-Service 名称;provider 指明WebService 类型是RPC,parameter 的className 参数值为WebService 的路径,allowedMethods 指明为外部接口,被客户端调用。

<deployment xmlns =" http://xml.apache.org/axis/wsdd/" xmlns:java=" http://xml.apache.org/axis/wsdd/providers/java">

<service name="AprodCheck" provider="java:RPC">

<parameter name=" className" value=" com.apqt.pbts.webservice.AprodCheckService"/>

<parameter name =" allowedMethods" value ="* "/>

</service>

</deployment>

3)使用第三方开源包axis 的AdminClient 工具类发布WebService。运行cmd,选择目录C:tomcat6.0webappsAxisWebServiceWEB-INF>,运行命令:java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd 后,出现Processing file deploy.wsdd <Admin>Done processing</Admin>,生成server-config.wsdd。

4)在IE 地址栏输入http://localhost:8080/AxisWebService/servlet/AxisServlet,显示wsdl 文档,发布成功。

数据交换接口的getNodeBaseByTracId 方法接受手机端远程消息请求、做出响应,依据追溯码内容调用业务逻辑层Biz 和数据层DAO,查询数据库服务器中相应农产品信息,将信息转换成JSON 格式[21]的数据,发送到用户手机端。JSON(JavaScript Object Notation),是一种轻量级的数据交换格式,能高效地实现数据交互。用jQuery 来解析JSON 数据,屏蔽DOM 解析XML 文件复杂性,缩短追溯数据传输时间,优化数据传输效率。

4 应用案例

本例中,选择JS_APQT 平台上实际注册种植业用户的产品QR 条码(图6),通过手机进行测试,查询追溯农产品控制信息。过程是:(1)在客户端界面选择二维码扫描;(2)手机摄像镜头对准并扫描二维码;(3)手机端译码模块解析QR 条码,获得追溯码为32092410621082000001101131001;(4)向系统服务端发送经格式转换后的追溯码;(5)系统服务器交换接口读取追溯码,通过业务逻辑查询数据库,获得农产品质量控制信息,经过处理,返回手机端。(6)手机得到数据后进行解析转换,显示在手机端界面上。通过追溯获得的质量控制信息包括:生产信息、监测信息、认证信息、作业信息。能够达到主体、产品、过程三个级别的追溯精度[22]。

图6 农产品QR 条码标签Fig.6 Agricultural product QR code tag

5 讨论

本研究以农产品质量安全追溯智能终端为对象,结合农产品质量追溯平台JS_APQT 架构和编码方式,采用Eclipse、Android、Web Service 等技术,提出了面向Android 手机的农产品质量追溯智能终端解决方案。与现有系统的短信、电话、触摸屏方式相比,本方案以智能终端这种快捷、新颖查询追溯形式建立了多层次、多角色的质量安全控制追溯体系,查询精准度高达100%。通过本方案可获得农产品成长档案、验明农产品真实身份,以满足人们“明白消费、放心消费”的基本需求,提升农产品质量跟踪溯源的效能,为政府动态监管、企业构筑质量控制信息平台提供更高效、优质的服务,达到质量可查询、产品可溯源、事故可预警的目的。目前,条码标签成本低廉、印制方便,被广为接受,但容易被非法复制、伪造,FRID 射频卡虽不易仿造,但FRID 卡识读器因成本昂贵而很难被普通消费者所接受,这会增加企业成本、经营风险,因此追溯防伪验证是下一步研究并解决的问题。

[1] 余 华,吴振华.农产品追溯码的编码研究[J].中国农业科学,2011,44(23):4801-4806.

[2] 涂传清,王爱虎.我国农产品质量安全追溯体系建设中存在的问题与对策[J].农机化研究,2011(3):16-20.

[3] 韩 杨,李成贵.中国食品安全的过去、现在与未来[J].经济研究参考,2011(45):2-12.

[4] 金海水,刘俊华.农产品质量快速溯源系统的现状、问题及对策[J].商业时代,2009(25):66-67.

[5] 昝林森,郑同超,申光磊,等.牛肉安全生产加工全过程质量跟踪与追溯系统研发[J].中国农业科学,2006,39 (10):2083-2088.

[6] 朱海鹏.粮食龙头企业质量安全可追溯系统研究与实现[D].北京:中国农业科学院,2007.

[7] 杨信廷,钱建平,孙传恒,等.蔬菜安全生产管理及质量追溯系统设计与实现[J].农业工程学报,2008,24(3):162-166.

[8] 刘雪梅,章海亮,刘燕德.农产品质量安全可追溯系统建设探析[J].湖北农业科学,2009,48(8):2001-2003.

[9] 姜利红,潘迎捷,谢 晶.基于HACCP 的猪肉安全生产可追溯系统溯源信息的确定[J].中国食品学报,2009,9(2):87-91.

[10] 张 可,柴 毅,翁道磊,等.猪肉生产加工信息追溯系统的分析和设计[J].农业工程学报,2010,26(4):332-339.

[11] 马汉武,王善霞.基于食品供应链的肉类食品可追溯性技术的研究[J].食品工业科技,2006,27(4):24-26.

[12] 赵 丽,邢 斌,李文勇,等.基于手机二维码识别的农产品质量安全追溯系统[J].农业机械学报,2012,43(2):124-128.

[13] NY/T 1431-2007 农产品追溯编码导则[S].[14] NY/T 1430-2007 农产品产地编码规则[S].

[15] 王永红.基于农产品质量安全追溯的QR Code 编码应用与实现[J].湖北农业科学,2012(23):309-313.

[16] 尚明华,秦磊磊,王风云,等.基于Android 智能手机的小麦生产风险信息采集系统[J].农业工程学报,2011(5):178-182.

[17] 朱信忠,许周旺,徐慧英.移动消息中间件MobileMOM 的研究与设计[J].计算机应用研究,2006(3):242-244.

[18] ZXING DISCUSSION GROUP.Zxing ("Zebra Crossing")[EB/OL].(2012-11-23)[2013-05-24].http://code.google.com/p/zxing.

[19] 王向辉,张国印,沈 洁.Android 应用程序开发[M].北京:清华大学出版社,2010:120-209.

[20] 杨西贝.Java 消息服务机制的研究与应用[D].南京:南京理工大学,2012.

[21] 屈 展,李 婵.JSON 在Ajax 数据交换中的应用研究[J].西安石油大学学报:自然科学版,2011,26(1):96-98.

[22] 陈 松,陈 琼,陈永峰,等.厦门市农产品质量安全追溯模式研究[J].现代农业科技,2013(2):282-287.

猜你喜欢
服务端译码条码
中国条码技术与应用协会
条码微站
基于校正搜索宽度的极化码译码算法研究
云存储中基于相似性的客户-服务端双端数据去重方法
新时期《移动Web服务端开发》课程教学改革的研究
消费导刊(2018年8期)2018-05-25 13:19:48
在Windows Server 2008上创建应用
从霍尔的编码译码理论看弹幕的译码
新闻传播(2016年3期)2016-07-12 12:55:27
LDPC 码改进高速译码算法
遥测遥控(2015年2期)2015-04-23 08:15:19
基于固定条码与电子标签比对设备的设计
基于概率裁剪的球形译码算法