微信掃碼為啥那么快?官方揭秘
很多軟件都支持二維碼掃描,部分手機(jī)ROM還內(nèi)置了單獨(dú)的掃一掃功能,但是你是否發(fā)現(xiàn)了,微信的掃碼速度似乎特別的快,而且很精準(zhǔn)。這是為什么呢?
微信官方公眾號“微信派”就特別介紹了微信二維碼掃描功能的一些技術(shù)細(xì)節(jié)。
二維碼和我們在幾乎所有產(chǎn)品上能看到的條形碼一樣,都是通過條碼的組合記錄信息,不過比條形碼(本名應(yīng)為一維碼)多一個(gè)維度,因而能夠存儲(chǔ)更高密度的信息,比如圖片、漢字、數(shù)字。
掃碼過程其實(shí)就是不斷對焦、采集圖像、識別的過程,而采集的幀數(shù)越少,代表掃碼速度越快,可以理解為圖形處理器每秒鐘能夠刷新幾次。
據(jù)粗略估算,微信目前一年要處理至少二維碼達(dá)千億級,市面上超過60%的二維碼都誕生于微信平臺(tái),相當(dāng)于每個(gè)微信活躍用戶平均每年都會(huì)掃描140次甚至更多的二維碼。
【微信掃碼的秘密:引擎+算法】
微信掃碼使用了自家開發(fā)的QBar引擎,并計(jì)入了預(yù)判算法,在識別條碼之前會(huì)過濾無碼圖像,只識別有意義的內(nèi)容——二維碼和條形碼。
整個(gè)掃碼預(yù)判模塊位于核心識別引擎之前,不再需要對輸入的視頻中的每一幀圖像進(jìn)行檢測識別,能實(shí)現(xiàn)快速過濾大量無碼圖像,減少后續(xù)不必要的定位和識別對掃碼客戶端造成的阻塞,使響應(yīng)更加及時(shí),增加掃碼過程中的流暢度,而這就是微信掃碼快速的關(guān)鍵原因。
微信團(tuán)隊(duì)分析數(shù)據(jù)顯示,該引擎在識別正常圖片時(shí)的解碼速度,iOS可縮短至5毫秒,安卓也僅僅約12毫秒,當(dāng)然這也和手機(jī)配置尤其是攝像頭有很大關(guān)系。
掃碼預(yù)判模塊流程圖
對于無碼圖像,主流手機(jī)的處理速度均有較大幅度地提高,部分機(jī)型平均運(yùn)行時(shí)間降低到10毫秒以內(nèi)。
對于有碼圖像,二維碼的平均識別也快了近35%,而且維持了識別率。
不同機(jī)型無碼樣本測試速度對比
【“壞碼”也能掃】
一些二維碼就算出現(xiàn)穿孔、污損或者彎折,還是一樣可以識讀,這是因?yàn)槎S碼中從存儲(chǔ)的信息通常都經(jīng)過了糾錯(cuò)編碼,是有冗余的。
一個(gè)二維碼所能表示的比特?cái)?shù)是固定的,包含的信息越多那么冗余度就越小,反之亦然。微信二維碼中包含的信息量并不需要很大,這意味著編碼的冗余度可以做得較高,所以即使損毀面積達(dá)到30%也依舊可以恢復(fù)。
QBar掃碼引擎對二維碼容錯(cuò)性解碼算法、多語言字符檢測算法等均使用進(jìn)行了數(shù)十項(xiàng)優(yōu)化,在識別率和識別速度上得到了提升。
簡單來說,QBar識別及解碼的流程包括:
- 讀取視頻或圖像,通過灰度化處理得到單張灰度圖;
- 對灰度圖進(jìn)行處理得到二值圖像(二值化是引擎在識別前把圖像轉(zhuǎn)換成01圖像的過程);
- 將二值圖輸入不同的解碼器識別是否存在二維碼;
- 如果檢測到存在某種編碼,即通過相應(yīng)的解碼器進(jìn)行解碼,并返回解碼結(jié)果。
QBar引擎識別解碼流程
在提高成功解碼的概率上,微信的另一個(gè)做法就是給每個(gè)步驟做上“標(biāo)簽”,目的是找出錯(cuò)誤信息,對失敗信息再設(shè)置相應(yīng)的二次檢測流程,在失敗的步驟處進(jìn)行更”努力”地嘗試,且越到后面的步驟,表明圖中存在二維碼的概率越大。
通過這樣每步找錯(cuò)、多次識別解碼,大大提高了手機(jī)掃描二維碼的成功率。