陳南南 李鴻翔 林聰明 彭榮超 廈門大學嘉庚學院信息科學與技術學院
關鍵字: 圖書館 座位管理 預約 空座檢測
高校的圖書館是重要的學習空間,特別是考試之前,高校學生日益增多,而校園中的圖書館座位資源有限,不合理占座的現象已經司空見慣。目前各高校圖書館的藏書資源、目錄資源等都實現了計算機管理,唯獨座位資源還停留在人工管理階段。
為了合理管理圖書館座位資源,部分高校開發了圖書館座位管理系統,但這些系統在使用過程中也存在以下一些問題。
(1)占座問題。目前的圖書館管理系統大多是通過校園一卡通或其他身份驗證方式確定讀者身份,隨后通過圖書館的觸摸屏設備或計算機查詢圖書館座位分布和實時使用情況,根據顯示屏顯示的座位閑置情況選擇座位,讀者流量較多時也可選擇自動排座。這種方式一定程度上解決了圖書館座位無序就坐的問題,但也引發了新的“占座”問題。部分讀者在刷卡選座后離開圖書館長時間未回,甚至出現替人刷卡占座的現象,導致真正有需求的讀者無法使用圖書館座位資源。
(2)成本高。為了解決圖書館座位預約后,座位空置“占座”問題,有的高校使用人工的方式定時巡查座位,長時間空閑的座位將被回收。這種方式增加了人力成本。在有的研究中,通過增加了紅外線感應器對座位情況進行檢測 。這種方式需要對所有座位進行改造,增加了部署的難度和成本。
(3)離館與短時離座難以區分
無論是人工方式或是自動方式,都需要對長時間無人的座位進行回收,但如何區分離館和短時離座也是一個難題。若使用人工方式巡查回收,工作人員無法長時間駐留座位附近判斷用戶是離館還是短時離座,經常會造成誤判,引發誤會和矛盾。有的高校通過校園卡預約后可使用圖書館座位資源,每次有效時間為兩小時。繼續使用,須在下一時段前30分鐘內進行續約,超時后座位會被自動釋放。一些認真學習的學生通常會忘記按時續約,造成座位被強行回收。
針對以上情況,本文提出了一種基于攝像頭空座檢測的圖書館座位管理系統。
主要包括以下功能:
(1)座位信息實時檢測
統帶有網絡攝像頭等圖像抓取設備,繼而將圖像傳至服務器再經過圖像識別算法處理,將圖書館的每一個位置的情況實時反饋到前端網站上,用戶根據空座信息進行座位預訂。
(2)座位預訂功能
用戶登錄網站根據圖書館座位實時狀態,可以直接在網站上進行預訂,預訂
后在規定時限內到達圖書館,若用戶未在時限內抵達圖書館,將取消預約并歸還座位。
(3)續約功能
在圖書館期間,若臨時有事需要離開,用戶可以根據自己需要離開的時間,
選擇是否續約,若不續約直接離開,系統只為用戶保留座位10分鐘。選擇續約,系統將為用戶重新預訂該位置,但回到座位后需手動解除續約,超過30分鐘后“不回來”或者“不解除續約狀態”都視為放棄座位。極大程度地提高了系統的靈活性。
(4)查詢及修改功能
預訂好座位后,因故無法到達圖書館,可以取消預約。也可查詢當前預約情況。
(5)違規記錄
對于預約后,無故未到達圖書館或惡意預約占座等行為記錄至數據庫,同時制定規則限制其在某段時間內使用預約功能。

圖1 系統功能示意圖
如圖2所示,本文提出的圖書館座位管理系統包括攝像頭模塊、服務器模塊、客戶端模塊、空座檢測模塊。
服務端模塊通過接收攝像頭拍攝傳回的圖像進行空座檢測,更新數據庫信息,并處理用戶的預約和查詢請求。
云服務器使用linux centos版本系統運行服務端程序,與攝像頭之間的通信不斷的通過websocket定時收發數據,攝像頭通過無線wifi模塊進行數據的發送。
在socket服務器框架中,通過設置客戶端連接對應一個Connection對象,完成對象的onMessage、onClose等回調,同時提供了向客戶端發送數據send接口與關閉連接close接口,以及其它一些必要的接口。在此基礎上通過tcp協議進行數據的傳輸,服務端將接收到的數據信息通過相關的算法進行處理和分析,存儲至對應的mysql關系數據庫表中,服務端基于ngnix環境下運行,使用php語言對客戶端開放各個請求接口,返回相應的請求數據,對于部分長時間不改變的數據而言,會使用緩存集群redis或者memory進行數據上的緩存,提高服務端的數據返回速度,客戶端數據的接收速率,將速率提升至毫秒級返回,提升用戶體驗水平。
同時,在用戶數據請求量龐大時,必須進行高并發處理,通過反向代理達到負載均衡,即將工作任務分發至各個服務器,使得每個服務器能正常運行,否則系統會崩潰重啟。對于服務端與客戶端之間交互數據的安全性,各個接口請求的數據,進行MD5的32位不規則加密,達到防篡改的目的。
客戶端是用戶預訂和查詢的交互界面,為了方便使用,分別設計了PC端頁面和基于Android的APP客戶端。
用戶可以通過客戶端進行座位的查看、篩選、預訂。對于已經進行了座位預訂的用戶,同樣可以查看自己所預訂位置的信息,進行續約、退訂、改選座位等操作。除主要的預訂座位功能,用戶可以查看到圖書館不同時段的人數分布情況、圖書館近日新聞等信息,同時可以對該系統進行留言反饋。
Android端采用了Retrofit+RxJava + OkHttp的網絡框架 ,其中Retrofit 負責請求的數據和請求的結果,使用接口的方式呈現。OkHttp 負責請求的過程,RxJava 負責異步,以及各種線程之間的切換。圖片加載使用Glide圖片加載庫, 服務端返回圖片鏈接url, 用Glide加載顯示圖片。Android界面如圖2所示。

圖2 Android客戶端界面
空座檢測模塊負責將下位機攝像頭傳回服務器的圖像信息通過圖像識別算法轉化成座位信息并存入數據庫。
首先使用網絡攝像頭拍攝現場圖像,通過FTP發送到服務器,服務器使用shell腳本將圖片拷貝到圖像識別工程中,工程將檢測得到的座位信息存放在數據庫,供客戶端提取。
識別工程中的算法通過“不同光照條件下的閾值選擇”、“感興趣區域”、“標記識別”、“移動物體檢測”以及一些邏輯程序來判斷各個座位的實時狀態。
(1)不同光照條件下的閾值選擇
針對同一個環境,在不同光照強度下采集到的圖片需要有合理的閾值去處理,才能夠識別出標記,以及檢測到物體移動。在本系統采用的方案是,先采集優越環境下不同光照強度下的圖片,采集圖片四個角落各取4個像素點共16個像素點計算平均灰度值,再找出適合的閾值,將它們的對應關系制成表格。當使用時,對拍攝到的圖片同樣進行平均灰度值的計算,再查表選擇閾值。
(2)有效區域
采集到一張圖片并不是圖中所有信息都是有效信息,將圖片中有效區域“裁剪”出來,即將座位的部分提取出來,減少后續算法的計算量,提高算法效率,如圖3所示,將座位從整張圖片中提取出來。

圖3 有效區域提取
(3)標記識別
為了判斷是否空座有多種方法,比如識別人體輪廓,識別人臉等,這些識別精確率高,但算法復雜度大。本系統僅需檢測空座信息,無需識別具體用戶。因此在座位(或桌面也可)上放置標記,利用ORB(Oriented FAST and Rotated BRIEF)特征檢測與匹配來尋找圖片中椅子上的標記,若無標記則表明非空座,識別效果如圖所示。
ORB算法是基于FAST特征檢測與BRIEF特征描述子匹配實現,并在它們原來的基礎上做了改進與優化[4]。
FAST特征點是沒有尺度不變性的,所以通過構建高斯金字塔,然后在每一層金字塔圖像上檢測角點,來實現尺度不變性。ORB選擇了BRIEF作為特征描述方法,但是BRIEF是沒有旋轉不變性的,所以需要給BRIEF加上旋轉不變性,把這種方法稱為“Steer BREIF”。

圖4 空座標記識別
(4)移動物體檢測
用標記識別方法可以判斷空座,但有些用戶會使用書包等物品遮蓋標記,從而造成座位有人的假象,而本人長時間離館,造成資源浪費。因此,增加判斷遮擋物是否是移動物體的方式區分人體和占座物品。系統使用改進的幀間差分法來判斷圖片區域內是否存在移動物體。
首先采集3幀圖像,其次對圖像進行邊緣提取得到連續的3幀邊緣圖像, 然后對兩組相鄰的邊緣圖像差分運算,也就是進行3幀差分,把兩次差分后的圖像再進行“與”運算,然后根據圖像信息使用自適應迭代閾值的計算方法進行二值化處理,最后通過圖像形態學處理(腐蝕、膨脹等)完成確定移動物體的區域 。
(5)空座檢測模塊流程
最后通過一些簡單邏輯結合以上技術,從而使整個識別流程合理運作,提取出正確、有效的座位信息。
首先,開啟所有座位的標記檢測及運動物體檢測,只有當一個座位的標記被覆蓋以及存在運動物體兩個條件同時成立時,并且兩個條件在將來20秒內沒有發生改變才判斷該座位此時有人使用,如圖5所示。保持20秒不改變的理由是防止路過現象。
當一個座位被預訂或者用戶選擇了續約座位,將關閉該座位的標記檢測及運動檢測,直到用戶通過刷卡簽到和返回座位,將重新打開該座位的檢測。

圖5 入座狀態檢測過程
若一旦一個座位的狀態從被使用變為無人使用,則開啟計時,超出10分鐘則視為離開即放棄座位。在10分鐘內一旦該座位的狀態從無人狀態轉換為被使用,則再將來20秒中的檢測內一旦出現該座位無人,則判定為“路過”,不會關閉10分鐘的離開計時。如20秒內的檢測中一直保持被使用狀態,則表示用戶短時離開并回到座位了,關閉10分鐘的離開計時,用戶繼續使用座位。
本文通過分析目前高校圖書館管理系統中存在的一些問題,設計和實現了一個通過攝像頭傳輸的圖像進行空座檢測從而進行圖書館座位管理的系統。系統的主要優點包括:第一,無需人工,自動檢測空座;第二,使用網絡攝像頭,每個攝像頭可檢測多個座位,無需對圖書館線路進行過多改造,成本低;第三,功能設計人性化,暫時離座可保留座位。當然,一切的管理制度都離不開用戶的遵守,良好的學習閱讀環境需要系統和人的共同努力。