哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用OpenCV與微信二維碼引擎實(shí)現(xiàn)二維碼識(shí)別

新機(jī)器視覺 ? 來源:稀土掘金 ? 作者:Tony沈哲 ? 2022-04-06 10:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

背景

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

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

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

模型文件的地址:

https://github.com/WeChatCV/opencv_3rdparty

微信的掃碼引擎,很早就支持了遠(yuǎn)距離二維碼檢測(cè)、自動(dòng)調(diào)焦定位、多碼檢測(cè)識(shí)別等功能,它是基于 CNN 的二維碼檢測(cè)。

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

基于CNN的二維碼檢測(cè)器

二維碼識(shí)別的封裝

首先,定義一個(gè) AlgoQrCode.h

#pragmaonce
#include
#include
usingnamespacecv;
usingnamespacestd;

classAlgoQRCode
{
private:
Ptrdetector;

public:
boolinitModel(stringmodelPath);

stringdetectQRCode(stringstrPath);

boolcompression(stringinputFileName,stringoutputFileName,intquality);

voidrelease();
};

該頭文件定義了一些方法,包含了加載模型、識(shí)別二維碼、釋放資源等方法,以及一個(gè) detector 對(duì)象用于識(shí)別二維碼。
然后編寫對(duì)應(yīng)的源文件 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);//圖像壓縮參數(shù),該參數(shù)取值范圍為0-100,數(shù)值越高,圖像質(zhì)量越高

boolbRet=imwrite(outputFileName,srcImage,compression_params);

returnbRet;
}

returnfalse;
}

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

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

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

detectQRCode() 方法需要根據(jù)業(yè)務(wù)場(chǎng)景,先對(duì)圖像做很多預(yù)處理的工作,然后再進(jìn)行二維碼的識(shí)別。這些預(yù)處理的過程,不再本文的討論范圍之列,以后有機(jī)會(huì)單獨(dú)寫一篇文章。

compression() 方法用于壓縮圖像,因?yàn)槲覀兪褂霉I(yè)相機(jī)拍攝,圖片會(huì)很大大概30M+,所以在使用之前會(huì)先壓縮一下。

release() 方法可以在程序結(jié)束時(shí),釋放 detector 對(duì)象。

識(shí)別二維碼,其實(shí)就是調(diào)用 detector 對(duì)象的 detectAndDecode() 方法。

最后,寫一個(gè) main() 函數(shù)測(cè)試一下,是否可用:

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;
}

執(zhí)行結(jié)果,識(shí)別二維碼的內(nèi)容:

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

寫到這里,基本上完成了二維碼識(shí)別的封裝,可以給上層平臺(tái)編譯對(duì)應(yīng)的算法包了。
我們最終是需要使用 Java/Kotlin 在 Windows 平臺(tái)上調(diào)用該 cv 程序。因?yàn)樵擁?xiàng)目是一款智能設(shè)備的上位機(jī)程序。所以還需要編寫一個(gè) jni 程序供 Java/Kotlin 調(diào)用,這個(gè)過程就不再闡述了。最后,將 cv 程序和 jni 相關(guān)的代碼最終編譯成一個(gè) dll 文件,供上位機(jī)程序調(diào)用,實(shí)現(xiàn)最終的需求。

總結(jié)

其實(shí),上述代碼可以供各種平臺(tái)使用,無論是移動(dòng)端、桌面端、服務(wù)端。微信開源了一款非常快速的二維碼引擎,節(jié)省了我們?cè)却罅康墓ぷ鳌?/p>

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 二維碼
    +關(guān)注

    關(guān)注

    7

    文章

    489

    瀏覽量

    28933
  • 開源
    +關(guān)注

    關(guān)注

    3

    文章

    4323

    瀏覽量

    46424
  • OpenCV
    +關(guān)注

    關(guān)注

    33

    文章

    652

    瀏覽量

    45066

原文標(biāo)題:使用 OpenCV + 微信二維碼引擎實(shí)現(xiàn)二維碼識(shí)別

文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    瑞芯(EASY EAI)RV1126B 二維碼生成

    1.二維碼簡(jiǎn)介二維碼又稱二維條碼,常見的二維碼為QRCode,QR全稱QuickResponse,是一個(gè)近幾年來移動(dòng)設(shè)備上超流行的一種編碼方式,它比傳統(tǒng)的BarCode條形碼能存更多的
    的頭像 發(fā)表于 04-08 10:48 ?119次閱讀
    瑞芯<b class='flag-5'>微</b>(EASY EAI)RV1126B <b class='flag-5'>二維碼</b>生成

    有哪些常見的二維碼模組類型?

    二維碼模組是集成了掃描引擎、解碼芯片、光學(xué)組件的核心模塊(也叫二維碼模塊),可直接嵌入自助終端、工業(yè)PDA、智能閘機(jī)等設(shè)備,實(shí)現(xiàn)二維碼的快速
    的頭像 發(fā)表于 01-24 00:00 ?912次閱讀
    有哪些常見的<b class='flag-5'>二維碼</b>模組類型?

    瑞芯(EASY EAI)RV1126B 二維碼識(shí)別

    1.二維碼識(shí)別簡(jiǎn)介二維條碼/二維碼(2-dimensionalbarcode)是用某種特定的幾何圖形按一定規(guī)律在平面(二維方向上)分布的黑白
    的頭像 發(fā)表于 01-19 10:18 ?3805次閱讀
    瑞芯<b class='flag-5'>微</b>(EASY EAI)RV1126B <b class='flag-5'>二維碼</b><b class='flag-5'>識(shí)別</b>

    二維影像掃描引擎在門禁二維碼刷卡梯控行業(yè)中的應(yīng)用

    在當(dāng)今科技日新月異的時(shí)代,二維影像掃描引擎以其卓越的識(shí)別性能和廣泛的應(yīng)用領(lǐng)域,成為了門禁系統(tǒng)中不可或缺的重要組成部分,尤其在二維碼刷卡梯控行業(yè)中展現(xiàn)出了非凡的價(jià)值。本文將深入探討
    的頭像 發(fā)表于 12-17 15:42 ?467次閱讀
    <b class='flag-5'>二維</b>影像掃描<b class='flag-5'>引擎</b>在門禁<b class='flag-5'>二維碼</b>刷卡梯控行業(yè)中的應(yīng)用

    二維碼掃描識(shí)別器有內(nèi)嵌款嗎?掃識(shí)別的功能是嵌入在自助機(jī)上的

    在自助設(shè)備遍布生活場(chǎng)景的今天,不少人會(huì)疑惑“二維碼掃描識(shí)別器有內(nèi)嵌款嗎?”答案是肯定的——內(nèi)嵌式二維碼掃描識(shí)別器早已成為自助機(jī)的核心配置,從商場(chǎng)的自動(dòng)售賣機(jī)到火車站的自助取票機(jī),掃
    的頭像 發(fā)表于 12-04 16:19 ?597次閱讀
    <b class='flag-5'>二維碼</b>掃描<b class='flag-5'>識(shí)別</b>器有內(nèi)嵌款嗎?掃<b class='flag-5'>碼</b><b class='flag-5'>識(shí)別</b>的功能是嵌入在自助機(jī)上的

    二維碼模塊是什么?它和普通條碼識(shí)別設(shè)備有什么不同

    在物聯(lián)網(wǎng)技術(shù)飛速發(fā)展的今天,條碼與二維碼已成為信息傳遞的重要載體,從超市結(jié)賬到工業(yè)生產(chǎn)溯源,從移動(dòng)支付到醫(yī)療耗材管理,相關(guān)識(shí)別設(shè)備無處不在。其中,二維碼模塊作為核心
    的頭像 發(fā)表于 11-06 15:54 ?649次閱讀
    <b class='flag-5'>二維碼</b>掃<b class='flag-5'>碼</b>模塊是什么?它和普通條碼<b class='flag-5'>識(shí)別</b>設(shè)備有什么不同

    哪款二維碼模組適合嵌入戶外取餐柜,用于掃二維碼

    在智能取餐柜普及的當(dāng)下,二維碼模組作為核心交互組件,其性能直接影響用戶體驗(yàn)與設(shè)備穩(wěn)定性。針對(duì)戶外場(chǎng)景的特殊需求,深圳遠(yuǎn)景達(dá)物聯(lián)網(wǎng)推出的LV4300Pro系列二維碼模組,憑借工業(yè)級(jí)設(shè)計(jì)與場(chǎng)景化技術(shù)優(yōu)化
    的頭像 發(fā)表于 09-10 15:00 ?718次閱讀
    哪款<b class='flag-5'>二維碼</b>模組適合嵌入戶外取餐柜,用于掃<b class='flag-5'>二維碼</b>

    【嘉楠堪智K230開發(fā)板試用體驗(yàn)】+二維碼識(shí)別

    通過K230開發(fā)板快速實(shí)現(xiàn)二維碼識(shí)別實(shí)現(xiàn) import time, os, gc from media.sensor import Sensor from media.displa
    發(fā)表于 08-22 20:16

    掃描條碼模塊、二維碼模塊,廣泛應(yīng)用于定制的手持設(shè)備

    模塊為核心,憑借出色的一、二維碼識(shí)別、解碼及傳輸能力,結(jié)合安卓系統(tǒng)的實(shí)時(shí)通訊優(yōu)勢(shì),讓條碼掃描在更多領(lǐng)域實(shí)現(xiàn)了高效落地。掃描條碼模塊(也稱條碼識(shí)別
    的頭像 發(fā)表于 08-18 15:18 ?754次閱讀
    掃描條碼模塊、<b class='flag-5'>二維碼</b>模塊,廣泛應(yīng)用于定制的手持設(shè)備

    GM861條二維碼識(shí)別模塊用戶手冊(cè)

    GM861條二維碼識(shí)別模塊用戶手冊(cè)
    發(fā)表于 07-09 14:56 ?1次下載

    基于STM32的二維碼識(shí)別源碼+二維碼解碼庫(kù)lib

    基于STM32的二維碼識(shí)別源碼+二維碼解碼庫(kù)lib,推薦下載!
    發(fā)表于 05-28 22:04

    基于LockAI視覺識(shí)別模塊:C++二維碼識(shí)別

    二維碼識(shí)別是視覺模塊經(jīng)常使用到的功能之一。我們將演示如何使用基于瑞芯RV1106的LockAI視覺識(shí)別模塊進(jìn)行二維碼
    發(fā)表于 05-26 09:57

    基于LockAI視覺識(shí)別模塊:C++二維碼識(shí)別

    二維碼識(shí)別是視覺模塊經(jīng)常使用到的功能之一。我們將演示如何使用基于瑞芯RV1106的LockAI視覺識(shí)別模塊進(jìn)行二維碼
    的頭像 發(fā)表于 05-26 09:42 ?1142次閱讀
    基于LockAI視覺<b class='flag-5'>識(shí)別</b>模塊:C++<b class='flag-5'>二維碼</b><b class='flag-5'>識(shí)別</b>

    基于STM32的二維碼識(shí)別源碼+二維碼解碼庫(kù)lib

    基于STM32的二維碼識(shí)別源碼+二維碼解碼庫(kù)lib項(xiàng)目實(shí)例下載! 純分享帖,需要者可點(diǎn)擊附件免費(fèi)獲取完整資料~~~【免責(zé)聲明】本文系網(wǎng)絡(luò)轉(zhuǎn)載,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請(qǐng)第一時(shí)間告知,刪除內(nèi)
    發(fā)表于 05-23 20:45

    基于RK3576開發(fā)板的二維碼識(shí)別算法

    了快速上手指南,包括源碼管理、開發(fā)環(huán)境搭建、例程編譯與運(yùn)行等步驟,并詳細(xì)介紹了二維碼識(shí)別API的使用方法及調(diào)用示例。通過API函數(shù)qr_decode,用戶可以輕松實(shí)現(xiàn)二維碼
    的頭像 發(fā)表于 05-10 09:25 ?1068次閱讀
    基于RK3576開發(fā)板的<b class='flag-5'>二維碼</b><b class='flag-5'>識(shí)別</b>算法
    田东县| 剑阁县| 吉安县| 铜梁县| 邛崃市| 巧家县| 云安县| 柘城县| 靖宇县| 西城区| 贞丰县| 蒙阴县| 伊金霍洛旗| 沿河| 策勒县| 桂林市| 镇江市| 琼中| 濮阳县| 朔州市| 大英县| 农安县| 富民县| 南通市| 拉萨市| 如东县| 施甸县| 龙井市| 昭觉县| 凌海市| 临武县| 滦平县| 昌邑市| 疏勒县| 富裕县| 昭平县| 门源| 洪泽县| 潼南县| 长阳| 修水县|