王杰 黃才林 康珠卓瑪
摘 要:隨著移動互聯網技術的飛速發展以及網絡覆蓋面積的不斷擴大,人們對于智能手機的依賴日益加深,生活的各個方面都變得更加方便快捷。定位及導航,是當今世界人們的普遍需求,基于GPS系統的室外定位已經非常成熟,但是在室內環境下,由于導航信號衰減太快,衛星定位就無法使用,導致如何定位成為一個難點問題。文章研究了基于OCR技術的室內定位系統,可以在GPS信息弱、環境復雜的大型室內場所提供較為精準的定位服務。
關鍵詞:Android;室內定位;OCR技術;APP
隨著我國經濟的不斷發展、人民生活水平的日益提高,各種室內場所也趨向于大型化、復雜化,例如圖書館、醫院、大型超市、高鐵站、地下車庫等,在大型室內環境下的定位需求也隨之產生。不同于GPS、北斗衛星定位系統等室外定位系統,室內定位系統是移動應用領域的一大挑戰。
基于OCR技術的室內定位系統,是通過建立室內的標志物上的文字信息與其對應坐標的數據庫,使得用戶在GPS信號弱的室內,也可以享受較為精確的定位服務。通過手機上的APP對室內標志物的文字信息進行拍照,如店鋪名、路牌、展品介紹等,APP中接入的OCR識別引擎會識別圖中的文字信息,然后傳輸到服務器,在數據庫中對文字信息進行檢索和匹配,匹配成功后返回坐標,并在APP上以地圖和坐標點的形式顯示位置。
1 室內定位APP的系統分析
1.1 系統架構
軟件的架構需要UI組件、UI處理組件、百度OCR引擎、高德地圖SDK、數據訪問組件等。UI組件用來顯示用戶界面,百度OCR引擎提供文字識別服務,高德地圖提供地圖源,軟件通過數據訪問組件和數據庫交換信息。此外,還需考慮到通信、運行管理以及系統安全性等方面的問題[1]。軟件架構如圖1所示。
1.2 主要功能模塊
室內定位APP主要包括6大功能模塊。
(1)注冊模塊:注冊方式為手機號或者郵箱注冊,點擊獲取驗證碼來驗證手機號或者郵箱的正確性,防止惡意注冊或錯誤注冊。驗證成功后需要設置登錄密碼,填寫兩次且兩次密碼相同才算注冊成功,然后自動登錄系統,無需再次輸入賬號和密碼,同時系統將注冊信息傳輸到服務器端,插入用戶表中。
(2)登錄模塊:用戶需要輸入賬號和密碼,如果不記得密碼的話可以點擊“忘記密碼”,驗證手機號或者郵箱后可以重置密碼。點擊登錄后,登錄信息會傳輸到數據庫中進行比對,完全正確才能進入主界面。
(3)設置模塊:在主界面中點擊齒輪圖標后會進入設置界面,可以在設置中選擇修改密碼、地圖管理、是否允許管理員進行消息推送、是否允許WiFi下自動下載最新版本軟件、清除緩存以及退出登錄等功能。其中,地圖管理是指可以下載指定城市的地圖,這樣可以節省流量,不必每次打開軟件后都要聯網接收地圖資源。
(4)OCR識別模塊:點擊頂部搜索欄右側的相機圖標后,軟件會打開系統相機進行拍照,然后自動調用百度OCR引擎進行識別,識別出的文字顯示出來后,用戶可以選擇手動修改文字,修改好后上傳至服務器,或者直接上傳。
(5)地圖模塊:使用高德提供的地圖,根據服務器返回的坐標信息,在地圖上顯示當前位置。
(6)歷史記錄模塊:在主界面點擊時鐘圖標后會進入歷史記錄界面,可以看到用戶定位的記錄,包括時間、地點和OCR識別的文字信息[2]。
1.3 系統流程
打開軟件后點擊搜索框右側的相機圖標,打開手機相機,拍攝照片后,系統會調用百度OCR引擎識別照片中的文字,識別失敗會提示用戶重新拍攝清晰的照片,識別成功后系統會將識別出的文字顯示出來,讓用戶檢查是否正確,若有錯誤可以選擇手動修改文字,無錯誤則直接上傳至服務器,然后在數據庫中進行查詢和匹配,匹配失敗就會返回到拍照界面,提示用戶重新選擇標志物,匹配成功則會返回坐標值,然后系統調用高德地圖源,顯示室內地圖和坐標點,一次室內定位完成。
2 主要技術實現
2.1 數據庫設計
本系統在服務器端的MySQL數據庫中創建數據庫表,根據不同的數據格式,將數據分為用戶登錄數據、用戶行為數據以及位置坐標數據3大類進行存儲。
用戶登錄數據包括用戶的登錄賬號和密碼等信息,由于這類數據相當重要,不應以明文的方式存儲在數據庫中,通過使用MySQL的AES_ENCRYPT函數加密數據,因為加密后的數據比較難看,所以再使用to_base64函數轉碼數據,將加密后的用戶信息存儲在數據庫中。
用戶行為數據包括用戶使用該軟件進行室內定位的時間、OCR識別出的文本、用戶修改后的文本以及定位后的位置坐標。該數據內容供用戶在歷史記錄中查看,用戶可自行刪除。
位置坐標數據包括室內環境下特征物上的文字信息以及對應的坐標值。通過匹配用戶上傳的字符串,返回坐標,用于在手機客戶端顯示當前所在位置并在地圖上進行標注[3]。
2.2 調用OCR接口
該軟件使用百度的OCR進行文字識別,百度的OCR服務免費,不過每天有次數的限制,但對于學生項目來說夠用。
首先,在百度AI開放平臺中進入控制臺,找到文字識別的產品服務,創建應用后填寫相關信息,獲得AK、SK。然后,下載license文件,在項目中如果直接用AK、SK明文調用百度的OCR,很不安全,可能會被別人反編譯之后獲得用戶的AK、SK,而license文件集成了AK、SK,放在項目中可以防止別人破解。之后,再下載百度OCR的Android SDK,添加進項目中。準備工作完成后就可以開始調用百度的OCR接口了。在需要進行識別的頁面所在的文件中創建根據License文件初始化OCR實例的函數,并在onCreate()方法中調用。接下來新建一個可以存放OCR的識別方法的類RecognizeService,在onActivityResult方法中,調用剛剛新建的類的recAccurateBasic方法,此方法接收3個參數,分別是context、拍照獲取的圖片路徑和在RecognizeService類中定義的監聽接口,在onResult方法中,返回的result字符串即為識別結果的json字符串,只需要對JSON進行解析就能得到識別結果[4]。
2.3 獲取室內地圖服務
該軟件使用高德提供的地圖服務。在高德開放平臺中進入控制臺,創建應用,獲取API KEY,下載Android平臺下的地圖SDK文件,將解壓后的jar包導入工程中。開發環境配置好后,在工程的“AndroidManifest.xml”文件中添加用戶KEY和所需要的權限,在布局xml文件中添加地圖控件,創建地圖Activity,管理地圖生命周期。
3 結語
本文基于Android平臺設計并開發了基于OCR技術的室內定位APP,為室內定位提供了一個新的解決方案。現階段比較成熟的室內定位方案,是需要基礎設施的,比如室內部署密集的接入點或者基站,例如各種傳感器,信號接收裝置,信號發射器等,成本較高,且需要維護設備。而基于OCR技術的室內定位方案的成本是很低的,并不需要各種用來定位的設備,較為麻煩的只是第一步,建立坐標庫。將室內標志物上的文字信息提取出來,并建立坐標庫。這的確是不小的工作量,但是隨著OCR技術和人工智能技術的發展,未來可能只需用無人機將室內所有場景拍攝下來,然后系統便可以自動整理出圖片并匹配其對應的坐標,導入數據庫中,這樣就可以大大降低工作量,甚至可以打開攝像頭,通過錄像的方式來實現室內的實時定位。作為一種無需傳感器的室內定位方案,它可以給我們提供更多的創新想法和研究方向。
[參考文獻]
[1]朱懷中.基于Android的手機OCR識別技術設計與實現[J].電子科技,2012(5):45-48.
[2]王楊,趙紅東.室內定位技術綜述及發展前景展望[J].測控技術,2016(7):1-3.
[3]紀孝楨.基于Android平臺的自習室信息服務系統的設計與實現[D].武漢:華中科技大學,2013.
[4]曹曉燕,王辰,郭朝霞.基于Android的旅游助手APP的設計與實現[J].科技創新與應用,2018(28):66-68.