摘要:針對線上教學(xué)中,教師無法即時提供課上考勤情況以及及時保存考勤結(jié)果的問題,作者以雨課堂為例,使用Python編程語言開發(fā)了一個基于PC端的實時考勤軟件系統(tǒng)。以期該考勤系統(tǒng)能夠彌補(bǔ)在線教學(xué)軟件考勤的不足,進(jìn)而更好地滿足線上教學(xué)考勤的需求。
關(guān)鍵詞:線上教學(xué)軟件;考勤;Python
中圖分類號:TP391.1 文獻(xiàn)標(biāo)識碼:A 論文編號:1674-2117(2024)20-0000-04
引言
在數(shù)字化時代,在線教學(xué)已經(jīng)成為一種新的教學(xué)常態(tài),因而也催生了大量的在線教學(xué)軟件,在高校中用于在線教學(xué)的常用軟件有雨課堂、騰訊會議、QQ群課堂等。
在教學(xué)管理中,出勤考核是學(xué)生成績考核的重要組成部分。而大多數(shù)在線教學(xué)軟件主要提供課后考勤數(shù)據(jù),可以在課后查看學(xué)生們的到課情況,如雨課堂、騰訊會議導(dǎo)出的Excel課堂數(shù)據(jù)表,可查看上課簽到時間、離開時間、在線時間等。但課上考勤,往往只能提供到課人數(shù)、到課人員姓名查看,無法即時提供上課班級總體考勤情況,這與考勤要求存在一定的差距。主要問題是:①無法提供上課時學(xué)生到課細(xì)節(jié),如剛開始上課時,未到課學(xué)生姓名無法快速獲取,且難以及時通知提醒其上課;②導(dǎo)出的考勤結(jié)果文件需要手工處理才能把數(shù)據(jù)記錄在給定格式的記錄表中,考勤效率較低。
針對上述的線上教學(xué)考勤問題,筆者以雨課堂在線教學(xué)軟件為例,介紹基于PC端的在線教學(xué)軟件實時考勤數(shù)據(jù)處理系統(tǒng)開發(fā)。該系統(tǒng)能夠?qū)崿F(xiàn)雨課堂在線教學(xué)軟件的在線考勤,實時反饋缺課、早退等學(xué)生姓名,并將考勤數(shù)據(jù)自動記錄到給定格式的記錄文檔中,減少考勤工作量,提高考勤的效率。
系統(tǒng)設(shè)計
1.技術(shù)路線分析
大部分在線教學(xué)軟件都有一個呈現(xiàn)當(dāng)前在線人員的界面,如騰訊會議在教學(xué)界面上點擊“點擊查看簽到詳情”,在窗口右側(cè)可看到當(dāng)前已出席和未出席的人員名稱。雨課堂也有類似查看當(dāng)前人員的窗口設(shè)置,但雨課堂當(dāng)前在線人員界面顯示的內(nèi)容并非文本,無法拷貝、粘貼,只能通過截取有姓名內(nèi)容的圖片,利用圖片文本識別方法將姓名文字識別,然后再進(jìn)行簽到考勤處理。因此,本考勤系統(tǒng)以保證識別精度、提高識別速度為目標(biāo),選擇使用Python強(qiáng)大的圖像處理庫,如OpenCV、PIL和scikit-image等,對截圖進(jìn)行處理操作,然后通過百度AI開放平臺接口,調(diào)用圖片文字識別工具實現(xiàn)在圖片中提取文本信息的功能,最后在識別的文本信息中提取姓名文字進(jìn)行考勤處理,將考勤結(jié)果寫入給定格式的考勤表格中。
2.系統(tǒng)架構(gòu)設(shè)計
根據(jù)考勤操作的具體要求,從考勤的實際操作過程出發(fā),進(jìn)行系統(tǒng)架構(gòu)設(shè)計(如圖1)。展示層是用戶與系統(tǒng)之間進(jìn)行數(shù)據(jù)傳遞和互動操控的接口;業(yè)務(wù)層是系統(tǒng)的核心,用于實現(xiàn)班級管理和考勤統(tǒng)計的功能;數(shù)據(jù)層則實現(xiàn)記錄文件的保存及訪問。
3.系統(tǒng)模塊設(shè)計
系統(tǒng)模塊結(jié)構(gòu)如圖2所示,其中包含班級管理、考勤管理2個模塊。
班級管理模塊中,添加班級是建立班級與考勤記錄表之間的關(guān)系,修改、刪除班級則是對已有的班級與考勤記錄表關(guān)系進(jìn)行修改或刪除。
考勤管理模塊的主要功能是截取在線教學(xué)軟件當(dāng)前在線人員的界面,然后將截圖上的文字信息進(jìn)行識別,提取姓名。上課考勤是在剛開始上課時進(jìn)行考勤,并將已到課的考勤結(jié)果記錄到數(shù)據(jù)文件上;課中考勤則是在課間的某個時間進(jìn)行考勤,并將考勤時刻的遲到人員、早退人員寫入及更新原來的上課記錄文件。
系統(tǒng)實現(xiàn)
考勤管理是系統(tǒng)的核心,具體的考勤流程圖如圖3所示。
1.截圖實現(xiàn)
當(dāng)上課學(xué)生人數(shù)較多時,在線教學(xué)軟件當(dāng)前在線人員的界面需要滾動才能查看所有上課學(xué)生的信息,因此要采用滾動截屏的方法進(jìn)行截圖,其實現(xiàn)步驟為[1]:滾動界面→圖片截取→圖片拼接點辨識→圖片拼接。滾動界面使用pynput模塊的滾動功能實現(xiàn)。圖片截取用Qt的截屏方法實現(xiàn)。圖片拼接點辨識是滾動截屏生成完成截屏圖片的關(guān)鍵,通過比較截屏所得的相鄰圖片,尋找下一張圖片在前一張圖片的相同部分位置,并記錄下來。但有些截屏區(qū)域包含不滾動部分,即所有圖片都有相同的頭部或邊框,不能直接用截取的圖片來尋找拼接點,需要比較多張圖片來去除相同部分的影響。最后將圖片轉(zhuǎn)為數(shù)組,通過數(shù)組實現(xiàn)圖片拼接。
2.圖片處理
截屏拼接得到的圖片,還要通過一定的處理后才能進(jìn)行文字識別。不同的班級上課的人數(shù)不同,當(dāng)前在線人員的界面截取圖片長度的變化也較大。查閱百度AI開放平臺官網(wǎng)可知[2],圖像數(shù)據(jù)base64編碼后進(jìn)行urlencode,要求base64編碼和urlencode后大小不超過10M,最短邊至少15px,最長邊最大8192px。
文字識別正確率與截圖圖片長邊的長度有很大的關(guān)聯(lián),當(dāng)截圖圖片長邊太大時,文字識別正確率會下降,甚至無法識別。通過對在線人員的界面截屏圖片進(jìn)行試驗比較,筆者發(fā)現(xiàn)當(dāng)圖片長度不超過1500px時,文字識別準(zhǔn)確率與識別速度兩者可達(dá)到較好的平衡。因此,在進(jìn)行識別之前,要先檢查截圖長邊的像素,若大于1500px,就將圖片分割,然后識別結(jié)果并合并。
3.文字識別
百度AI開放平臺免費開放通用文字高精度識別,識別準(zhǔn)確率及使用次數(shù)完全可以滿足日常使用要求,調(diào)用設(shè)置也比較簡單,本系統(tǒng)使用了百度AI開放平臺提供的OCR API接口進(jìn)行在線識別。首先,安裝requests庫以發(fā)送HTTP請求,在百度AI開放平臺上創(chuàng)建應(yīng)用并獲取API Key、Secret Key等信息用于身份認(rèn)證和接口調(diào)用。其次,在程序中導(dǎo)入所需的模塊和函數(shù),傳入圖片對象,加載圖片并轉(zhuǎn)換為Base64編碼。最后,構(gòu)造POST請求參數(shù)后發(fā)送POST請求得到返回結(jié)果。[3]
4.文字處理
在整理考勤記錄前,百度AI開放平臺返回的識別文字要經(jīng)過以下處理。
①姓名提取。在雨課堂中,當(dāng)學(xué)生以實名及學(xué)號注冊賬號加入班級后,課上的成員列表會顯示其姓名與學(xué)號。在對圖片識別文字后,就得到了姓名與學(xué)號的文本信息。
②姓名糾錯。系統(tǒng)對識別后得到的姓名設(shè)置了糾錯環(huán)節(jié),其操作是將識別得到的姓名在點名冊中搜索,獲得未搜索到結(jié)果的姓名、與點名冊中沒有匹配項的姓名,通過difflib.get_close_matches()模塊計算文本相似度,從中找出最接近的匹配對,顯示于窗口,提示糾正修改為正確的名字。
5.考勤記錄
根據(jù)之前設(shè)置的考勤類型,如果是上課考勤,將考勤結(jié)果寫入新的一列,如果是課中考勤,則修改原來的考勤結(jié)果,處理流程如圖4所示。
系統(tǒng)運(yùn)行
系統(tǒng)主界面如圖5所示,可通過主界面設(shè)置及選擇考勤班級和考勤模式。點擊“開始檢查”出現(xiàn)截圖框選提示并選擇截圖區(qū)域(如下頁圖6),即可通過鼠標(biāo)滾輪滾動進(jìn)行截圖,在截圖完成后,系統(tǒng)自動進(jìn)行圖片文字識別。
當(dāng)圖片文字識別完畢后,彈出姓名糾錯對話窗口(如下頁圖7、圖8),窗口左側(cè)為圖片文字識別獲取但在點名冊中搜索不到的姓名,右側(cè)為通過匹配算法得到的推薦正確姓名??紤]到匹配算法可能存在誤差,因此將窗口右側(cè)內(nèi)容設(shè)置為可以編輯。當(dāng)姓名糾錯完成后,點擊窗口“確定”按鈕,則彈出考勤結(jié)果對話框,確定后即可把考勤結(jié)果寫入數(shù)據(jù)記錄文件。
結(jié)語
上述開發(fā)的雨課堂實時考勤數(shù)據(jù)處理系統(tǒng),可以快速檢查線上課堂在線人員,實時獲取上課學(xué)生考勤情況,并將考勤結(jié)果自動記錄在指定記錄文件中,提高了考勤效率。該系統(tǒng)在進(jìn)一步改進(jìn)后,還可以應(yīng)用于騰訊會議、QQ群課堂等常用線上教學(xué)軟件的實時考勤。
參考文獻(xiàn):
[1]Roll_screenshot Contributors.用Python實現(xiàn)的滾動截屏.[2024-02-03].https://github.com/fandesfyf/roll_screenshot.
[2]百度AI開放平臺.API文檔——通用文字識別(高精度版).[2024-02-03].https://ai.baidu.com/ai-doc/OCR/1k3h7y3db.
[3]百度AI開放平臺.API調(diào)用指南.[2024-02-03].https://ai.baidu.com/ai-doc/REFERENCE/Lkru0zoz4.