孟紫騰,高佳歡,朱學森,牛建輝,洪海慧,張 釗
(北華航天工業學院,河北 廊坊 065000)
二維碼又稱二維條碼,常見的二維碼為QR Code,是近年來一種非常流行的編碼方式。相較于線性一維碼來說,二維碼能存儲更多的數據類型的信息,可靠性高、存儲可擴性強、成本低廉、保密性和糾錯能力較好[1]。它的橫縱兩個方向都存有字母、漢字、照片、指紋等各種信息,是由一系列黑白點按照一定的規律構成的幾何圖形。每一個QR碼字符對應版本1~40,每個版本對應的尺寸為21×21~177×177。其中,版本1的尺寸為21模塊×21模塊,版本2的規格為25模塊×25模塊,每一個版本比前一個版本每邊增加4個模塊,依次類推,直到最高版本40為177×177模塊。最高版本40可容納多達1 850個大寫字母或1 108個字節或2 710個數字或500多個漢字,容量是普通條碼的幾十倍。QR碼的糾錯能力分為4個級別。其中L級約可糾錯7%的數據碼字,M級可糾錯15%的數據字節,Q級糾錯能力約為25%,H級約30%的字碼可被修正。QR碼呈正方形,且在左上角、右下角及右上角分別有一個重疊的同心正方形作為位置探測圖形。QR 二維碼從外觀來看是由黑白小方塊組合成正方矩陣,它包括功能圖像和編碼區兩個主要區域,編碼區包含格式信息、版本信息、數據和糾錯碼字,功能區域不包含數據編碼,空白區位于符號的最外層[2]。
二維碼的生成主要運用LabVIEW開發軟件,用圖形化編輯語言G來完成程序編寫,主要是將輸入文本信息生成相應的QR二維碼,并對二維碼進行生成與保存。可以自主定義二維碼的版本,文本信息,掩膜圖形,糾錯等級以及顏色。其中有1~40個版本,掩膜圖形為000到111,糾錯等級為L,M,Q,H 4個設置選項,顏色也可以自主選擇。主要設計思路是將預計生成的QR二維碼的排列設置成為布爾型的二維數組,然后將對應的二維數組轉換為QR二維碼的圖片來完成實現。
二維碼識別除了需要基于LabVIEW開發環境,還需要安裝視覺采集模塊VAS和視覺開發模塊VDM,另外需要圖像采集設備,本設計主要運用筆記本自帶的攝像頭來完成圖像采集。VAS包括NI-IMAQ和NI-IMAQdx,可以利用這兩個函數模塊從不同的相機獲取圖像,VDM主要用于圖像處理和機器視覺。運用LabVIEW能夠快速地生成與識別二維碼,成本低,成功率高,能夠為人們的生活提供便利。
識別二維碼主要對生成的二維碼進行譯碼還原出所攜帶的信息。主要包含圖像采集、圖像預處理、圖像定位、圖像識別4個功能[3]。首先打開攝像頭,完成初始化,選擇相應串口連接,配置驅動文件,驅動攝像頭完成圖像采集,創建緩存區將采集到的圖像暫時保存。為了達到實時的目的,需要添加while循環。新圖像在循環中持續覆蓋舊的圖像,然后進行灰度處理并進行圖像顯示,提取有效信息,將二維碼部分用紅框標出,最后清除錯誤,釋放緩存區。同時可以填寫個人信息,將個人信息,識別到的文本信息以及當前時間保存到指定的Excel表中。
2.1.1 生成布爾型二維數組的二維碼
底層可以用C或者C++設計,將基本的功能函數都封裝在DLL中,在上位機LabVIEW中直接創建并調用DLL,在調用DLL時,需要給函數添加輸入輸出參數,并完成傳遞參數及數據類型的配置,可實現想要的功能。再將此封裝為可以得到二維碼的子VI,方便調用。當輸入的文本不是空的字符串時,設置圖片的尺寸,邊界距離,選擇糾錯等級,版本,輸入文本信息,則可生成布爾類型二維數組的二維碼。程序按照從外到內,從左到右的順序執行。生成布爾型二維數組二維碼的程序框圖和前面板如圖1—2所示。

圖1 程序框
2.1.2 QR二維碼的生成
糾錯等級,版本,掩膜圖形采用下拉列表控件,編輯選項,可以設置其內容。輸入文本可以自定義編輯,顏色也可以自己選擇,其中任何一個條件改變都會生成一個新的二維碼。點擊保存按鈕可以將生成的二維碼通過圖片至像素圖轉換,寫入png文件,將其保存在自定義路徑。點擊添加按鈕,在bmp文件路徑選擇bmp圖片,完成logo的添加,設置可以生成一個新的中間帶有logo的二維碼。通過事件結構,程序會變得簡單,并將降低CPU利用率。當事件發生時,程序才作出相應的響應。當一個事件完成后,程序需要等待下一個事件的發生,所以事件結構又必須放在while循環中。當按停止按鈕時,程序停止運行。QR二維碼生成的程序框圖和前面板如圖3—4所示。

圖2 前面板

圖3 二維碼生成的程序框
QR 二維碼在實際應用中,掃描和識別是必不可少的步驟[2]。二維碼的識別主要使用視覺模塊完成,較于二維碼生成的程序框圖來說,相對簡單。二維碼識別的程序框圖運用while循環語句,達到實時圖像處理的目的。輸入個人信息后,點擊運行按鈕。當程序運行時,開始識別二維碼,二維碼用紅色框標注并顯示識別信息,指示燈亮起,按下停止鍵,程序停止運行。個人信息、識別信息以及識別的時間保存到指定路徑。當未識別到二維碼時,識別信息的文本為空,而個人信息以及時間正常顯示。二維碼識別的程序框圖如圖5所示。

圖4 二維碼生成的前面板

圖5 二維碼識別程序框
經過多次測試,系統能夠正常啟動和運行,能夠實現二維碼的生成與保存以及二維碼的識別與檢測功能,另外,對條形二維碼進行識別,識別的結果為一個鏈接。設計基本符合預期的要求,并且系統沒有明顯的錯誤,運行速度快。采用LabVIEW開發環境實現圖標代替文本行創建程序,容易上手。鑒于設計操作簡單,可以將此應用到實驗室,圖書館等場合,方便完成產品入庫出庫信息、查詢物品庫存或者其他信息。后期會針對二維碼的高效性及安全性進行進一步研究。