Java識別圖片中的二維碼

引入依賴

<dependency><groupId>org.bytedeco</groupId><artifactId>javacv</artifactId><version>1.5.10</version>
</dependency><dependency><groupId>org.bytedeco</groupId><artifactId>javacpp</artifactId><version>1.5.10</version><classifier>windows-x86_64</classifier>
</dependency><dependency><groupId>org.bytedeco</groupId><artifactId>opencv</artifactId><version>4.9.0-1.5.10</version><classifier>windows-x86_64</classifier>
</dependency><dependency><groupId>org.bytedeco</groupId><artifactId>openblas</artifactId><version>0.3.26-1.5.10</version><classifier>windows-x86_64</classifier>
</dependency>

注意:這里使用的是1.5.10版本;對應的opencv是4.9.0版本;

如果在使用過程中版本過高,則需要降低javacv的版本,對應的opencv的版本也需要降低

由于是在windows環境開發時使用,所以這里引入依賴時使用的classifier是windows-x86_64;如果生產環境則需要根據具體的環境修改classifer(如果是linux環境則需要使用linux-x86_64),最好是maven打包時能夠根據部署環境的不同打包方式不同:

<profiles><profile><id>dev</id><dependencies><dependency><groupId>org.bytedeco</groupId><artifactId>javacpp</artifactId><version>1.5.10</version><classifier>windows-x86_64</classifier></dependency><dependency><groupId>org.bytedeco</groupId><artifactId>opencv</artifactId><version>4.9.0-1.5.10</version><classifier>windows-x86_64</classifier></dependency><dependency><groupId>org.bytedeco</groupId><artifactId>openblas</artifactId><version>0.3.26-1.5.10</version><classifier>windows-x86_64</classifier></dependency></dependencies></profile><profile><id>prd</id><dependencies><dependency><groupId>org.bytedeco</groupId><artifactId>javacpp</artifactId><version>1.5.10</version><classifier>linux-x86_64</classifier></dependency><dependency><groupId>org.bytedeco</groupId><artifactId>opencv</artifactId><version>4.9.0-1.5.10</version><classifier>linux-x86_64</classifier></dependency><dependency><groupId>org.bytedeco</groupId><artifactId>openblas</artifactId><version>0.3.26-1.5.10</version><classifier>linux-x86_64</classifier></dependency></dependencies></profile>
</profiles>

使用這種方式配置后,如果是dev環境,打包時會使用windows-x86_64的jar包;如果是prd環境,打包時會使用linux-x86_64的jar包

識別二維碼

這里直接給出代碼

package cn.busframework.qrcode;import org.bytedeco.javacpp.BytePointer;
import org.bytedeco.opencv.opencv_core.StringVector;
import org.bytedeco.opencv.opencv_wechat_qrcode.WeChatQRCode;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;import java.io.File;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;import static org.bytedeco.opencv.global.opencv_imgcodecs.imread;public class QrcodeTests {@Testpublic void testRead() throws URISyntaxException {File qrcodeFile = new File(Thread.currentThread().getContextClassLoader().getResource("qrcode.jpg").toURI());WeChatQRCode we = new WeChatQRCode();StringVector stringVector = we.detectAndDecode(imread(qrcodeFile.getAbsolutePath()));if (!stringVector.empty()) {BytePointer bytePointer = stringVector.get(0);byte[] buffer = bytePointer.getStringBytes();System.out.println(new String(buffer, 0, buffer.length - 1, StandardCharsets.UTF_8));}}
}

代碼中讀取的是類路徑下的qrcode.jpg圖片,從中解析圖片中第一個驗證碼的內容;

需要注意的是:

1、qrcode.jpg圖片的全路徑中不能包含中文或空格,否則圖片將無法解析。

2、代碼中引入的類需要是org.bytedeco包下的類,否則圖片將無法解析。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/38952.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/38952.shtml
英文地址,請注明出處:http://en.pswp.cn/web/38952.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

while陳述

回圈是用來進行進行重復性的工作&#xff0c;典型的回圈會進行下列三項基本任務 1. 控制變數初始設定2. 回圈結束條件測試3. 調整控制變數的值 關鍵字 while構成C 中回圈的一種&#xff0c;常用于沒有確定重復次數的回圈&#xff0c;同時while后面接著小括弧為回圈結束的條件…

上位機第二彈

之前寫的代碼用上了 現在想想 &#xff0c;北向一側還挺難搞&#xff0c;設計很巧妙

Continual Test-Time Domain Adaptation--論文筆記

論文筆記 資料 1.代碼地址 https://github.com/qinenergy/cotta 2.論文地址 https://arxiv.org/abs/2203.13591 3.數據集地址 論文摘要的翻譯 TTA的目的是在不使用任何源數據的情況下&#xff0c;將源預先訓練的模型適應到目標域。現有的工作主要考慮目標域是靜態的情況…

python - 列表 / 元組 / 字符串

一.列表 由于pyhon的變量沒有數據類型&#xff0c;所以python是沒有數組的&#xff08;因為數組只能存放一種類型&#xff0c;要么全部存放整型&#xff0c;要么全部存放浮點型&#xff09;&#xff0c;只有列表list&#xff0c;所以整數&#xff0c;浮點數&#xff0c;字符串…

傳輸線阻抗匹配電阻端接的方式

電路為什么需要端接&#xff1f; 眾所周知&#xff0c;電路中如果阻抗不連續&#xff0c;就會造成信號的反射&#xff0c;引起上沖下沖、振鈴等信號失真&#xff0c;嚴重影響信號質量。所以在進行電路設計的時候阻抗匹配是很重要的考慮因素。 對我們的PCB走線進行阻抗控制已經…

雙指針系列第 8 篇:盛水最多的容器。幾句話講明白!

Leetcode 題目鏈接 思路 取首尾雙指針和水量如下所示&#xff0c;設高度函數為 h ( i ) h(i) h(i)&#xff0c;在下圖中 h ( l ) < h ( r ) h(l) < h(r) h(l)<h(r)。 觀察以 l l l 為左邊界所能構成的其他水量&#xff0c;與矮的右邊界搭配結果如下。 與高的…

jdk17卸載后換jdk1.8遇到的問題

過程&#xff1a; 1、找到jdk17所在文件夾&#xff0c;將文件夾進行刪除。&#xff08;問題就源于此&#xff0c;因為沒刪干凈&#xff09; 2、正常下載jdk1.8&#xff0c;按照網上步驟配置環境變量&#xff0c;這里我參考的文章是&#xff1a; http://t.csdnimg.cn/Svblk …

【RT摩拳擦掌】如何構建RT AVB switchendpoint平臺

【RT摩拳擦掌】如何構建RT AVB switch&endpoint平臺 一&#xff0c;文檔簡介二&#xff0c;平臺構建2.1 軟硬件情況2.2 配置RT1170 AVB端點2.2.1 1塊MIMXRT1170開發板做talker配置2.2.2 2塊MIMXRT1170開發板做listener配置 2.3 AVB Switch 配置2.3.1 MOTU AVB Switch2.3.2 …

未來的鑰匙在于過去:學歷史的真正意義,震驚!歷史竟然是偶然的?從歷史中尋找未來的方向!

我們自幼接受的教育是&#xff0c;學歷史是為了相信歷史是必然的。中國人民必然戰勝日寇的侵略&#xff0c;解放思想和改革開放必定會發生&#xff0c;和平和發展必定是世界的主題&#xff0c;中國經濟必定是高速增長…… 然而&#xff0c;在真正的歷史學家眼中&#xff0c;歷史…

linux應用開發基礎知識(八)——內存共享(mmap和system V)

mmap內存映射 內存共享定義 內存映射&#xff0c;簡而言之就是將用戶空間的一段內存區域映射到內核空間&#xff0c;映射成功后&#xff0c;用戶對這段內存區域的修改可以直接反映到內核空間&#xff0c;同樣&#xff0c;內核空間對這段區域的修改也直接反映用戶空間。那么對…

海外注冊 | 歐盟醫療器械法規下免除臨床試驗的條件與要求

在歐盟醫療器械法規&#xff08;MDR&#xff09;的嚴格監管下&#xff0c;植入性醫療器械和III類醫療器械通常需要進行臨床試驗來證明其安全性和性能。 然而&#xff0c;MDR也規定了一些特定情況下免除臨床試驗的可能性。以下是免除臨床試驗的條件和要求的詳細說明&#xff1a…

MVC(Model-View-Controller)模式

MVC&#xff08;Model-View-Controller&#xff09;模式三個主要組件&#xff1a;模型&#xff08;Model&#xff09;&#xff0c;視圖&#xff08;View&#xff09;&#xff0c;和控制器&#xff08;Controller&#xff09;&#xff1a; 模型&#xff08;Model&#xff09;&a…

【高中數學/基本不等式】已知:a,b皆為正數,且1/(2a+b)+1/(a+2b)=1 求:a+b的最小值?

【問題來源】 https://www.ixigua.com/7025123539728466469?logTag1c2fd2e305d60e6277ab 第二題 【問題】 已知&#xff1a;a,b皆為正數&#xff0c;且1/(2ab)1/(a2b)1 求&#xff1a;ab的最小值&#xff1f; 【解答】 解&#xff1a;此題也有分母難消的問題&#xff…

人口萎縮,韓國釜山“進入消失階段”

KlipC報道&#xff1a;調查顯示&#xff0c;隨著低生育率和人口老化&#xff0c;釜山人口逐漸萎縮&#xff0c;韓國第二大城市釜山顯現出“進入消失階段”的跡象。 據悉&#xff0c;“消失風險指數”是將20歲至39歲女性人口總數除以65歲及以上人口得到的數值。當該指數大于1.5…

自然語言處理學習(2)基本知識 文本預處理+文本數據分析+文本增強

conda activate DL conda deactivate課程鏈接 一 一些包的安裝 1 stanfordcorenlp 在anoconda prompt 里面&#xff1a;進入自己的conda環境&#xff0c;pip install stanfordcorenlp 進入方式 相關包下載&#xff0c;Jar包我沒有下載下來&#xff0c;太慢了&#xff0c;這個…

記錄Atlas800服務器環境安裝

一、創建安裝賬號 groupadd HwHiAiUser useradd -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser -s /bin/bash二、下載依賴包 以下包根據需求自行下載 wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py39_24.5.0-0-Linux-aarch64.sh wg…

debug-mmlab

mmyolo bug1: MMYOLO for yolov5 instance segmentation on balloon dataset getting this error "ValueError: Key img_path is not in available keys. solution: pip install albumentations1.3.1 reference

【計算機考研】408王道四本書的正確使用順序

個人認為如果對408的分數要求不太高&#xff0c;120分以下跟著王道就夠了&#xff0c;而120分以上還需要看一下教材。 王道的書很適合應試考試&#xff0c;書中的內容都是抓重點&#xff0c;咸魚老師上課講的內容也非常好&#xff0c;通俗易懂&#xff0c;計算機網絡要稍遜一些…

實現Linux C++進程意外退出時信號處理與堆棧打印

文章目錄 0. 引言1. 獲取堆棧信息流程圖2. 實現進程守護與信號處理2.1 進程如何守護化&#xff1f;2.2 信號處理hook函數注冊2.3 守護進程代碼熟宣 3. 堆棧信息捕獲與打印邏輯4. 其他說明5. 附錄完整代碼 0. 引言 在軟件開發中&#xff0c;特別是對于需要高可靠性的后臺服務或…

掌握Go語言郵件發送:net/smtp實用教程與最佳實踐

掌握Go語言郵件發送&#xff1a;net/smtp實用教程與最佳實踐 概述基本配置與初始化導入net/smtp包設置SMTP服務器基本信息創建SMTP客戶端實例身份驗證 發送簡單文本郵件配置發件人信息構建郵件頭部信息編寫郵件正文使用SendMail方法發送郵件示例代碼 發送帶附件的郵件郵件多部分…