微信二維碼引擎OpenCV開源!3行代碼讓你擁有微信掃碼能力

2021-02-15 OpenCV團隊

2011年12月微信3.5版本正式上線「掃一掃」二維碼,歷經9年蛻變,「掃一掃」從二維碼名片到掃碼支付、從小程序碼到健康碼,二維碼已經成為一種生活方式,連接著數字與現實。

現在,在騰訊WeChatCV團隊的貢獻下,微信掃碼引擎正式加入OpenCV開源了!只需3行代碼,你便輕鬆擁有微信的掃碼能力:

import cv2

detector = cv2.wechat_qrcode_WeChatQRCode("detect.prototxt", "detect.caffemodel", "sr.prototxt", "sr.caffemodel")
img = cv2.imread("img.jpg")
res, points = detector.detectAndDecode(img)

print(res, points)

微信掃碼引擎收錄於:

opencv_contrib/modules/wechat_qrcode

開發文檔:

https://docs.opencv.org/master/d5/d04/classcv_1_1wechat__qrcode_1_1WeChatQRCode.html

微信掃碼引擎是一款基於開源引擎ZXing,並高度優化和深度改造的高性能輕量二維碼識別器。

1. 基於CNN的二維碼檢測


「一圖多碼」是掃碼支付經常遇到的線下場景。早在2016年,微信掃碼引擎在業內率先支持遠距離二維碼檢測、自動調焦定位、多碼檢測識別。然而,傳統方法需要犧牲40%以上的性能來支持多碼的檢測與識別。伴隨著深度學習技術的成熟和移動端計算能力的提升,微信掃碼引擎引入基於CNN的二維碼檢測器解決上述問題。

圖1 二維碼檢測器

我們以SSD框架為基礎,構造了短小精幹的二維碼檢測器(圖1),採用殘差連接(Residual Concat)、深度卷積(Depthwise Convolution)、空洞卷積(Dilated Convolution)、卷積投影(Convolution Projection)等技術進行了針對性的優化。整個模型大小僅943KB,iPhone7(A10)單CPU的推理時間僅需20ms,很好地滿足「低延時、小體積、高召回」的業務需求。

檢測代碼:

https://github.com/opencv/opencv_contrib/blob/master/modules/wechat_qrcode/src/wechat_qrcode.cpp#L156

模型文件:

https://github.com/WeChatCV/opencv_3rdparty/blob/wechat_qrcode/detect.prototxt

參數文件:

https://github.com/WeChatCV/opencv_3rdparty/blob/wechat_qrcode/detect.caffemodel

2. 基於CNN的二維碼增強


大圖小碼」是遠距掃碼和長按識碼經常面臨的難點,二維碼增強技術可以讓小碼更加清晰。2014年,微信率先在對話中上線「識別圖中二維碼」能力,離不開增強技術的加持。在長按識別的場景中,二維碼圖像經過用戶的裁剪、壓縮、轉發,圖像質量嚴重受損,解析度急劇下降,邊緣變得模糊不清,這給掃碼引擎的識別帶來了極大的挑戰。

傳統圖像增強算法很難完美地解決以上問題,因此微信掃碼引擎率先在識別流程中引入了基於深度學習的超解析度技術(圖2)。在網絡結構上,密集連接(Dense Concat)、深度卷積(Depthwise Convolution)、反向卷積(Deconvolution)、殘差學習(Residual Learning)等技術改善模型的性能;在目標函數上,針對二維碼強邊緣和二值化的特點,結合L2/L1損失、邊界加權、二值約束設計了針對二維碼的目標函數。經過精心的調優,超解析度模型大小僅23KB,在iPhone7(A10)單CPU的推理時間僅需6ms(100x100超分200x200),完全滿足移動端的應用需求。

圖2 二維碼超解析度

超分代碼:https://github.com/opencv/opencv_contrib/blob/master/modules/wechat_qrcode/src/wechat_qrcode.cpp#L68

模型文件:

https://github.com/WeChatCV/opencv_3rdparty/blob/wechat_qrcode/sr.prototxt

參數文件:

https://github.com/WeChatCV/opencv_3rdparty/blob/wechat_qrcode/sr.caffemodel

3. 更魯棒的定位點檢測

二維碼在識別的時候,通常需要根據掃描像素行/列匹配對應比例來尋找定位點(圖3)。

圖3 二維碼定位點

在定位點檢測上,我們提出面積法的定位點檢測方法,相比於傳統掃描線方法更為魯棒和高效,有效地避免了誤召回和漏召回;在定位點匹配上,特徵聚類方法使得掃碼引擎可以高效和準確地匹配多個定位點;在圖像二值化上,引入多種更為魯棒的二值化方法,有效地提高解碼的成功率。

核心代碼:

https://github.com/opencv/opencv_contrib/blob/master/modules/wechat_qrcode/src/wechat_qrcode.cpp#L117

結合傳統計算機視覺和深度學習技術,微信掃碼引擎解決了一圖多碼、大圖小碼、魯棒解碼等業務痛點和技術難點。如今,該引擎在OpenCV上正式開源,期待廣大開發者與我們一同打造業內領先的掃碼引擎!

感謝騰訊WeChatCV團隊的貢獻,更多關於微信二維碼引擎的技術分析,敬請關注OpenCV中國團隊的OpenCV Webinar。


Webinar 1: OpenCV Overview

Webinar 2: OpenCV DNN在ARM上的加速

Webinar 3: OpenCV深度學習應用與原理分析

Webinar 4: 谷歌編程夏令營2020 OpenCV文本識別項目開發

Webinar 5: 谷歌編程夏令營2020 OpenCV RISC-V項目開發

Webinar 6: AI on Edge Devices

OpenCV中國團隊官方推薦和認證OpenCV在線課程

加入我們OpenCV志願者

(請註明「OpenCV志願者」)


OpenCV中國團隊於2019年9月由深圳市人工智慧與機器人研究院支持成立,非營利目的,致力於OpenCV的開發、維護和推廣工作。

長按下方QR碼關注我們獲取最新動態

相關焦點

  • 微信二維碼引擎OpenCV開源!3行代碼讓你擁有微信掃碼能力
    現在,在騰訊WeChatCV團隊的貢獻下,微信掃碼引擎正式加入OpenCV開源了!只需3行代碼,你便輕鬆擁有微信的掃碼能力:import cv2detector = cv2.wechat_qrcode_WeChatQRCode("detect.prototxt", "detect.caffemodel", "sr.prototxt", "sr.caffemodel")img = cv2.imread("img.jpg")res,
  • 手把手教你怎麼使用微信的二維碼識別引擎
    導讀用過二維碼識別的小夥伴們都知道,微信的二維碼識別確實要比開源的二維碼識別zxing和zbar要強不少,zxing和zbar對小的二維碼以及模糊的二維碼基本上是識別不出來的
  • 二維碼和app掃碼下載
    java代碼生成二維碼前端二維碼生成app掃碼下載二維碼基本原理參考: https://cli.im/help/48235二維條碼是指在一維條碼的基礎上擴展出另一維具有可讀性的條碼,使用黑白矩形圖案表示二進位數據,被設備掃描後可獲取其中所包含的信息
  • 收銀系統如何實現微信和支付寶二維碼掃碼付款?
    前提條件需要收銀系統連接網際網路,首先,您需要先申請開通二維碼收款權限,因為二維碼收款時,收到的錢是實時進入微信公司、支付寶公司的,他們會在次日給你結算到指定的銀行卡中,所以,要先在微信、支付寶公司註冊資料,提交銀行卡信息,具體需要以下資料:1、商戶名稱、商戶簡稱。
  • 微信直接加群二維碼2021 分享行業微信群群碼大全,高質量微信二維群碼最新掃碼 秒進
    臨桂縣 三水區 全國群 林口縣 微信群二維碼掃碼進群200人 馬鞍山市 新河縣 信豐縣 附近微信群大全(最新2020邀請加入) 定陶區 糧油調味群 懷集縣 威寧彝族回族苗族自治縣 白銀市 蝶山區 固鎮縣 納雍縣 赫山區 安義縣 陵川縣 冀州市 南漳縣 施秉縣 孟連傣族拉祜族佤族自治縣 象山區 前郭爾羅斯蒙古族自治縣 忻州市 郾城區 潞城市 伊吾縣 動漫群 掃碼進群的二維碼 微信群聊二維碼大全(歡迎掃碼加群聊
  • 最新消息:微信群二維碼最多可以掃碼進群200人
    微信群成員超過100人,就不能直接掃碼進群,只能通過邀請進群2.微信群二維碼創建後7天就過期了,之後就算用戶看到了海報,也無法掃碼進群此外微信群的最大容量是500人,如果活動長期或者是群滿500人了,其他的用戶就無法進群,加小助手有個好處就是可以
  • 企業微信再次加「碼」,微信裡的二維碼究竟有多少種?
    除了在企業微信中幫助商家構建私域流量,在線下商業場景中,二維碼也有著舉足輕重的價值,事實上,其已經成為各行各業實現數位化轉型的底層能力。由於二維碼能夠承載多種形式的內容與服務,所以,通過一枚二維碼來連接人、物與服務已經形成新的商業模式,而且,應用在了零售、餐飲、出行、政務等多個領域。那麼,微信生態內都囊括了哪些「碼」?分別適用於哪些場景?
  • 微信掃碼秒進大量最新微信群群聊大全裡,掃碼秒進行業微信群群大全
    石拐區 市北區 舞陽縣 商南縣 尖草坪區 寧陵縣 夷陵區 荔城區 保康縣 臨泉縣 翁源縣 海寧市 永泰縣 舟曲縣 澤庫縣 梁溪區 女裝群 新密市 青山湖區 日喀則地區 鄒平縣 三江侗族自治縣 日喀則地區 附近有哪些群 贛榆區 南川區 農安縣 灤平縣 鐵嶺縣 墾利區 廚具群 張掖市 微信聊天群,邀請你加入 井岡山市 附近的微信群聊二維碼 蘭谿市 最全微信群二維碼大全(全部直接掃碼秒進) 浦北縣 川匯區
  • 手機剛掃碼,微信所有好友就收到同一則廣告;這是精準營銷還是...
    營業員稱只要掃二維碼就送一條真絲圍巾,不料對方拿她手機掃碼後,微信內所有朋友都收到了富安娜「緊急清貨,所有床品全部處理,確實很便宜,快去看看!電話6250####」的廣告。「當時真是無比尷尬,不知道有多少好友會對自己群發廣告產生誤解。」張女士說,「自己趕忙在朋友圈裡發道歉,儘量消除不良影響。」反映的兩位女士都異口同聲地問:掃二維碼前,掃碼人為什麼不詳細告知會對微信好友「群發」廣告?
  • 微信掃碼進大量群,最新的微信群,汽車配件群
    微信群二維碼大全  進群掃碼微信群二維碼大全   進群掃碼微信群
  • 掃陌生二維碼 微信「自動」發廣告
    在此,網絡專家提醒廣大市民,千萬不要隨意掃描陌生二維碼,一旦發現自己的微信莫名發送廣告信息,一定要及時更換密碼。當天上午,記者聯繫了在濰坊豪德小商品城做生意的郭女士。她告訴記者,11月初,她發現自己的微信莫名奇妙在一些微信群裡發布了掃碼領獎品的廣告,可是這根本不是她本人操作的。由於微信錢包裡的錢沒有丟,而且和好友聊天等一切正常,因此剛開始的時候並沒有太在意。
  • 微信嚴正提醒!這種二維碼千萬別掃,出現這個頁面你就麻煩大了
    在南京新街口萊迪廣場上,經常有多名年輕人會手持一些小禮物,熱情地邀請你幫他們掃二維碼。謝謝你,耽誤你兩秒鐘,我們幫公司在做推廣,微信幫我掃一下就行了。對方:點關注嗎?對方:掃一下就行了。記者:掃的是什麼?對方:掃的是關注我們公司的微信號。
  • 日照通微信乘車碼上線試運行!微信掃碼就能坐公交!
    「日照通乘車碼」即可體驗掃碼乘車,低碳出行!01如何開通日照通乘車碼微信中找到「發現」-「小程序」,搜索並進入「乘車碼」,定位至日照通乘車碼,並按步驟開通02刷碼乘車乘車時,無需退出微信,下拉微信聊天框,點開乘車碼小程序,將界面生成的二維碼靠近機具掃描區,聽到「請上車」的提示音後即可乘車。
  • 天天掃碼,你知道二維碼的英語怎麼說的嗎
    掃碼關注,掃碼付款,掃碼下載等等,二維碼的應用在生活裡越來越普遍。尤其是走在大街上會有推廣某種產品的人說「掃碼關注,免費送某東西」等。今天和大家聊聊二維碼的英語怎麼說的。例句:You can also share your contact information with other through QR codes.你也可以通過二維碼與他人共享你的聯繫人信息。You can scan the QR code to get red packets.掃二維碼就可領紅包。「掃碼」的英文表達有了二維碼,最主要的當然是「掃一掃「。
  • 微信二維碼群 微信群歡迎加入
    臨桂縣 三水區 全國群 林口縣 微信群二維碼掃碼進群200人 馬鞍山市 新河縣 信豐縣 附近微信群大全(最新2020邀請加入) 定陶區 糧油調味群 懷集縣 威寧彝族回族苗族自治縣 白銀市 蝶山區 固鎮縣 納雍縣 赫山區 安義縣 陵川縣 冀州市 南漳縣 施秉縣 孟連傣族拉祜族佤族自治縣 象山區 前郭爾羅斯蒙古族自治縣 忻州市 郾城區 潞城市 伊吾縣 動漫群 掃碼進群的二維碼 微信群聊二維碼大全(歡迎掃碼加群聊
  • 商丘公交現在可用微信掃碼乘公交啦!
    你們是不是一直很期待用微信就可以乘坐商丘公交呢?喏~微信掃碼來囉! 商丘公交微信掃碼乘車將於5月28日正式上線!從28號起,可以使用微信掃碼乘坐88和3路車啦,後續各條路線將逐步測試並上線,無須下載APP,無須提前排隊充值,微信「交通碼」就可以實現!什麼是「交通碼」?「交通碼」,就是一種可以替代實體「公交卡」的二維碼電子卡,和公交卡的「一卡通」一樣,可以用來乘坐公交、地鐵和輕軌這些公共運輸工具。如何使用「交通碼」?
  • 搜索微信二維群碼的最新方法, 微信二維群圖歡迎掃碼進群
    附近500的人微信群二維碼大全(附近的群) 臨翔區 金牛區 綏中縣 東臺市 虎林市 汽車裝飾群 武威市 濬縣 望城縣 禮品群 廬陽區 微信群二維碼大全(每天更新群聊) 山海關區 太倉市 西林區 陽曲縣 蓬安縣 宜都市 三明市 廣告群二維碼掃碼 微信讀書群二維碼 綿竹市 美姑縣 宿州市 澤普縣 鄒平縣 會昌縣 桃城區 鳳翔縣 黃陂區 南鄭縣 昌邑區 蘭坪白族普米族自治縣 輝南縣 溧陽市 騎行運動群
  • 掃個二維碼微信號就沒了?這些「送人頭」操作請避免
    掃個二維碼微信號就沒了?這些「送人頭」操作請避免 2020年01月16日 22:04 中新網微信公眾號   擁有11億用戶的微信是當下必備的社交軟體。  記者隨機選擇了一家銷量高的網店,客服表示該項服務能找出微信拉黑和刪除你的人,並且可以選擇清理,一碼一號可使用七天。
  • 上海這些公交線路可以微信掃碼乘車 有你乘坐的嗎
    從浦東公交獲悉,近期,浦東一大波公交線路開通微信掃碼支付啦!  快來看看是否有你常乘坐的公交線,開通「二維碼掃碼支付」的線路有隧道一線大橋四路浦東42路陸家嘴金融城1路83路浦東35路1052路陸家嘴金融城2路84路130路339路陸家嘴金融城3路572路995路119路1029路780路815路775路大橋六線786路1015路792路990路789路1031路976路779路795路169路983路988路970路外高橋3路1011
  • 《王者榮耀》掃碼登錄別人微信號方法 如何掃碼登錄別人的號
    平時在登錄王者榮耀的時候,不管你選擇微信登錄還是QQ登錄系統都會自動拉起你手機本地的微信QQ進行登錄,是沒有辦法進行掃碼登錄的。但是我們可以避免系統來拉起本地微信QQ登錄,具體的操作流程如下,直接將手機本地的微信,QQ直接刪除卸載,或者你可以直接找一部沒有安裝QQ以及微信的手機。