我們幾乎每天都要掃碼,登錄網站、登記信息、消費支付、添加好友……只要打開掃一掃,能省去不少繁瑣步驟。
而當每次打開工具掃碼時,這些工具通常都會給出 1:1 的掃碼框,將框對準二維碼,手機就能馬上識別碼內的信息。
然而,不知你有沒有發現,即使這些工具會將「掃描區」框出來,有時候其實不需要對準框就能完成掃描,只要二維碼在相機取景範圍內,系統就能馬上將內容識別出來。
那這個框有何用處?
其實這跟每款 app 對掃描功能的用途有很大關係。縱觀我們目前日常最常用的 10 款 app,二維碼掃描頁的設計可以分為幾類:
固定區域掃描
全屏掃描
固定區域但實際是全屏掃描
全屏設計但實際是固定掃描
固定區域掃描是我們目前接觸最多的掃碼模式,用户需要將手機對準二維碼掃描才能讓手機完成識別,若是目標二維碼不在框內,app 就無法識別內容。
而在一些我們較為常用的 app,比如微信、支付寶,則是從過去的「固定框掃描」變成「全屏掃描」,即整個手機屏幕都是掃描框。
手機無需正對着二維碼也能完成識別,識別速度也比有框掃描快很多,相機還沒對上焦,系統就能馬上識別出信息。
▲ 二維碼不在框內也能完成識別(實際速度比 GIF 更快)
當然在此其中也有特別個例。當我打開微博掃碼時,頁面是個有固定掃碼區的設計,但 app 的掃描機制本質上其實是全屏掃描。所以每當我準備掃描時,二維碼還沒進框,信息就已經被讀取出來了。
莫非是設計師偷懶了?也不一定。
要扒開掃描頁的細節,單從表面看顯然是不夠的,還需要從多方面考慮,比如掃碼用的硬件,還有軟件層面上的解碼能力。
實際上要將掃碼頁做成全屏並不難,但專門騰出一個方框作為掃描區也並非多此一舉。
究其原因,在二維碼剛進入我們的生活時,無論是 app 本身或是掃碼設備,都沒有做專門的優化,掃碼成功率往往和二維碼所處環境光線、距離和清晰度有關。
於用户個人而言,掃碼區所提供的是一個掃碼識別的提示,它的任務是告訴用户相機已經準備好掃描,只要對準即可讀取信息。
而對於設備本身,相機能否快速識別二維碼,這跟相機的對焦性能、處理器的解碼運算能力不無關係。
二維碼的歷史最早可以追溯到上世紀八十年代,但直到過去十年才開始普及到我們的日常生活中。
但早期智能手機的對焦反應、速度都相對較慢,而且也容易受環境光和鏡頭清晰度的影響,因而在開發 app 掃描頁時,開發者需要通過調整相機取景範圍,讓相機向特定區域對焦,而不是廣域對焦。
▲ 舊手機的掃碼速度要比新手機慢一些(留意對焦拉風箱,使用魅族 MX5 測試)
簡單來説,將掃碼區域獨立出來,實際上也是為了照顧早期對焦速度相對較慢的設備。原理類似於相機的定點對焦區域,相機只對方框內區域測量、對焦,從而減少目標二維碼周邊的其他因素干擾,以此提升相機對焦速度和掃碼成功率。
換個角度看,掃碼方框除了是告訴用户掃描功能開啓外,也是一種提高識別準確率的方法。只要方框內二維碼關鍵元素符合要求,識別準確率約等於百分之百。
為了讓用户能在不同環境和條件下掃碼,開發者在使用如 zxing 等掃碼開發庫時,會集成如調用閃光燈、遠距離自動變焦等等等等,其目的都是為了讓手機能看清方框內的二維碼信息,方便用户在任何使用場合掃描。
不過,近幾年智能手機的相機對焦速度提升很快,核心處理器對圖像處理的能力也逐步提升,因此現代手機掃碼也不需要長時間的對焦,即便需要,也只是在不到一秒內就能完成。
與此同時,隨着二維碼的應用漸成主流,app 開發商也通過自創掃碼引擎的方式,提高掃碼的速度和成功率,而不僅只依靠硬件層面來完成識別過程——微信便是其中一家。
微信雖然不是最早使用二維碼的 app,但不得不承認它是應用二維碼和掃碼最頻密的一款 app,這除了讓用户一旦提起「掃碼」就想到微信以外,也間接推動了微信對掃碼技術的開發。
在 QBar 問世前,掃碼引擎主要為 zxing 和 zbar 兩種,而這兩種引擎有不同的優勢,但都有各自的缺點,同時這兩種引擎對條形碼識別的限制也相對比二維碼更多。
2016 年,由微信技術團隊通過公眾號「微信派」發佈的一則推文中,他們曾介紹過 QBar 掃碼引擎的工作原理。
相比於傳統的掃碼方式,QBar 會在掃碼頁工作時通過預判算法篩出有條形碼 / 二維碼內容,通過掃描頁快速識別出畫面前的圖形碼信息,隨後通過 QBar 引擎對圖像解碼,輸出最終結果。
換言之,當用户打開掃碼頁時,只要框內有條形碼或二維碼圖像,系統就已經開始預判用户的掃碼目標,並開始進行分類和識別。
▲ 只有一角都能識別 GIF(使用微信掃一掃功能)
而且由於二維碼本身也有容錯機制(原本是為了讓二維碼在破損下也能正常使用),相機其實並不需要對照完整的二維碼,只需在容錯範圍內找到二維碼關鍵點就能識別。再結合 QBar 引擎特性,掃碼相機能通過預判和篩選出二維碼及其關鍵信息,在一秒內完成識別和解碼工作。
▲ 微信掃碼預判模塊流程圖,圖片來自:微信派
「微信派」所公佈的識別原理看似複雜,但在現代智能手機中,這些都只是幾毫秒就能完成的任務。根據「微信派」的參考數據,iOS 客户端微信完成解碼時間為 5 毫秒,Android 客户端則是 12 毫秒。
至於為什麼 iOS 設備的掃碼速度會比 Android 更快,這可能是跟當時 iOS 與 Android 設備之間的解碼性能有關係。
▲ iPhone 11 Pro Max 使用微信掃碼速度(GIF 幀數原因,有輕微加速)
在日光環境下的測試中,使用 A13 處理器的 iPhone 確實做到還沒對上焦就已經完成識別,即便是 2016 年的 iPhone 7 也能做到的「一舉即掃」的反應;而使用驍龍 865 的 Android 旗艦反應也非常迅速,但相比於 iOS 也有着微小的速度差距。
如果説 iPhone 掃碼是「還沒看清就完成識別」,那麼 Android 則是「看清楚就馬上完成識別」。
兩者之差,僅在毫秒。
▲ 一加 8 使用微信掃碼速度(GIF 幀數原因,有輕微加速)
不過儘管 Android 的掃碼速度稍遜 iOS,但相比於五年前兩個陣營之間的速度差,Android 的提升已經非常明顯,和 iOS 的識別速度相差無幾,若是不留心幾乎看不出兩者的區別。
所以過去 5/12 毫秒的識別時間也不是絕對值,它們會隨手機硬件和軟算法的迭代而變化。
值得一提的是,在使用 Android 設備同時掃描多個二維碼時,會將畫面內的 多個二維碼一同識別,隨後提供入口讓用户自行選擇對象;而 iOS 雖然識別速度更快,但在面對多個二維碼時,則是又系統隨緣多選一了。
▲ 沒有固定掃描框的微信掃一掃可同時識別多個二維碼(注:目前該功能僅在部分 Android 客户端中灰度測試)
除微信以外,支付寶也採用了和微信類似的全屏幕掃描,其識別速度雖然比微信稍慢,但也能做到抬手即識別的水準。
根據 CSDN 網友分享的技術文檔,支付寶的掃碼功能由 libqrencode 庫集成,雖然不是微信的 Qbar,但是其深度優化下的識別速度也能做到以毫秒計算。
有了更完善的算法引擎和硬件解碼能力,手機對二維碼的識別也變得「敏感」了起來,它們在無需高清圖像的條件下,也都能快速識別出碼裏的內容。
如此一來,過去用於固定焦點的方框,自然會被全屏掃描所取代。
▲ 支付寶的識別速度也很快(測試平台 iPhone 11 Pro Max)
掃碼形式上的變化,在微信、支付寶、微博這些用户掃碼行為較多的 app 中體驗升級尤其明顯。
用户在微信、支付寶可以快速完成掃碼交易;微博則能讓用户快速完成掃碼二步驗證。
掃碼速度、準確率的變化有賴於幾家頭部企業對掃碼引擎和算法的改良,但從側面看,這其實也得益於手機硬實力不斷升級,只有分辨率更高的相機、運算性能更強的處理器,才能承載更復雜的解碼引擎和算法,實現毫秒級的掃碼識別能力。
▲ iPhone 7 與舊版微信掃描框
從掃碼頁面的進化,可見手機掃碼效率正在不斷提升,常用 app 在掃碼時都無需對準碼,即能完成掃描。那我們回頭來看,最為原始的掃碼方框還有存在的意義嗎?
其實還是有的。
首先一方面是當前舊設備的留存率較高,智能手機的使用壽命普遍都在 2-3 年,甚至長達 4-5 年,舊手機的對焦和識別能力都不如現在的新手機。
掃描方框的作用,正如在前文所述,便於舊手機快速找到焦點,提升二維碼的掃描速度和準確率,而且它也能直觀引導用户將手機對準掃碼,這其實也間接提升了舊手機在每次掃碼時的識別效率。
▲ 京東、淘寶掃碼雖是全屏但仍需要對準框內掃描
此外,儘管微信有自己的掃碼引擎,但並非所有 app 開發商都具備開發引擎或專門優化引擎的能力。
對於掃碼需求不大的 app 來説,掃描功能主要也是掃描二維碼,掃描成功率比速度更重要,因此在沒有對識別引擎進行特定優化的前提下,使用原始的框內掃描,可以保障新舊設備掃碼都有較高的識別成功率。
二維碼的普及極大簡化了我們在查詢、支付、登記時的操作,而用於掃描它的手機,也在隨着軟件和硬件的解碼能力升級,變得高效且多樣化。
如今的掃碼頁所能掃描的已經不止二維碼,它還能結合神經網絡進行識物。根據微信最新功能文檔介紹,基於中國科學院昆明植物研究所提供的 85 萬份植物圖像數據,目前掃一掃功能能對 3.6 萬多種植物進行識別,基本涵蓋了我們日常所見的花草樹木數據。
可見,掃碼頁正隨着更多元的算法,承載着更多功能。
正因如此,過去用於引導用户、提高設備對焦速度的掃碼框也隨算法升級、硬件迭代、掃碼頁支持更多目標掃描,而漸漸退出舞台。然而它並沒有真正離開我們,只是從過去的 1:1 演變成和手機屏幕比例一致而已。