APP下载

基于二维码的会议签到系统设计

2014-09-06翔,胡彧,韩

电子器件 2014年5期
关键词:二维码

刘 翔,胡 彧,韩 书

(太原理工大学测控技术研究所,太原 030024)



基于二维码的会议签到系统设计

刘翔,胡彧*,韩书

(太原理工大学测控技术研究所,太原 030024)

摘要:针对会议签到快速化、节约化要求,提出了一种基于二维码的签到系统,介绍了系统整体结构以及软硬件设计方案。系统终端由ARM11硬件平台和嵌入式Linux系统构成,使用USB摄像头完成二维码扫描,经由以太网上传至服务器,最后在java平台实现二维图像解码并记录。经过测试表明,系统运行正常,能够顺利完成签到功能。

关键词:嵌入式Linux;会议签到系统;二维码;MySQL

近些年,我国改革开放不断深化,经济、科技、文化的交流变得越来越密切,各种大型会议相继召开,与会人数屡创新高。会议入口排队人数众多,容易造成拥挤、踩踏等恶性事故。会议签到的快速化、节约化要求越来越得到会议组织者的重视。

目前的会议签到系统大多使用RFID卡、人脸、指纹作为人员信息的载体。对于大型会议,使用RFID卡将会产生巨大的制作成本,而使用人脸、指纹的系统又必须提前采集相关信息,不易实施。

本文介绍了一种会议签到系统。与会人员只需自行下载会议核发的二维码通行证到自己的手机上或者打印纸质版本,将其放置于信息采集处,系统便可获人员信息,完成签到。

1 系统整体结构

系统由嵌入式图像采集终端和上位机PC机两部分组成。图像采集终端由ARM11处理器S3C6410芯片和嵌入式linux系统构成,使用USB摄像头捕捉二维码图像。采集完成后经过以太网传送至上位机PC机。上位机接收完成后,在Java平台下对图像进行解码,获得人员信息,最后将其记录于数据库中,完成一次签到。同时,上位机的图形界面可以对签到信息进行查询、打印等。系统整体结构如图1所示。

图1 系统整体结构图

2 图像采集终端硬件设计

系统终端选用友善之臂公司的TINY6410开发板,它的CPU为三星公司的S3C6410芯片,它是基于ARM1176JZF-S核设计的,主频为533 MHz,最高可达到667 MHz。配有256 M的RAM和1G的NAND FLASH。接口资源包括DM9000网卡、USB接口等[1]。

USB摄像头选用中星微公司生产的ZC301摄像头。该款摄像头输出图像格式为JPEG,并且linux-2.6.36等高版本的内核已经包含了该款摄像头驱动,所以可以直接使用,无须自己编写驱动程序,大大缩短了开发周期。

3 图像采集终端软件设计

3.1软件平台搭建

Linux是一种开源操作系统,具有内核小、效率高、可裁剪等特点[2]。在嵌入式Linux下进行软件开发,首先要在开发板上移植Linux系统。目前有关Linux系统移植方面的资料已经很多,本文不再赘述,只简要介绍其基本步骤:(1)在宿主机建立交叉编译环境。(2)下载linux内核源代码,本系统选取的内核版本为2.6.38。(3)配置并编译内核。(4)利用busybox制作根文件系统。(5)利用uboot下载内核和根文件系统进入开发板中[3]。

3.2图像采集模块设计

linux系统在2.1内核版本之后,视频采集的主流方法是使用V4L(Video for Linux)应用程序通用接口实现的[4]。经过不断地发展和改进,V4L的第2代API:V4L2诞生了,并且在2.5版本之后得到了广泛应用[5]。V4L2采用流水线的方式,使用ioctl()函数完成对摄像头的各种操作,编程简单,应用广泛,流程图如图2所示。

图2 图像采集流程图

3.2.1打开视频设备

在linux系统中,对设备的访问是以文件的形式进行的。在/dev目录下包含了系统所有的外部设备文件。所以对设备访问的第1步就是需要使用open()函数打开其对应的设备文件。在本系统中,USB摄像头对应的设备文件为/dev/video2。

3.2.2视频设备初始化

打开视频设备之后,需要首先对其进行初始化。包括查询摄像头驱动功能、设置图像参数等。同时,为了加快图像数据的传输,还需要进行内存映射。

(1)查询摄像头驱动功能

使用带VIDIOC_QUERYCAP参数的ioctl()函数可以获取驱动程序名称、总线类型、设备能力等信息。

(2)设置图像参数

使用带VIDIOC_S_FMT参数的ioctl()函数设置摄像头输出数据格式,图像长度、宽度、亮度、对比度等,在实际应用中,可以根据实际环境进行相应设置,同时也可以设置为默认格式。

(3)内存映射

V4L2完成图像采集之后,图像数据所在的缓冲区位于内核空间,用户无法直接访问,使用内存映射的方法可以使应用程序快速获取图像信息,加快图像采集效率。首先应用程序向驱动申请分配缓冲区。分配完成之后,应用程序要对缓冲区所在位置以及大小进行查询。最后,使用mmap()函数将这块内存映射到用户空间。使用到的函数如下所示:

ioctl(fd,VIDIOC_REQBUFS,&req)

ioctl(fd,VIDIOC_QUERYBUF,&buf)

mmap(void *start,size_t length,int prot,int flags,int fd,off_t offset)

3.2.3图像采集

开始图像采集,需要使用带VIDOIOC_QBUF参数的ioctl()函数,将上一步申请的缓冲区加入视频采集队列,然后使用带VIDIOC_STREAMON参数的ioctl()函数开启摄像头,这样摄像头驱动程序就会把一帧图像数据放入缓冲区中,之后再使用带参数VIDIOC_DQBUF的ioct()l函数将缓冲区出列,便可获得图像数据。

3.2.4关闭摄像头

图像采集完毕,需要使用munmap()函数解除内存映射,之后使用带VIDIOC_STREAMOFF参数的ioctl()函数关闭摄像头。

3.3图像数据发送模块设计

本系统的网络模型为C/S结构,即客户端/服务器结构。图像采集终端作为客户端,上位机作为服务器。终端完成图像采集之后,向上位机提出上传图像申请并准备发送数据,上位机接受请求之后开始接受数据,最终保存为.jpg文件。

套接字API起源于1983年发行的4.2BSD操作系统[6]。套接字(Socket)是网络通信的基本操作单元,又被称为操作端口,用于描述IP地址和端口,是一个通信链的句柄。应用程序可以通过套接字向网络发出请求或者应答网络请求[7]。

套接字一共有3种类型,分别为:流式套接字、数据报式套接字、原始式套接字。其中流式套接字是一种面向连接的、可靠的、基于字节流的运输层通信协议。为了保证图像传输的可靠性,本系统采用流式套接字来传输图像数据。流程图如图3所示。

(1)创建套接字:使用带SOCK_STREAM参数的socket()函数创建一个基于TCP/IP协议的流式套接字。

(2)根据上位机的IP地址和端口号,为结构体(struct sockaddr_in)赋值。

(3)使用connect()函数向上位机请求连接。

(4)连接成功后,使用send()函数上传图像数据。

(5)发送完毕,使用close()函数关闭套接字。传输完成。

图3 图像发送流程图

4 上位机软件设计

4.1软件平台

java是一种面向对象的编程语言,可移植性比较高,一次编写处处执行。在本系统中,java对于socket编程已经封装了socket类,可以直接使用,编程十分方便。在二维码解码方面,使用google公司推出的ZXing工具可以很方便的对二维码进行解码。在访问数据库方面,使用JAVA提供的JDBC可以很容易的向各种关系数据库发送SQL语句,使访问数据库变得十分简便。所以上位机选用java平台进行开发。

4.2图像数据接收模块设计

java基于对象的编程思想使得java平台下的socket编程已经变得十分容易。服务器端程序流程图如图4所示。

(1)创建套接字并绑定至相关端口。java的java.net包已经提供了ServerSocket类表示服务器端套接字。使用构造函数即可创建套接字,并完成绑定。

(2)初始化完成之后,服务器程序开始侦听绑定的端口,等待客户端连接请求。

(3)服务器接受客户端的连接以后,打开输入流,程序从输入流中读取数据。

(4)打开文件的输出流,将数据写入文件中。

(5)操作完成之后,关闭连接。

图4 图像接收流程图

4.3二维码解码模块的实现

ZXing是google公司基于java平台开发的一款开源一维/二维码图像编码解码库。支持的条码格式有:39码、93码、128码、QR码等。

ZXing源代码可以很方便的从其官网下载,其中包含了核心包/core和对于不同平台的接口,如/cpp、/csharp、/android、/symbian、/iphone等。

只需要将其中的核心包导入Eclipse工程中,使用MultiFormatReader类中的decode方法即可完成对二维码图像的解码,获得对应的字符串信息即人员信息。

4.4数据库访问模块程序设计

MySQL数据库是由瑞典MySQL AB公司开发的一款关系型数据库。MySQL具有体积小、性能高、支持多种平台的特点,是最流行的开放源码的关系数据库软件[8]。

JDBC是java系统提供给用户在java程序中操作数据库的java API。它由一组用Java语言编写的类和接口组成,并为数据库厂商和第3方中间件厂商实现与数据库连接提供了一套标准方法[9]。使用JDBC可以提高程序的通用性,针对不同种类的关系型数据库可以使用一套API,大大减少了编程工作量。

JDBC访问数据库的流程图如图5所示。

(1)连接数据库

访问数据库之前,需要下载MySQL提供的JDBC驱动包,并将其导入eclipse工程中,注册该驱动程序之后就可以对上位机上的MySQL数据库进行访问。代码如下所示:

Class.forName("com.mysql.jdbc.Driver");

con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123456");

stmt=con.createStatement();

图5 JDBC访问数据库流程图

(2)发送SQL语句,执行添加命令

使用Statement中的executeUpdate(str)方法执行str代表的SQL语句。添加信息进入数据库。

(3)处理返回结果。

上面语句执行完成,将会返回添加结果。如果为1则添加成功,为0则添加失败。

4.5上位机界面设计

为了使工作人员更加方便的查询数据库中记录信息,本系统使用Java Swing工具包设计了可视化图形界面程序,方便工作人员查询、打印。如图6所示。

5 小结

本文设计了一种使用二维码识别技术,基于嵌入式linux系统开发的会议签到系统。使用V4L2应用程序编程接口完成图像采集,经过网络传输上传至上位机,上位机使用ZXing开发工具完成图像的解

码之后记录于数据库。整个系统稳定可靠,价格低廉,图形界面十分友好,具有广泛的地应用前景。

图6 上位机图形界面

参考文献:

[1]Samsung.User’s manual S3C6410X RISC Microprocessor[S].2008.

[2]李军,张华春.U2Boot及Linux216在S3C2440A平台上的移植方法[J].电子器件,2008,31(5):1667-1670.

[3]庄严,王光宇,杨海峰.嵌入式Linux系统工程师实训教程[M].北京:清华大学出版社,2012:159-162.

[4]王建新,张凯,王秀.基于S3C2440的视频采集及传输系统设计[J].电子器件,2013,36(3):367-370.

[5]白长清,陈沛.嵌入式终端基于Linux V4L2的图像采集系统[J].科技资讯,2012(2):22-23.

[6]Richard Stevens W,Stephen A Rago.UNIX环境高级编程[M].尤晋元,张亚英,戚正伟,译.北京:人民邮电出版社,2006:12-17.

[7]刘发久.java程序设计[M].大连:大连理工大学出版社,2009.8:234-236.

[8]王志刚,江友华.MySQL高效编程[M].北京:人民邮电出版社,2012.1:89-95.

[9]周怡.Java程序设计案例教程[M].北京:清华大学出版社,2010.7:212-214.

刘翔(1990-),男,汉族,山西长治人,硕士研究生,主要研究方向为嵌入式系统及应用,xiang310.90@qq.com;

胡彧(1968-),女,汉族,山东历城,博士,硕士生导师,研究方向为智能化信息检测与处理、无线传感器网络、物联网技术。学术兼职:中国计量测试学会理事、中国仪器仪表学会传感器分会理事、中国水利学会水利量测技术专业委员会副主任委员、中国计算机学会高级会员、山西省青年科技工作者协会理事,huyutyut@163.com;

韩书1988-),男,汉族,湖北宜昌人,硕士研究生,主要研究方向为嵌入式系统及应用,188542054@qq.com。

DesignofMeetingSign-inSystemBasedonTwo-DimensionalBarCode

LIUXiang,HUYu*,HANShu

(Institute of Measuring and Controlling Technology,Taiyuan University of Technology,Taiyuan 030024,china)

Abstract:In order to reach the requirement of quick sign,the meeting sign-in system which is based on two-dimensional code is presented.The whole structure of system and design of hardware and software are shown.The terminal is constituted by ARM11 chip and Linux operating system controlling USB camera to scan the two-dimensional code.Then it uploads the image to server through Ethernet.At last,the image is decoded and record at the platform of Java.The tests show that the whole system runs very well and can reach the requirement of quick sign.

Key words:embedded linux;meeting sign-in system;two-dimensional bar code;MySQL

doi:EEACC:6120B10.3969/j.issn.1005-9490.2014.05.046

中图分类号:TP274

文献标识码:A

文章编号:1005-9490(2014)05-1013-04

收稿日期:2013-09-17修改日期:2013-10-10

猜你喜欢

二维码
二维码
小康二维码
从条形码到二维码
让严肃的二维码呆萌起来
二维码让政务公开更直接
二维码,别想一扫了之