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.mzph.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方法发送邮件示例代码 发送带附件的邮件邮件多部分…