劉 翔,胡 彧,韓 書
(太原理工大學(xué)測控技術(shù)研究所,太原 030024)
?
基于二維碼的會議簽到系統(tǒng)設(shè)計(jì)
劉翔,胡彧*,韓書
(太原理工大學(xué)測控技術(shù)研究所,太原 030024)
摘要:針對會議簽到快速化、節(jié)約化要求,提出了一種基于二維碼的簽到系統(tǒng),介紹了系統(tǒng)整體結(jié)構(gòu)以及軟硬件設(shè)計(jì)方案。系統(tǒng)終端由ARM11硬件平臺和嵌入式Linux系統(tǒng)構(gòu)成,使用USB攝像頭完成二維碼掃描,經(jīng)由以太網(wǎng)上傳至服務(wù)器,最后在java平臺實(shí)現(xiàn)二維圖像解碼并記錄。經(jīng)過測試表明,系統(tǒng)運(yùn)行正常,能夠順利完成簽到功能。
關(guān)鍵詞:嵌入式Linux;會議簽到系統(tǒng);二維碼;MySQL
近些年,我國改革開放不斷深化,經(jīng)濟(jì)、科技、文化的交流變得越來越密切,各種大型會議相繼召開,與會人數(shù)屢創(chuàng)新高。會議入口排隊(duì)人數(shù)眾多,容易造成擁擠、踩踏等惡性事故。會議簽到的快速化、節(jié)約化要求越來越得到會議組織者的重視。
目前的會議簽到系統(tǒng)大多使用RFID卡、人臉、指紋作為人員信息的載體。對于大型會議,使用RFID卡將會產(chǎn)生巨大的制作成本,而使用人臉、指紋的系統(tǒng)又必須提前采集相關(guān)信息,不易實(shí)施。
本文介紹了一種會議簽到系統(tǒng)。與會人員只需自行下載會議核發(fā)的二維碼通行證到自己的手機(jī)上或者打印紙質(zhì)版本,將其放置于信息采集處,系統(tǒng)便可獲人員信息,完成簽到。
系統(tǒng)由嵌入式圖像采集終端和上位機(jī)PC機(jī)兩部分組成。圖像采集終端由ARM11處理器S3C6410芯片和嵌入式linux系統(tǒng)構(gòu)成,使用USB攝像頭捕捉二維碼圖像。采集完成后經(jīng)過以太網(wǎng)傳送至上位機(jī)PC機(jī)。上位機(jī)接收完成后,在Java平臺下對圖像進(jìn)行解碼,獲得人員信息,最后將其記錄于數(shù)據(jù)庫中,完成一次簽到。同時(shí),上位機(jī)的圖形界面可以對簽到信息進(jìn)行查詢、打印等。系統(tǒng)整體結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)整體結(jié)構(gòu)圖
系統(tǒng)終端選用友善之臂公司的TINY6410開發(fā)板,它的CPU為三星公司的S3C6410芯片,它是基于ARM1176JZF-S核設(shè)計(jì)的,主頻為533 MHz,最高可達(dá)到667 MHz。配有256 M的RAM和1G的NAND FLASH。接口資源包括DM9000網(wǎng)卡、USB接口等[1]。
USB攝像頭選用中星微公司生產(chǎn)的ZC301攝像頭。該款攝像頭輸出圖像格式為JPEG,并且linux-2.6.36等高版本的內(nèi)核已經(jīng)包含了該款攝像頭驅(qū)動,所以可以直接使用,無須自己編寫驅(qū)動程序,大大縮短了開發(fā)周期。
3.1軟件平臺搭建
Linux是一種開源操作系統(tǒng),具有內(nèi)核小、效率高、可裁剪等特點(diǎn)[2]。在嵌入式Linux下進(jìn)行軟件開發(fā),首先要在開發(fā)板上移植Linux系統(tǒng)。目前有關(guān)Linux系統(tǒng)移植方面的資料已經(jīng)很多,本文不再贅述,只簡要介紹其基本步驟:(1)在宿主機(jī)建立交叉編譯環(huán)境。(2)下載linux內(nèi)核源代碼,本系統(tǒng)選取的內(nèi)核版本為2.6.38。(3)配置并編譯內(nèi)核。(4)利用busybox制作根文件系統(tǒng)。(5)利用uboot下載內(nèi)核和根文件系統(tǒng)進(jìn)入開發(fā)板中[3]。
3.2圖像采集模塊設(shè)計(jì)
linux系統(tǒng)在2.1內(nèi)核版本之后,視頻采集的主流方法是使用V4L(Video for Linux)應(yīng)用程序通用接口實(shí)現(xiàn)的[4]。經(jīng)過不斷地發(fā)展和改進(jìn),V4L的第2代API:V4L2誕生了,并且在2.5版本之后得到了廣泛應(yīng)用[5]。V4L2采用流水線的方式,使用ioctl()函數(shù)完成對攝像頭的各種操作,編程簡單,應(yīng)用廣泛,流程圖如圖2所示。
圖2 圖像采集流程圖
3.2.1打開視頻設(shè)備
在linux系統(tǒng)中,對設(shè)備的訪問是以文件的形式進(jìn)行的。在/dev目錄下包含了系統(tǒng)所有的外部設(shè)備文件。所以對設(shè)備訪問的第1步就是需要使用open()函數(shù)打開其對應(yīng)的設(shè)備文件。在本系統(tǒng)中,USB攝像頭對應(yīng)的設(shè)備文件為/dev/video2。
3.2.2視頻設(shè)備初始化
打開視頻設(shè)備之后,需要首先對其進(jìn)行初始化。包括查詢攝像頭驅(qū)動功能、設(shè)置圖像參數(shù)等。同時(shí),為了加快圖像數(shù)據(jù)的傳輸,還需要進(jìn)行內(nèi)存映射。
(1)查詢攝像頭驅(qū)動功能
使用帶VIDIOC_QUERYCAP參數(shù)的ioctl()函數(shù)可以獲取驅(qū)動程序名稱、總線類型、設(shè)備能力等信息。
(2)設(shè)置圖像參數(shù)
使用帶VIDIOC_S_FMT參數(shù)的ioctl()函數(shù)設(shè)置攝像頭輸出數(shù)據(jù)格式,圖像長度、寬度、亮度、對比度等,在實(shí)際應(yīng)用中,可以根據(jù)實(shí)際環(huán)境進(jìn)行相應(yīng)設(shè)置,同時(shí)也可以設(shè)置為默認(rèn)格式。
(3)內(nèi)存映射
V4L2完成圖像采集之后,圖像數(shù)據(jù)所在的緩沖區(qū)位于內(nèi)核空間,用戶無法直接訪問,使用內(nèi)存映射的方法可以使應(yīng)用程序快速獲取圖像信息,加快圖像采集效率。首先應(yīng)用程序向驅(qū)動申請分配緩沖區(qū)。分配完成之后,應(yīng)用程序要對緩沖區(qū)所在位置以及大小進(jìn)行查詢。最后,使用mmap()函數(shù)將這塊內(nèi)存映射到用戶空間。使用到的函數(shù)如下所示:
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參數(shù)的ioctl()函數(shù),將上一步申請的緩沖區(qū)加入視頻采集隊(duì)列,然后使用帶VIDIOC_STREAMON參數(shù)的ioctl()函數(shù)開啟攝像頭,這樣攝像頭驅(qū)動程序就會把一幀圖像數(shù)據(jù)放入緩沖區(qū)中,之后再使用帶參數(shù)VIDIOC_DQBUF的ioct()l函數(shù)將緩沖區(qū)出列,便可獲得圖像數(shù)據(jù)。
3.2.4關(guān)閉攝像頭
圖像采集完畢,需要使用munmap()函數(shù)解除內(nèi)存映射,之后使用帶VIDIOC_STREAMOFF參數(shù)的ioctl()函數(shù)關(guān)閉攝像頭。
3.3圖像數(shù)據(jù)發(fā)送模塊設(shè)計(jì)
本系統(tǒng)的網(wǎng)絡(luò)模型為C/S結(jié)構(gòu),即客戶端/服務(wù)器結(jié)構(gòu)。圖像采集終端作為客戶端,上位機(jī)作為服務(wù)器。終端完成圖像采集之后,向上位機(jī)提出上傳圖像申請并準(zhǔn)備發(fā)送數(shù)據(jù),上位機(jī)接受請求之后開始接受數(shù)據(jù),最終保存為.jpg文件。
套接字API起源于1983年發(fā)行的4.2BSD操作系統(tǒng)[6]。套接字(Socket)是網(wǎng)絡(luò)通信的基本操作單元,又被稱為操作端口,用于描述IP地址和端口,是一個(gè)通信鏈的句柄。應(yīng)用程序可以通過套接字向網(wǎng)絡(luò)發(fā)出請求或者應(yīng)答網(wǎng)絡(luò)請求[7]。
套接字一共有3種類型,分別為:流式套接字、數(shù)據(jù)報(bào)式套接字、原始式套接字。其中流式套接字是一種面向連接的、可靠的、基于字節(jié)流的運(yùn)輸層通信協(xié)議。為了保證圖像傳輸?shù)目煽啃?本系統(tǒng)采用流式套接字來傳輸圖像數(shù)據(jù)。流程圖如圖3所示。
(1)創(chuàng)建套接字:使用帶SOCK_STREAM參數(shù)的socket()函數(shù)創(chuàng)建一個(gè)基于TCP/IP協(xié)議的流式套接字。
(2)根據(jù)上位機(jī)的IP地址和端口號,為結(jié)構(gòu)體(struct sockaddr_in)賦值。
(3)使用connect()函數(shù)向上位機(jī)請求連接。
(4)連接成功后,使用send()函數(shù)上傳圖像數(shù)據(jù)。
(5)發(fā)送完畢,使用close()函數(shù)關(guān)閉套接字。傳輸完成。
圖3 圖像發(fā)送流程圖
4.1軟件平臺
java是一種面向?qū)ο蟮木幊陶Z言,可移植性比較高,一次編寫處處執(zhí)行。在本系統(tǒng)中,java對于socket編程已經(jīng)封裝了socket類,可以直接使用,編程十分方便。在二維碼解碼方面,使用google公司推出的ZXing工具可以很方便的對二維碼進(jìn)行解碼。在訪問數(shù)據(jù)庫方面,使用JAVA提供的JDBC可以很容易的向各種關(guān)系數(shù)據(jù)庫發(fā)送SQL語句,使訪問數(shù)據(jù)庫變得十分簡便。所以上位機(jī)選用java平臺進(jìn)行開發(fā)。
4.2圖像數(shù)據(jù)接收模塊設(shè)計(jì)
java基于對象的編程思想使得java平臺下的socket編程已經(jīng)變得十分容易。服務(wù)器端程序流程圖如圖4所示。
(1)創(chuàng)建套接字并綁定至相關(guān)端口。java的java.net包已經(jīng)提供了ServerSocket類表示服務(wù)器端套接字。使用構(gòu)造函數(shù)即可創(chuàng)建套接字,并完成綁定。
(2)初始化完成之后,服務(wù)器程序開始偵聽綁定的端口,等待客戶端連接請求。
(3)服務(wù)器接受客戶端的連接以后,打開輸入流,程序從輸入流中讀取數(shù)據(jù)。
(4)打開文件的輸出流,將數(shù)據(jù)寫入文件中。
(5)操作完成之后,關(guān)閉連接。
圖4 圖像接收流程圖
4.3二維碼解碼模塊的實(shí)現(xiàn)
ZXing是google公司基于java平臺開發(fā)的一款開源一維/二維碼圖像編碼解碼庫。支持的條碼格式有:39碼、93碼、128碼、QR碼等。
ZXing源代碼可以很方便的從其官網(wǎng)下載,其中包含了核心包/core和對于不同平臺的接口,如/cpp、/csharp、/android、/symbian、/iphone等。
只需要將其中的核心包導(dǎo)入Eclipse工程中,使用MultiFormatReader類中的decode方法即可完成對二維碼圖像的解碼,獲得對應(yīng)的字符串信息即人員信息。
4.4數(shù)據(jù)庫訪問模塊程序設(shè)計(jì)
MySQL數(shù)據(jù)庫是由瑞典MySQL AB公司開發(fā)的一款關(guān)系型數(shù)據(jù)庫。MySQL具有體積小、性能高、支持多種平臺的特點(diǎn),是最流行的開放源碼的關(guān)系數(shù)據(jù)庫軟件[8]。
JDBC是java系統(tǒng)提供給用戶在java程序中操作數(shù)據(jù)庫的java API。它由一組用Java語言編寫的類和接口組成,并為數(shù)據(jù)庫廠商和第3方中間件廠商實(shí)現(xiàn)與數(shù)據(jù)庫連接提供了一套標(biāo)準(zhǔn)方法[9]。使用JDBC可以提高程序的通用性,針對不同種類的關(guān)系型數(shù)據(jù)庫可以使用一套API,大大減少了編程工作量。
JDBC訪問數(shù)據(jù)庫的流程圖如圖5所示。
(1)連接數(shù)據(jù)庫
訪問數(shù)據(jù)庫之前,需要下載MySQL提供的JDBC驅(qū)動包,并將其導(dǎo)入eclipse工程中,注冊該驅(qū)動程序之后就可以對上位機(jī)上的MySQL數(shù)據(jù)庫進(jìn)行訪問。代碼如下所示:
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123456");
stmt=con.createStatement();
圖5 JDBC訪問數(shù)據(jù)庫流程圖
(2)發(fā)送SQL語句,執(zhí)行添加命令
使用Statement中的executeUpdate(str)方法執(zhí)行str代表的SQL語句。添加信息進(jìn)入數(shù)據(jù)庫。
(3)處理返回結(jié)果。
上面語句執(zhí)行完成,將會返回添加結(jié)果。如果為1則添加成功,為0則添加失敗。
4.5上位機(jī)界面設(shè)計(jì)
為了使工作人員更加方便的查詢數(shù)據(jù)庫中記錄信息,本系統(tǒng)使用Java Swing工具包設(shè)計(jì)了可視化圖形界面程序,方便工作人員查詢、打印。如圖6所示。
本文設(shè)計(jì)了一種使用二維碼識別技術(shù),基于嵌入式linux系統(tǒng)開發(fā)的會議簽到系統(tǒng)。使用V4L2應(yīng)用程序編程接口完成圖像采集,經(jīng)過網(wǎng)絡(luò)傳輸上傳至上位機(jī),上位機(jī)使用ZXing開發(fā)工具完成圖像的解
碼之后記錄于數(shù)據(jù)庫。整個(gè)系統(tǒng)穩(wěn)定可靠,價(jià)格低廉,圖形界面十分友好,具有廣泛的地應(yīng)用前景。
圖6 上位機(jī)圖形界面
參考文獻(xiàn):
[1]Samsung.User’s manual S3C6410X RISC Microprocessor[S].2008.
[2]李軍,張華春.U2Boot及Linux216在S3C2440A平臺上的移植方法[J].電子器件,2008,31(5):1667-1670.
[3]莊嚴(yán),王光宇,楊海峰.嵌入式Linux系統(tǒng)工程師實(shí)訓(xùn)教程[M].北京:清華大學(xué)出版社,2012:159-162.
[4]王建新,張凱,王秀.基于S3C2440的視頻采集及傳輸系統(tǒng)設(shè)計(jì)[J].電子器件,2013,36(3):367-370.
[5]白長清,陳沛.嵌入式終端基于Linux V4L2的圖像采集系統(tǒng)[J].科技資訊,2012(2):22-23.
[6]Richard Stevens W,Stephen A Rago.UNIX環(huán)境高級編程[M].尤晉元,張亞英,戚正偉,譯.北京:人民郵電出版社,2006:12-17.
[7]劉發(fā)久.java程序設(shè)計(jì)[M].大連:大連理工大學(xué)出版社,2009.8:234-236.
[8]王志剛,江友華.MySQL高效編程[M].北京:人民郵電出版社,2012.1:89-95.
[9]周怡.Java程序設(shè)計(jì)案例教程[M].北京:清華大學(xué)出版社,2010.7:212-214.
劉翔(1990-),男,漢族,山西長治人,碩士研究生,主要研究方向?yàn)榍度胧较到y(tǒng)及應(yīng)用,xiang310.90@qq.com;
胡彧(1968-),女,漢族,山東歷城,博士,碩士生導(dǎo)師,研究方向?yàn)橹悄芑畔z測與處理、無線傳感器網(wǎng)絡(luò)、物聯(lián)網(wǎng)技術(shù)。學(xué)術(shù)兼職:中國計(jì)量測試學(xué)會理事、中國儀器儀表學(xué)會傳感器分會理事、中國水利學(xué)會水利量測技術(shù)專業(yè)委員會副主任委員、中國計(jì)算機(jī)學(xué)會高級會員、山西省青年科技工作者協(xié)會理事,huyutyut@163.com;
韓書1988-),男,漢族,湖北宜昌人,碩士研究生,主要研究方向?yàn)榍度胧较到y(tǒng)及應(yīng)用,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
文獻(xiàn)標(biāo)識碼:A
文章編號:1005-9490(2014)05-1013-04
收稿日期:2013-09-17修改日期:2013-10-10