乾貨 | 史上最全的支付寶二維碼掃碼優化技術方案

2021-02-25 支付寶技術

小螞蟻說:

二維碼又稱二維條碼,常見的二維碼為QR Code,QR全稱Quick Response,是一個近幾年來行動裝置上超流行的一種編碼方式,它比傳統的Bar Code條形碼能存更多的信息,也能表示更多的數據類型。

設備掃描二維條碼,通過識別條碼的長度和寬度中所記載的二進位數據,可獲取其中所包含的信息。

在過去的 2017 年,支付寶的線下場景不斷擴大,收錢碼、口碑、共享單車、充電寶、停車繳費等產品讓我們的生活越來越便利。二維碼因為成本低、兼容性好成為了線上線上最主要的連接工具,也因此面臨更多新的挑戰。因為二維碼是一種點陣式信息編碼方式,任何視覺上的缺損、彎曲以及光線作用都會極大的影響識別成功率,如果識別困難也就意味著用戶可能選擇放棄,影響支付體驗也影響用戶心智。

用戶掃碼體驗的最關鍵的主要有以下幾個因素:

識別率:這是掃碼服務的基礎指標,識別率能直接體現識別能力,識別率如果無法提高意味著大量的用戶將無法使用更便捷的服務;

識別耗時:包括 app 啟動耗時以及圖像識別耗時,這是衡量一個用戶從點擊 app 到正確識別到內容耗時,每增加 1s,將有相當大量的用戶放棄等待並離開;

精準反饋:識別結果不僅需要及時反饋給用戶,還需要非常精準,特別是在目前線下有多個二維碼的場景下,需要避免用戶二次操作;

本文將從以上三個方面,分享支付寶掃碼技術團隊是如何為用戶打造一個又準又快又穩的極致掃碼體驗。

我們對用戶反饋進行了大量統計分析,發現絕大部分識別失敗都是因為二維碼並不標準,並且很遺憾的是在使用我們早期的掃碼版本進行識別率測試時發現識別率只有 60%;

策略1:優化樁點查找算法長寬比耐受

以往的掃碼算法,檢查長寬比例時允許差異 40%,但是由於使用前向誤差,判斷結果跟長寬的先後順序相關,這會導致有些長寬比失調的碼,橫著掃不出來,但是旋轉 90 度豎著卻能掃出來了(^OMG^)。

優化策略

在我們對比測試集中,識別率提高了 1% 左右。

策略2:新增1:5:1樁點識別模式模式

在一張圖片中,要找到二維碼,關鍵在找二維碼特徵定位點:

三個角的回字型圖案,這就是二維碼特徵定位點。中間區域的黑白色塊比例是1:1:3:1:1

 

以往的掃碼算法,樁點識別是通過狀態機 查找11311模式後 取中間位置確定x位置(此時掃描線在第一行11311比例處)在x位置縱向搜索11311模式, 確定y位置再以(x,y)位置橫向搜索11311比例,修正x位置。這種模式在樁點汙損的情況下,識別能力較差只要在任何一次11311模式搜索中遇到幹擾點,哪怕是一個像素的椒鹽噪聲也能使樁點查找失敗。(支付寶藍的樁點,會在藍色區域產生大量噪點,導致識別率低下)

為此,我們新增了一種樁點識別方式。在狀態機達到151模式的時候,開始嘗試確認樁點。(此時掃描線在第一行151比例處)。

優化效果策略3: 添加一種對角線過濾規則

在枚舉所有可能樁點組合 O(N^3) 之前,對所有可疑樁點進行一次對角線檢查過濾。由於樁點對角線也應該滿足 11311模式 ,用這個規則做一次過濾可疑有效減少運算量,也就有效降低了識別成功和失敗的耗時。

策略4: 基於 Logistic Regression 的二維碼分類器

在以往的掃碼算法中在拿到三個樁點後,基於夾角,長度偏差,單位長度查三個數值,用簡單公式計算得到閾值,判斷是否為可能的二維碼,誤判概率較大。

為此,我們引入機器學習中的邏輯回歸算法模型。基於支付寶豐富的二維碼數據集,訓練出邏輯回歸模型,作為二維碼分類器,明顯降低了誤判概率,也將明顯降低無二維碼時識別失敗的耗時。

策略5: 修改跳行掃描的間隔數

由於輸入的相機幀解析度高,像素點多,運算量大,以往的掃碼算法在水平跟垂直方向跳行採樣進行計算。但在實際運算中,由於跳過了太多列,錯過了11311模式中某些1位置的點,導致樁點查找失敗。

我們通過將跳行計算行數修改為可配置項,通過線上 AB 灰度測試得到最合適的跳行策略,整體配置此跳行策略後,識別率得到明顯提升。

上述優化在測試集的表現

綜上優化,掃碼核心識別能力,在7744張圖片測試集上提高了6.95個百分點。


特殊策略優化

除此上述通用掃碼優化之外,我們還對特殊場景掃碼能力進行提高。

1. 畸變?不怕不怕!

線下場景複雜多變。飲料瓶身上變形的二維碼、超市小票捲起邊角彎曲的二維碼、路邊小販凹凸不平甚至摺疊的二維碼.這些畸變的二維碼容易增加識別難度,甚至導致識別失敗。以往的掃碼算法抗畸變策略中,先用透視變換關係建立映射關係。優點是:適應性好,滿足大多數應用場景。  不足也明顯:對 Version 1 的碼,因為映射關係退化為仿射變換,效果較差,手機必須和碼平面平行才能方便識別。當物料表面不是平面的時候,效果較差。

優化策略

假設採樣坐標繫到二維碼坐標系遵守一個更複雜的映射關係,並且假設物料表面的捲曲較小,通過使用二次函數可以較好的擬合這個映射關係;

實際發票上的二維碼版本普遍大於等於 7,高版本二維碼具有多個輔助定位點,更利於構造二次映射表;

基於以上推論,使用新的映射代替舊的透視變換,進行更精準的採樣;

用新的策略,發票碼這個場景的二維碼識別能力提升明顯。

▲注意:由於採用了增強算法,請對準二維碼稍作等待。

2. 容錯識別能力提升

商戶或者供應商生成二維碼後,通常會在二維碼的中間部分貼上 Logo,這部分有可能會使二維碼 Decode 時出錯。

優化策略:

對於採樣後拿到的 BitMatrix,對於中間部分一塊矩形區域內的點,採用某些策略來改變中間點的值,使它能夠通過容錯邊界的檢查。目前採用兩種策略,第一種是反轉,第二種是每一個點隨機取值。目前所取的矩形區域是長、寬的四分之一。

通過此項優化後,掃碼的容錯能力也得到明顯提升。

GPU計算二值化,降低識別單幀耗時

所謂圖像二值化就是將圖像上的像素點的灰度值設置為 0 或 255,也就是將整個圖像呈現出明顯的只有黑和白的視覺效果。下圖左邊為原圖,右邊是二值化處理過的圖。

在掃碼算法解碼前,有二值化計算,圖像的二值化計算能使圖像中數據量大為減少,並弱化圖像模糊、顏色對比度不強、光線過強/太弱、圖像汙損等情況下其他信息的幹擾,更利於檢測識別。

傳統算法是在 CPU 上進行二值化運算,非常消耗 CPU 資源,但其實 GPU 更擅長大規模並行計算,所以我們選擇使用 GPU 來做二值化計算。在安卓平臺上使用 RenderScript,iOS 平臺上使用 Metal,都是很底層的框架。

優化結果

iOS: 統一電池、角度、光線等環境變量, 在iPhone6上測試掃碼核心5種攝像頭二值化算法。表現如下:

可以看出,在圖像二值化方面 Metal 有相當高的優勢,相比原來的單純 CPU 處理快了接近 150%, 同時降低了近50個百分點的CPU資源。

Android機型眾多,我們抽取了線上數據,可以看到GPU 在二值化處理中顯著降低了單幀耗時30%以上。

線下物料千奇百怪,掃碼算法為了解決一些不理想的場景,如二維碼有遮擋、汙損、模糊或角度很不好的特殊情況,需要使用一些比較耗時但比較強大的算法,但普通情況不需要這些算法。所以,我們對識碼算法定了優先級,通過時間推移、跳幀觸發等方式調度:

優先級: 暫定高中低三個優先級。
特殊場景算法:

為碼核心的一種特定能力,如:

反色碼識別能力

容錯邊界碼識別能力

汙損樁點識別能力等

條碼識別能力

看完以上這些,你get了嗎?還有什麼不懂的問題,歡迎在下方的留言區與我們交流!技術哥哥們在這裡等著你哦!

最後,歡迎喜歡鑽研技術的同學加入我們,一起利用計算機視覺、AR、AI、3D 渲染技術為用戶打造更酷更便利的體驗!簡歷請投下方郵箱:

— END —

螞蟻金服科技,只為分享乾貨,您的轉發是對我們最大的支持

相關焦點

  • 史上最全的支付寶二維碼掃碼優化技術方案
    一、背景隨著支付寶的線下場景不斷擴大,收錢碼、口碑、共享單車、充電寶、停車繳費等產品讓我們的生活越來越便利。二維碼因為成本低、兼容性好成為了線上線上最主要的連接工具,也因此面臨更多新的挑戰。精準反饋:識別結果不僅需要及時反饋給用戶,還需要非常精準,特別是在目前線下有多個二維碼的場景下,需要避免用戶二次操作;本文將從以上三個方面,分享支付寶掃碼技術團隊是如何為用戶打造一個又準又快又穩的極致掃碼體驗。
  • 收銀系統如何實現微信和支付寶二維碼掃碼付款?
    收銀系統微信支付寶收款如果您還在收銀臺擺放一個二維碼讓顧客自己來掃碼,讓顧客自己錄入金額,讓顧客自己錄入密碼付款,再讓顧客自己向您確認付款成功,那麼您的收款方式已經OUT了。前提條件需要收銀系統連接網際網路,首先,您需要先申請開通二維碼收款權限,因為二維碼收款時,收到的錢是實時進入微信公司、支付寶公司的,他們會在次日給你結算到指定的銀行卡中,所以,要先在微信、支付寶公司註冊資料,提交銀行卡信息,具體需要以下資料:1、商戶名稱、商戶簡稱。
  • 掃碼時代當心二維碼騙局 制碼技術幾乎零門檻
    假罰單上最可疑的就是二維碼,掃描二維碼後通常會出現微信轉帳頁面。而交警目前並沒有提供任何掃描二維碼繳罰款渠道。  除了假罰單,不法分子利用二維碼還偽造水電費催繳單、商家收款碼等,設各種二維碼繳費騙局。例如騙子偽造含有二維碼的水電費催繳通知,發給手機用戶或貼在住戶家門口,掃碼後出現的是給個人帳戶的轉帳界面,不少群眾未經核實便落入騙子的圈套。
  • 《支付寶》激活醫保碼領紅包二維碼圖片生成方法
    參與支付寶激活醫保碼領紅包活動,用戶自己激活醫保碼後,不僅可以領取一次紅包,而且還可以生成二維碼圖片,將圖片分享給自己的朋友,讓他們掃碼激活醫保碼後,自己還能獲得邀請獎勵哦!那麼支付寶激活醫保碼領紅包怎麼生成邀請圖片二維碼呢?下面小編來為大家介紹一下。
  • 港鐵明起支持AlipayHK、支付寶掃碼過閘
    在除機場快線外的全部93個港鐵車站,乘客不僅能用單程車票和八達通,還多了一種乘車新方式:用AlipayHK或支付寶掃碼進閘。明天起,香港AlipayHK用戶和內地支付寶用戶,只需通過MTR Mobile提供的車票二維碼、AlipayHK上的易乘碼(EasyGo)或支付寶上的乘車碼,即可掃碼乘車。
  • 二維碼統一互認互掃開始了!各方角力
    我們時常能見到店鋪老闆將支付寶和微信二維碼列印在一張紙上,供用戶選擇性掃碼。那麼,有沒有一種可能,兩者甚至更多三方支付間可以互認互掃呢?日前,有媒體報導,中國銀聯與騰訊旗下財付通公司近日已就條碼支付互聯互通達成合作,雙方正共同研究條碼支付互聯互通技術方案,率先建立全面互掃互認的條碼支付服務網絡。
  • 微信二維碼引擎OpenCV開源!3行代碼讓你擁有微信掃碼能力
    二維碼,歷經9年蛻變,「掃一掃」從二維碼名片到掃碼支付、從小程序碼到健康碼,二維碼已經成為一種生活方式,連接著數字與現實。__qrcode_1_1WeChatQRCode.html微信掃碼引擎是一款基於開源引擎ZXing,並高度優化和深度改造的高性能輕量二維碼識別器。
  • 二維碼和app掃碼下載
    java代碼生成二維碼前端二維碼生成app掃碼下載二維碼基本原理參考: https://cli.im/help/48235二維條碼是指在一維條碼的基礎上擴展出另一維具有可讀性的條碼,使用黑白矩形圖案表示二進位數據,被設備掃描後可獲取其中所包含的信息
  • 高鐵上可用支付寶掃碼點餐了
    新快報訊 記者許力夫報導 記者獲悉,即日起,高鐵上點餐只需掃碼就可以了。中國鐵路廣州局集團有限公司高鐵動車上線支付寶 " 掃碼點餐 " 服務,旅客只需在座位上用手機掃碼就能成功點餐、購物。據了解,支付寶掃碼點餐服務覆蓋廣州鐵路局全部高鐵動車列車,日均覆蓋約 115 萬旅客。車內每個座位的扶手處都有一個二維碼,乘客只需要用手機掃描該二維碼,即可進入小程序,下單確認後,信息系統就可以記錄的座位並通知後臺,乘務員在接單 30 分鐘內會將所選購的餐食、商品送到旅客手上。除了點餐購物,小程序還提供正晚點查詢、積分兌換等多種服務。
  • 蘋果一意孤行堅持6年,IOS13.4突然上線掃碼支付,支付寶微信贏了
    而行動支付的出現,讓上述現象大大減少,關鍵是,行動支付更方便,掃碼即付款,不用帶現金或者銀行卡。最主要的是,行動支付的出現,大大推動了移動網際網路服務的發展,尤其是像外賣、共享出行等網際網路服務行業的發展。
  • 地鐵自動售票機能「掃碼支付」了
    原標題: 地鐵自動售票機能「掃碼支付」了今天起,上海地鐵全線站點自動售票機都將支持行動支付購票,乘客在自動售票機上購票時不僅可以通過現金支付完成購票,還可通過「掃碼支付」完成購票。上海地鐵解釋說,此舉是為進一步滿足乘客對於智能化支付方式的需求,實現線上、線下「碼」上購票能力,提高乘客出行效率。目前,上海地鐵已經完成全網415個車站3857臺TVM購票機新增掃碼付款功能改造施工。乘客可以在全網線路各車站使用支付寶、微信、雲閃付APP掃描二維碼完成支付購票,出門沒帶現金也能成功購買地鐵車票。
  • 港鐵全面推行手機掃碼乘車:23日起可用AlipayHK和支付寶了
    在除機場快線外的全部93個港鐵車站,乘客不僅能用單程車票和八達通,還多了一種乘車新方式:用AlipayHK或支付寶掃碼進閘。23日起,香港AlipayHK用戶和內地支付寶用戶,只需通過MTRMobile提供的車票二維碼、AlipayHK上的易乘碼(EasyGo)或支付寶上的乘車碼,即可掃碼乘車。
  • 2021年1月起香港地鐵可用支付寶掃碼過閘
    港鐵明年將全面實現掃碼進閘。香港鐵路有限公司及螞蟻集團旗下AlipayHK日前宣布:自2021年1月23日起,將在港鐵重鐵網絡推出二維碼付費乘車服務。預計一年後,會再引入微信支付、銀聯支付等其他電子錢包,最快在2023年還會引入信用卡入閘。 掃碼坐地鐵在內地已成為乘客習以為常的進站方式。
  • 二維碼掃描模塊的自動識別應用,高效掃碼識讀是如此簡單
    於自動識別技術而言,它是一種通過被識別物品和識別裝置之間的接近活動自動獲取被識別物品的相關信息並將該信息提供給計算機處理系統後臺以完成相關後續處理的技術,說簡單點即是掃描模塊本身內置有高性能的二維碼解碼晶片,可高效地完成條碼掃碼識讀和二維碼掃描支付等一系列解碼操作。
  • 微信二維碼引擎OpenCV開源!3行代碼讓你擁有微信掃碼能力
    __qrcode_1_1WeChatQRCode.html微信掃碼引擎是一款基於開源引擎ZXing,並高度優化和深度改造的高性能輕量二維碼識別器。基於CNN的二維碼檢測「一圖多碼」是掃碼支付經常遇到的線下場景。早在2016年,微信掃碼引擎在業內率先支持遠距離二維碼檢測、自動調焦定位、多碼檢測識別。然而,傳統方法需要犧牲40%以上的性能來支持多碼的檢測與識別。
  • 鎮江有樁助力共享單車可用支付寶掃碼騎行啦
    昨天,記者從鎮江市城管局公共停車管理處獲悉,永安行便民舉措再次升級,從今年1月份起,市民通過「支付寶掃碼」即可租車騎行。永安行鎮江分公司總經理陳駿介紹,目前,永安行在鎮江首批共投放了2000輛有樁助力車,站點主要依託原有的公共自行車站點改造而成,分布在公共休息點、商場以及住宅小區出入口等,用以滿足市民的行、住、娛、樂、購等需求。市民下載永安行APP進行有效註冊後,掃碼即可騎行使用。
  • 支付寶刷臉支付政策大變,掃碼計入激勵、刷臉激勵翻倍
    9月28日,支付寶更新IoT合作規則,蜻蜓系列設備補貼政策和桌面人臉收銀設備補貼政策大變。在單臺設備補貼總額不變的前提下,加入掃碼補貼,與此同時刷臉激勵翻倍,並加入設備點亮激勵。加入掃碼激勵、點亮激勵,刷臉去重激勵翻倍最新發布的《蜻蜓系列設備補貼政策方案公告(2020年【04】版)》與《桌面人臉收銀設備補貼政策方案公告(2020年【04】版)》均加入了掃碼支付在刷臉支付設備上的激勵,這是支付寶首次將掃碼激勵放入到刷臉支付設備中。
  • 馬雲放出豪言,新支付方式將取代掃碼支付,騰訊和支付寶搶先布局
    尤其是掃碼支付的出現,讓國內的經濟貿易更加簡單便捷。經過這幾年的發展,已經基本取代現金交易成為線下的主流支付形式。無論是超市便利店還是街邊小商販,隨處可見掃碼支付的二維碼。
  • 江都的「二維碼」門牌來了,掃碼看看有什麼……
    和電子銀行的普及出門只需要帶一部手機就能解決生活中大部分的煩惱溝通聯絡也變得簡單起來就連結交新朋友都從「換個號碼」變成了「來掃個碼」最近就連每家每戶門口的門牌都趕上了「潮流」開啟掃碼時代「龍川街130號」這是百年建築章臺旅館的「二維碼"新門牌
  • 北京、上海地鐵乘車二維碼實現互聯互通:支付寶技術加持
    至此,上海市民使用 METRO 大都會 APP 不僅可以乘坐上海軌道交通,還可以刷碼暢行北京地鐵;而北京市民也可以使用億通行 APP,刷碼便捷乘坐上海城市軌道交通。在支付寶技術支持下,地鐵互聯互通克服跨區域兼容、結算等難題,市民相當於有了一張地鐵 「通票」。