狄三云,宋麗紅,張 鎧
(天津財經(jīng)大學(xué)理工學(xué)院信息科學(xué)與技術(shù)系,天津 300222)
課堂考勤在高校教學(xué)管理中至關(guān)重要。傳統(tǒng)的學(xué)生簽到方式是紙質(zhì)點名簽到,不僅低效繁瑣,占用上課時間,教務(wù)處的統(tǒng)計工作也極其繁重。新興簽到方式,如指紋簽到等,由于教室數(shù)量多,短期內(nèi)無法普及。因此,設(shè)計實現(xiàn)一個方便快捷、適合高校使用的簽到系統(tǒng)迫在眉睫。
智能時代的來臨讓更多的人將目光轉(zhuǎn)移到了手機客戶端,各種手機簽到系統(tǒng)層出不窮,例如,利用藍(lán)牙通訊技術(shù)實現(xiàn)課堂簽到,學(xué)生自行將個人信息發(fā)送至教師手機服務(wù)器端;基于人臉識別的手機簽到系統(tǒng),捕捉教室全景檢測人臉數(shù)量,保存圖片為佐證。然而,這些手機簽到系統(tǒng)均存在著缺陷:1)無法保證簽到信息與出勤學(xué)生的唯一對應(yīng)性,達(dá)不到簽到效果;藍(lán)牙技術(shù)面向短距離通信,不能確定學(xué)生當(dāng)前具體位置,無法保證學(xué)生是否出勤,也無法保證學(xué)生發(fā)送信息的準(zhǔn)確性。2)識別效率較低;由于手機硬件及技術(shù)的限制,人臉識別的簽到方式精確度較低,且人臉檢測技術(shù)有著一定的識別率,統(tǒng)計人臉數(shù)目極有可能出錯,反而加劇教師的工作量。
Android系統(tǒng)是一款基于Linux內(nèi)核的手機智能操作系統(tǒng),2007年開源后技術(shù)愈加成熟,硬件也愈加廉價,滿足了簽到系統(tǒng)技術(shù)和成本要求。Tesseract是惠普公司主持開發(fā)的OCR引擎,結(jié)合了Leptonica圖像處理庫,能讀取各種格式的圖像文件,識別出包括中文在內(nèi)40多種語言的文本,自帶字體訓(xùn)練庫,也可訓(xùn)練自己的字體庫,具有較好的識別效果。Android使用開源的、與操作系統(tǒng)無關(guān)的SQLite,是一款擁有獨立性和安全性等諸多優(yōu)點的輕量級數(shù)據(jù)庫,占用資源較低,是移動操作系統(tǒng)存儲數(shù)據(jù)的最佳選擇。
本文在Android系統(tǒng)中基于OCR引擎Tesseract對學(xué)生證上學(xué)號信息的識別展開了研究,設(shè)計完成了手機簽到系統(tǒng)。學(xué)生證件的照片保證了簽到信息與學(xué)生的唯一對應(yīng)性,Tesseract引擎在UNIV精度測試中的名列前茅則保證了識別率。
手機簽到系統(tǒng)實現(xiàn)智能記錄學(xué)生出勤,減輕教師和教務(wù)處統(tǒng)計學(xué)生考勤工作的負(fù)擔(dān)。系統(tǒng)需要具有以下特性:
1)系統(tǒng)應(yīng)具有良好的人機交互界面,符合用戶的使用習(xí)慣,便于推廣。
2)系統(tǒng)對學(xué)生證件的信息具有較高的識別率,方便、快捷、高效地實現(xiàn)學(xué)生簽到。
3)教師能夠方便地查看、管理學(xué)生信息,上報考勤信息。
系統(tǒng)由學(xué)生信息錄入、簽到、缺勤信息管理、考勤上報4個模塊組成。用例圖如圖1所示。
圖1 手機便捷簽到系統(tǒng)用例圖
1.2.1 學(xué)生信息錄入模塊設(shè)計
學(xué)生信息錄入模塊的流程如圖2所示。
該模塊主要進(jìn)行數(shù)據(jù)轉(zhuǎn)換和數(shù)據(jù)庫操作,教師需將班級信息文件存入手機客戶端。模塊功能包括導(dǎo)入、更新和刪除班級信息表,完成手機存儲卡內(nèi)文件夾及文件的逐層顯示,方便目標(biāo)班級信息表查找及導(dǎo)入。
信息導(dǎo)入模塊實現(xiàn)將文件中班級和學(xué)生信息按照設(shè)定字段插入SQLite數(shù)據(jù)庫。
圖2 學(xué)生信息錄入模塊順序圖
1.2.2 簽到模塊設(shè)計
簽到模塊是簽到系統(tǒng)的核心模塊,在完成學(xué)生信息錄入模塊中導(dǎo)入班級信息表功能后進(jìn)行。
光學(xué)字符識別技術(shù)(簡稱OCR)識別方法主要可分為2類:基于結(jié)構(gòu)特征的識別和基于統(tǒng)計特征的識別。本系統(tǒng)采用基于結(jié)構(gòu)特征的識別,基本識別過程如圖3所示。
圖3 基于結(jié)構(gòu)特征的OCR識別流程
系統(tǒng)調(diào)用為 Android提供的庫是 Tess-Two,將OCR識別過程融入其中,方便為Android項目使用。Tesseract不僅支持訓(xùn)練功能,且擁有自己的語言包,本系統(tǒng)使用Tesseract提供的英文字符訓(xùn)練文件eng.traineddata來進(jìn)行字符特征匹配。
該模塊調(diào)用手機攝像功能,對學(xué)生證件上的學(xué)號信息進(jìn)行捕捉,調(diào)用Tesseract類庫識別學(xué)號信息,告知用戶識別結(jié)果??紤]到相機的取景框太大,拍照時難免拍到多余信息,增加圖像預(yù)處理負(fù)擔(dān),給識別帶來一定難度,需在調(diào)用拍照功能時設(shè)置取景框大小,避免冗余信息的干擾。
簽到模塊基于人性化原則,在學(xué)生忘記攜帶證件的情況下,實現(xiàn)手動輸入學(xué)號進(jìn)行簽到,流程圖如圖4所示。
圖4 證件簽到模塊流程圖
1.2.3 缺勤信息管理模塊設(shè)計
圖5是缺勤信息管理模塊的順序圖。簽到完成,考勤信息被記錄到數(shù)據(jù)庫,該模塊將考勤記錄按照班級和出勤情況進(jìn)行分類,方便教師快速查看出勤情況。對于缺勤學(xué)生,該模塊賦予教師管理缺勤情況功能:編輯缺勤原因,存入數(shù)據(jù)庫;短信預(yù)警缺勤次數(shù)較多的學(xué)生,提醒出勤。
缺勤信息管理模塊同時具有數(shù)據(jù)轉(zhuǎn)換功能,可將缺勤信息導(dǎo)出手機數(shù)據(jù)庫,存儲到手機存儲卡,以備考勤上報模塊使用,實現(xiàn)考勤管理智能化。
圖5 缺勤信息管理模塊順序圖
1.2.4 考勤上報模塊設(shè)計
考勤上報模塊改進(jìn)了傳統(tǒng)的考勤管理方式,將傳統(tǒng)紙質(zhì)信息升級為電子信息,實現(xiàn)教務(wù)管理智能化。該模塊導(dǎo)入JavaMail開發(fā)包,無須考慮郵件協(xié)議的底層實施細(xì)節(jié),實現(xiàn)郵箱登錄和郵件發(fā)送。
考勤上報模塊允許用戶登錄郵箱,通過網(wǎng)絡(luò)通信協(xié)議返回對應(yīng)郵箱服務(wù)器的驗證結(jié)果。驗證成功,添加附件,附件是缺勤信息管理模塊中導(dǎo)出的缺勤表,輸入課程名稱作為郵件標(biāo)題,通過用戶設(shè)定的郵箱發(fā)送郵件。驗證失敗,返回錯誤原因。
該模塊需要手機訪問Internet網(wǎng)絡(luò),為了高效,應(yīng)使用WiFi或移動3G網(wǎng)絡(luò)通信。
考勤上報模塊順序圖如圖6所示。
圖6 考勤上報模塊順序圖
1.2.5 數(shù)據(jù)庫設(shè)計
本系統(tǒng)中主要是對數(shù)據(jù)庫進(jìn)行增刪改查操作,以及進(jìn)行數(shù)據(jù)庫與文件之間的數(shù)據(jù)轉(zhuǎn)換,主要包含2方面信息:班級信息和學(xué)生信息。E-R圖如圖7所示。
圖7 手機簽到系統(tǒng)E-R圖
系統(tǒng)將對2個表的操作分別封裝到類中,方便實現(xiàn)時的調(diào)用。對學(xué)生表的操作可分為:成批插入學(xué)生,刪除學(xué)生,修改簽到標(biāo)志,添加請假原因,顯示出勤或缺勤學(xué)生;對班級表的操作分為:插入班級,刪除班級及班內(nèi)學(xué)生信息,顯示所有班級。
學(xué)生信息錄入模塊實現(xiàn)了Excel表與SQLite數(shù)據(jù)庫的數(shù)據(jù)轉(zhuǎn)換,操作需導(dǎo)入JXL開發(fā)包。
點擊學(xué)生信息錄入模塊主界面右上角的圖像按鈕可以進(jìn)入瀏覽模塊界面。
該界面使用ListView逐層顯示手機文件系統(tǒng)。調(diào)用方法setOnItemClickListener為該ListView添加單擊事件:將Excel表中的學(xué)生信息轉(zhuǎn)存入SQLite。實現(xiàn)過程需創(chuàng)建Excel文件的輸入流,通過函數(shù)Workbook.getWorkbook()得到工作簿對象,調(diào)用 getSheet()得到工作表對象,獲取行列數(shù),結(jié)合sheet.getCell()和Cell.getContents()循環(huán)取出各行各列的值存入數(shù)組,將數(shù)組存入數(shù)據(jù)庫。返回主界面,彈出對話框,顯示導(dǎo)入成功。
學(xué)生信息錄入模塊的主界面使用ListView顯示已導(dǎo)入班級,每行添加“刪除”按鈕,并添加單擊事件:刪除過期班級和班內(nèi)學(xué)生信息。
簽到模塊的主界面顯示3個功能鍵:拍攝,簽到完成和學(xué)號輸入。
簽到完成需在手動簽到或證件簽到完成后進(jìn)行,根據(jù)簽到形成的臨時文件中的記錄修改數(shù)據(jù)庫中學(xué)生的簽到標(biāo)志。
學(xué)號輸入關(guān)聯(lián)手動簽到模塊,該模塊通過Text-Box獲取學(xué)生學(xué)號,點擊按鈕提交,在按鈕單擊事件中將記錄添加到臨時文件。
點擊拍攝鍵進(jìn)入簽到的核心模塊,圖8所示為拍攝模塊的主界面。在拍照時,該界面在中間設(shè)定有紅色線條的框為取景框,繪制大小限制取景范圍;設(shè)定左上角的框為前景框,根據(jù)取景框的大小繪制而成,系統(tǒng)是對前景框的內(nèi)容進(jìn)行識別。系統(tǒng)使用Surface-View控件和自定義的View類子控件OcrFinderView完成取景框的預(yù)覽,使用ImageView控件在前景框中實時顯示取景框的圖像信息。
圖8 拍攝模塊主界面
系統(tǒng)預(yù)覽圖像時,自動調(diào)用方法 PreviewCallback.onPreviewFrame(byte[]data,Camera camera),重載該方法完成自定義處理,該方法中data參數(shù)存儲預(yù)覽圖像的信息。重載中,使用構(gòu)造函數(shù)YuvImage(data,ImageFormat.NV21,w,h,null)將 data 中的內(nèi)容轉(zhuǎn)換成 YuvImage對象,調(diào)用 YuvImage.compressToJpeg(Rect rectangle,int quality,OutputStream stream)將YuvImage對象轉(zhuǎn)換成流,進(jìn)一步形成Bitmap對象,調(diào)用自定義方法cutBitmap()截取所需內(nèi)容用于前景框顯示,以便識別。Tesseract的識別率取決于圖片質(zhì)量以及訓(xùn)練庫的能力,需調(diào)用方法Bitmap.copy(Bitmap.Config.ARGB_8888,false)設(shè)置圖片質(zhì)量。
識別時,Tesseract必須有匹配庫,可從官方拷貝或自己訓(xùn)練,系統(tǒng)使用官方的英文匹配庫 eng.traineddata,該庫通過文件操作從項目的assets文件夾輸出到目錄/mnt/sdcard/tessdata中。識別過程需新建 TessBaseAPI對象 baseApi,調(diào)用方法 baseApi.init(TESS_PATH,“eng”)設(shè)定匹配庫的路徑和語言。需要識別的Bitmap類型的圖像是通過baseApi.setI-mage(bitmap)設(shè)定的,而識別結(jié)果是由 baseApi.getUTF8Text()方法根據(jù)初始化的語言獲取的字符串。為了提高識別率,直接調(diào)用Leptonica接口實現(xiàn)圖像的預(yù)處理。為提高系統(tǒng)的健壯性,最后必須調(diào)用baseApi.clear()釋放 bitmap,釋放 native內(nèi)存,調(diào)用baseApi.end()結(jié)束識別。
識別完成,彈出對話框顯示識別結(jié)果,如圖9所示,教師點擊OK功能鍵完成該生簽到。Ok鍵的單擊事件是將獲取的證件號存入臨時文件。
圖9 識別結(jié)果顯示界面
缺勤信息管理包含查看考勤信息模塊和導(dǎo)出缺勤表模塊。
查看考勤信息模塊由Spinner控件和Button按鈕以及ListView組成。其中,Spinner顯示已導(dǎo)入班級供教師選擇,ListView顯示查詢結(jié)果。2個Button分別用于顯示缺勤和出勤學(xué)生信息,信息根據(jù)簽到標(biāo)志分類,可調(diào)用 rawQuery(sqlstr,args)將結(jié)果存儲在Cursor對象,循環(huán)存入數(shù)組。
ListView添加單擊事件中用LayoutInflater類動態(tài)添加顯示控件,通過 getSystemService(Context.WINDOW_SERVICE)取得屏幕管理,新建PopupWindow對象,調(diào)用showAtLocation顯示屏幕,為按鈕添加單擊事件。短信預(yù)警的實現(xiàn)調(diào)用系統(tǒng)功能Uri.parse("smsto:"+phone)設(shè)置 Uri,構(gòu)造 Intent(android.content.Intent.ACTION_SENDTO,Uri)對象進(jìn)行跳轉(zhuǎn)。
導(dǎo)出缺勤表功能由Button按鈕實現(xiàn),按鈕單擊事件中使用Workbook類的工廠方法Workbook.create-Workbook()創(chuàng)建可寫入的工作薄對象;方法Workbook.createSheet則創(chuàng)建可寫入的工作表對象;構(gòu)造Label對象,調(diào)用addCell(label)循環(huán)添加單元格到工作表中,完成導(dǎo)出過程。
考勤上報分為郵箱登錄模塊和發(fā)送郵件模塊。郵箱登錄模塊界面通過TextBox控件獲取登錄的用戶名和密碼,點擊右下方“登錄”按鈕進(jìn)行服務(wù)器驗證?!暗卿洝卑粹o的單擊事件通過Session.getDefault-Instance()獲取session對象,收集客戶端與郵件服務(wù)器建立網(wǎng)絡(luò)連接的會話信息。調(diào)用session.getTransport("smtp")獲取實現(xiàn)SMTP協(xié)議的郵件發(fā)送對象Transport,執(zhí)行 Transport.connect()與服務(wù)器創(chuàng)建連接,返回驗證結(jié)果。
驗證成功,進(jìn)入發(fā)送郵件主頁面,頁面有兩個功能按鈕:添加附件和發(fā)送。使用ListView顯示存儲卡信息,單擊事件調(diào)用自定義方法addAttachment(String filePath)實現(xiàn)附件的添加:創(chuàng)建MimeBodyPart實例,通過set系列方法設(shè)置實例屬性,如MimeBodyPart.setFileName(MimeUtility.encodeText(fds.getName(),"GBK","B"))設(shè)置編碼格式,使附件正常顯示中文;調(diào)用addBodyPart()添加附件到MimeMultipart實例。
點擊目標(biāo)附件跳轉(zhuǎn)至主頁面,ListView顯示添加結(jié)果。輸入郵件主題,點擊“發(fā)送”按鈕,獲取會話信息session對象,創(chuàng)建Message實例,通過Message的set系列方法設(shè)置郵件消息的內(nèi)容,調(diào)用 Transport.send(Message)方法實現(xiàn)郵件發(fā)送。郵件發(fā)送完畢,循環(huán)調(diào)用 multipart.removeBodyPart(i)刪除所有附件,釋放系統(tǒng)資源。
系統(tǒng)在Android平臺下,調(diào)用 Tesseract類庫,設(shè)計實現(xiàn)了通過智能手機攝像頭,采集證件信息,識別學(xué)生學(xué)號,記錄學(xué)生考勤的應(yīng)用,方便教師記錄考勤,節(jié)省了課上時間,減少教務(wù)處考勤統(tǒng)計的工作量,實現(xiàn)了便捷高效的高校考勤管理系統(tǒng)。
本系統(tǒng)還可以擴展應(yīng)用到企業(yè)內(nèi)部員工會議、上班簽到等需現(xiàn)場鑒別身份信息的業(yè)務(wù)中,系統(tǒng)不受硬件設(shè)備、空間以及預(yù)算的限制,通過智能移動終端為人們的工作和生活提供了更好的服務(wù)。
[1] 王國輝,李偉.Android開發(fā)寶典[M].北京:機械工業(yè)出版社,2012:6-19.
[2] 張志杰.智能手機操作系統(tǒng)的競爭與發(fā)展研究[D].北京:北京郵電大學(xué),2012.
[3] 吳國平.數(shù)字圖像處理原理[M].武漢:中國地質(zhì)大學(xué)出版社,2007.
[4] 戈振興,邊靜.Android體系結(jié)構(gòu)剖析[J].科技信息,2011(12):609.
[5] 高峰.二維條形碼手機識別系統(tǒng)的設(shè)計與實現(xiàn)[D].北京:北京郵電大學(xué),2008.
[6] 胡偉.Android系統(tǒng)架構(gòu)及其驅(qū)動研究[J].廣州廣播電視大學(xué)學(xué)報,2010,10(4):96-101.
[7] 姚昱旻,劉衛(wèi)國.Android的架構(gòu)與應(yīng)用開發(fā)研究[J].計算機系統(tǒng)應(yīng)用,2008,17(11):110-112.
[8] 朱虹.數(shù)字圖像處理基礎(chǔ)[M].北京:科學(xué)出版社,2005.
[9] 章毓晉.圖像分割[M].北京:科學(xué)出版社,2001.
[10] Chang Shyang-Lih,Chen Li-Shien,Chung Yun-Chung,et al.Automatic license plate recognition[J].IEEE Transactions on Intelligent Transportation Systems,2004,5(1):42-53.
[11] Li Gang,Zeng Ruili,Lin Ling.Research on vehicle license plate location based on neural networks[C]//Proceedings of the 1st IEEE International Conference on Innovative Computing,Information and Control.2006,3:174-177.
[12] You Dong-Hoon,Noh Bong-Nam.Android platform based Linux kernel rootkit[C]//Proceedings of the 6th IEEE International Conference on Malicious and Unwanted Software.2011:79-87.
[13] Shi Meng,F(xiàn)ujisawa Y,Wakabayashi T,et al.Handwritten numeral recognition using gradient and curvature of gray scale image[J].Pattern Recognition,2002,35(10):2051-2059.
[14] Govindan V K,Shivaprasad A P.Character recognition:A review[J].Pattern Recognition,1990,23(7):671-683.
[15] Ableson F,Collins C,Sen R.Unlocking Android[M].Manning Publications,2009.
[16] Tian Jipeng,Kumar G H,Chethan H K.Chinese numeral recognition using Gabor and SVM[C]//Proceedings of the 3rd IEEE International Conference on Emerging Trends in Engineering and Technology.2010:202-206.