在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用OpenCV與微信二維碼引擎實現二維碼識別

新機器視覺 ? 來源:稀土掘金 ? 作者:Tony沈哲 ? 2022-04-06 10:01 ? 次閱讀

背景

今年自疫情以來,我都沒有寫過文章。一方面是疫情導致居家辦公比較煩躁,另一方面最近有點懶了。但是工作還是要繼續,趁這幾天優化了一下最近的項目,我整理了一下如何使用 OpenCV 和微信二維碼引擎來實現二維碼的識別。

微信開源了其二維碼的解碼功能,并貢獻給 OpenCV 社區。其開源的 wechat_qrcode 項目被收錄到 OpenCV contrib 項目中。從 OpenCV 4.5.2 版本開始,就可以直接使用。
該項目 github 地址:

https://github.com/opencv/opencv_contrib/tree/master/modules/wechat_qrcode

模型文件的地址:

https://github.com/WeChatCV/opencv_3rdparty

微信的掃碼引擎,很早就支持了遠距離二維碼檢測、自動調焦定位、多碼檢測識別等功能,它是基于 CNN 的二維碼檢測。

9ee56f9e-afe3-11ec-aa7f-dac502259ad0.jpg

基于CNN的二維碼檢測器

二維碼識別的封裝

首先,定義一個 AlgoQrCode.h

#pragmaonce
#include
#include
usingnamespacecv;
usingnamespacestd;

classAlgoQRCode
{
private:
Ptrdetector;

public:
boolinitModel(stringmodelPath);

stringdetectQRCode(stringstrPath);

boolcompression(stringinputFileName,stringoutputFileName,intquality);

voidrelease();
};

該頭文件定義了一些方法,包含了加載模型、識別二維碼、釋放資源等方法,以及一個 detector 對象用于識別二維碼。
然后編寫對應的源文件 AlgoQrCode.cpp

boolAlgoQRCode::initModel(stringmodelPath){
stringdetect_prototxt=modelPath+"detect.prototxt";
stringdetect_caffe_model=modelPath+"detect.caffemodel";
stringsr_prototxt=modelPath+"sr.prototxt";
stringsr_caffe_model=modelPath+"sr.caffemodel";
try
{
detector=makePtr(detect_prototxt,detect_caffe_model,sr_prototxt,sr_caffe_model);
}
catch(conststd::exception&e)
{
cout<endl;
returnfalse;
}

returntrue;
}

stringAlgoQRCode::detectQRCode(stringstrPath)
{
if(detector==NULL){
return"-1";
}

vectorvPoints;
vectorvStrDecoded;
MatimgInput=imread(strPath,IMREAD_GRAYSCALE);
//vStrDecoded=detector->detectAndDecode(imgInput,vPoints);
....
}

boolAlgoQRCode::compression(stringinputFileName,stringoutputFileName,intquality){
MatsrcImage=imread(inputFileName);

if(srcImage.data!=NULL)
{
vector<int>compression_params;
compression_params.push_back(IMWRITE_JPEG_QUALITY);
compression_params.push_back(quality);//圖像壓縮參數,該參數取值范圍為0-100,數值越高,圖像質量越高

boolbRet=imwrite(outputFileName,srcImage,compression_params);

returnbRet;
}

returnfalse;
}

voidAlgoQRCode::release(){
detector=NULL;
}

其中:initModel() 方法用于加載算法模型文件,必須先調用,并且只需要調用一次即可。模型文件

9ef8a3de-afe3-11ec-aa7f-dac502259ad0.jpg

detectQRCode() 方法需要根據業務場景,先對圖像做很多預處理的工作,然后再進行二維碼的識別。這些預處理的過程,不再本文的討論范圍之列,以后有機會單獨寫一篇文章。

compression() 方法用于壓縮圖像,因為我們使用工業相機拍攝,圖片會很大大概30M+,所以在使用之前會先壓縮一下。

release() 方法可以在程序結束時,釋放 detector 對象。

識別二維碼,其實就是調用 detector 對象的 detectAndDecode() 方法。

最后,寫一個 main() 函數測試一下,是否可用:

9f0bb4e2-afe3-11ec-aa7f-dac502259ad0.jpg

intmain()
{
AlgoQRCodealgoQrCode=AlgoQRCode();
algoQrCode.initModel("/Users/tony/IdeaProjects/creative-mirror-watcher/mirror/src/main/resources/");
stringvalue=algoQrCode.detectQRCode("/Users/tony/20220216851652_compress.jpeg");
cout<<"value="<endl;
}

執行結果,識別二維碼的內容:

value={
"osVersion":"iOS13.3",
"model":"蘋果iPhoneX",
"ip":"10.184.17.170",
"port":10123
}

寫到這里,基本上完成了二維碼識別的封裝,可以給上層平臺編譯對應的算法包了。
我們最終是需要使用 Java/Kotlin 在 Windows 平臺上調用該 cv 程序。因為該項目是一款智能設備的上位機程序。所以還需要編寫一個 jni 程序供 Java/Kotlin 調用,這個過程就不再闡述了。最后,將 cv 程序和 jni 相關的代碼最終編譯成一個 dll 文件,供上位機程序調用,實現最終的需求。

總結

其實,上述代碼可以供各種平臺使用,無論是移動端、桌面端、服務端。微信開源了一款非常快速的二維碼引擎,節省了我們原先大量的工作。

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 二維碼
    +關注

    關注

    7

    文章

    432

    瀏覽量

    26535
  • 開源
    +關注

    關注

    3

    文章

    3391

    瀏覽量

    42623
  • OpenCV
    +關注

    關注

    31

    文章

    635

    瀏覽量

    41445

原文標題:使用 OpenCV + 微信二維碼引擎實現二維碼識別

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    RS232接口的二維影像掃描引擎,廣泛用在醫療設備上掃一二維碼

    其穩定可靠的性能,成為連接醫療設備與二維碼之間的橋梁。在醫療設備上,二維影像掃描引擎通過RS232接口與設備主體相連,實現了對一
    的頭像 發表于 12-23 16:02 ?145次閱讀
    RS232接口的<b class='flag-5'>二維</b>影像掃描<b class='flag-5'>引擎</b>,廣泛用在醫療設備上掃一<b class='flag-5'>維</b><b class='flag-5'>二維碼</b>

    工業級二維碼掃描模組有哪些特點?

    工業級二維碼掃描模組是用于各種工業環境中,快速、準確地識別和解碼二維碼的關鍵設備。隨著工業4.0和物聯網的快速發展,工業級二維碼掃描模組的應用范圍越來越廣泛,成為了許多自動化和智能化生
    的頭像 發表于 12-02 15:02 ?144次閱讀
    工業級<b class='flag-5'>二維碼</b>掃描模組有哪些特點?

    工業視覺在條碼/二維碼識別領域的應用

    工業視覺技術在條碼和二維碼識別領域的應用日益廣泛,它通過高精度的圖像處理和識別算法,實現了對條碼和二維碼的快速、準確
    的頭像 發表于 11-18 16:28 ?291次閱讀
    工業視覺在條碼/<b class='flag-5'>二維碼</b><b class='flag-5'>識別</b>領域的應用

    工業二維碼器在電子制造業中的應用

    工業二維碼器在電子制造業中的應用主要體現在以下幾個方面:▲生產追溯管理工業二維碼器通過對電子產品上的二維碼進行快速掃描,
    的頭像 發表于 11-13 16:19 ?228次閱讀
    工業<b class='flag-5'>二維碼</b>讀<b class='flag-5'>碼</b>器在電子制造業中的應用

    二維碼識讀設備有哪些類型

    隨著二維碼應用的日益普及,各類二維碼識讀設備也應運而生。這些設備不僅極大地方便了我們的日常生活,也為企業提供了更加高效便捷的服務。那么,你知道二維碼識讀設備都有哪些類型嗎?讓我們一起來了解一下。據
    的頭像 發表于 11-05 16:10 ?285次閱讀
    <b class='flag-5'>二維碼</b>識讀設備有哪些類型

    二維碼掃描頭設備嵌入到閘機上,實現掃手機屏幕完成簽到簽退

    如何嵌入到閘機上,實現掃手機屏幕完成簽到簽退的過程及其優勢。一、二維碼掃描頭設備的嵌入技術二維碼掃描頭設備作為一種高效的信息采集工具,其核心技術在于快速、準確地讀取并
    的頭像 發表于 09-18 15:45 ?314次閱讀
    <b class='flag-5'>二維碼</b>掃描頭設備嵌入到閘機上,<b class='flag-5'>實現</b>掃手機屏幕<b class='flag-5'>碼</b>完成簽到簽退

    工業二維碼掃描設備如何助力流水線生產?

    工業二維碼掃描設備被廣泛應用于現代工廠的流水線作業中,它們能夠高效、準確地讀取移動中的二維碼。這些掃器通常被設計為固定式或手持式,以適應不同的生產環境和需求。固定式掃器安裝在特定位
    的頭像 發表于 08-12 14:56 ?337次閱讀
    工業<b class='flag-5'>二維碼</b>掃描設備如何助力流水線生產?

    如何為柜式終端設備選配(集成)二維碼模塊?

    的設計與升級過程中,集成高性能的二維碼模塊是提升用戶體驗、優化業務流程的關鍵一環。首要考慮的是功能需求匹配,根據具體應用場景,甄選既能讀取傳統二維碼又能識別屏幕
    的頭像 發表于 08-05 15:48 ?317次閱讀
    如何為柜式終端設備選配(集成)<b class='flag-5'>二維碼</b>模塊?

    Labview生成二維碼

    ?Labview 的一個Demo,生成二維碼
    發表于 08-01 17:12 ?7次下載

    二維碼器/二維碼讀取設備嵌入園區閘機系統中的應用

    二維碼閱讀設備集成至閘機系統中,主要功能是通過掃描用戶的二維碼通行證來實施園區出入口的自動收費。此技術憑借二維碼的便利性及掃描設備的高效性,極大地提高了收費效率和精確度,減少了由于人為錯誤
    的頭像 發表于 06-05 14:46 ?404次閱讀
    <b class='flag-5'>二維碼</b>掃<b class='flag-5'>碼</b>器/<b class='flag-5'>二維碼</b>讀取設備嵌入園區閘機系統中的應用

    二維碼模塊嵌入到電梯設備里

    二維碼模塊在電梯設備中的應用1.二維碼模塊的基本介紹二維碼模塊是一種基于自動
    的頭像 發表于 05-08 10:40 ?383次閱讀
    <b class='flag-5'>二維碼</b>掃<b class='flag-5'>碼</b>模塊嵌入到電梯設備里

    怎么在Framewin里顯示二維碼

    各位前輩好,剛剛開始使用STemWin。現在一個Framewin里顯示二維碼,在Framewin初始化里調用二維碼函數沒有反應。請問需要怎么調用?
    發表于 04-16 08:27

    遠距離二維碼掃描器如何選擇?看看以下三款遠距離二維碼模塊

    隨著二維碼相關技術及硬件的普及與低成本化,二維條碼掃描設備的應用被人們廣為熟知,應用的行業也眾多。然而,在某些場景中,由于需要遠距離掃描二維碼(條碼遠距離識別),傳統的掃
    的頭像 發表于 03-21 15:41 ?767次閱讀
    遠距離<b class='flag-5'>二維碼</b>掃描器如何選擇?看看以下三款遠距離<b class='flag-5'>二維碼</b>掃<b class='flag-5'>碼</b>模塊

    閘機安裝二維碼識別器輕松解決訪客預約通行難題

    在景區、學校、企業辦公樓等入口處隨處可見的二維碼訪客人行通道閘機,是一種依托于二維碼識別技術的通行方式,即在門禁或通道閘機上安裝專用的二維碼識別
    的頭像 發表于 03-11 13:53 ?500次閱讀
    閘機安裝<b class='flag-5'>二維碼</b><b class='flag-5'>識別</b>器輕松解決訪客預約通行難題

    Labview調用Halcon識別二維碼

    Labview調用Halcon識別二維碼 可一次識別多個二維碼 使用Labview 2020編輯,halcon的版本是 19.11,32位
    發表于 02-21 16:31
    主站蜘蛛池模板: 久久九九色| 国产一区二区三区乱码| 亚洲精品电影天堂网| 最新日本免费一区二区三区中文| 欧美无遮挡一区二区三区| 国产aaaaa一级毛片| 亚洲免费网| 色视频大全| 欧美一区二区在线观看视频| 免费看日本大片免费| 国内精品久久久久影院薰衣草| 国产美女精品三级在线观看| fc2 ppv sss级素人美女| 五月天婷婷在线观看视频| 奇米影视四色7777| 4399一级成人毛片| 中年艳妇乱小玩| 综合婷婷丁香| 色婷婷综合激情视频免费看| 免费毛片网站在线观看| 国产成人精品日本| 日日干天天操| 黄色在线观看网站| 被cao到合不拢腿腐男男| 特级毛片女人18毛片| 久久综合九色综合欧洲色| 4虎最新地址| 久操福利| 日本欧洲亚洲一区在线观看| 香蕉久久精品| 免播放器av少妇影院| 97色网| 国产午夜精品理论片久久影视| 在线精品国产第一页| 亚洲地址一地址二地址三| 欧美久操| 午夜影院观看| 在线播放免费人成毛片乱码| 被啪漫画羞羞漫画| 日本黄色电影在线| freesexvideo性欧美2|