使用zxing二维码识别
1.多二维码识别 (同一张图片中多二维码识别)
直接上代码舒服:
pom文件:
<!-- QR Code -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.3</version>
</dependency>、
/**
* Parse multiple qr codes(解析多个二维码)
* 使用java实现
*
* @param bufferedImage image
* @return QRCode analysis results
*/
@Override
public Result[] analysisQRCodeOfMore(BufferedImage bufferedImage) {
QRCodeMultiReader qrCodeMultiReader = new QRCodeMultiReader();
Result[] results = null;
try {
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(bufferedImage)));
Map hints = new Hashtable();
hints.put(EncodeHintType.CHARACTER_SET, SystemConstants.SYS_ENC);
hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE); //优化精度
hints.put(DecodeHintType.PURE_BARCODE, Boolean.TRUE); //复杂模式,开启PURE_BARCODE模式; 带图片LOGO的解码方案
hints.put(DecodeHintType.POSSIBLE_FORMATS,BarcodeFormat.QR_CODE);//指定识别的二维码格式
results = qrCodeMultiReader.decodeMultiple(binaryBitmap, hints);
} catch (NotFoundException e) {
//e.printStackTrace();
System.err.println("二维码识别中...");
}
return results;
}
注意:开启精度优化与复杂模式会消耗识别时间!
在多二维码识别中,应该说是zxing的一个小bug,在识别过程中对于模糊一点的图片,会一直抛异常 (二维码识别中...) 直至二维码识别不出来,或者二维码识别出来;此问题没来得及细细研究,等日后补充;
2.单二维码识别:
private String decodeQRCode(Mat src) {
if (src == null) {
return null;
}
BufferedImage image;
try {
image = ImageUtils.mat2BufferedImage(src, ".jpg");
LuminanceSource source = new BufferedImageLuminanceSource(image);
Binarizer binarizer = new HybridBinarizer(source);
BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);
Map<DecodeHintType, Object> hints = new HashMap<>();
hints.put(DecodeHintType.CHARACTER_SET, SystemConstants.SYS_ENC);
hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
Result resultText = new MultiFormatReader().decode(binaryBitmap, hints);
return resultText.getText();
} catch (NotFoundException e) {
LogUtils.info("[QRCodeServiceImpl] decodeQRCode image transform failed.");
}
return null;
}
以上代码使用opencv格式的图片来转换为BufferedImage为需要的入参;
3. (扩展) 多二维码识别与多二维码识别不同点:
public Result[] decodeMultiple(BinaryBitmap image, Map<DecodeHintType,?> hints)
单二维码识别函数:
public Result decode(BinaryBitmap image, Map<DecodeHintType,?> hints)
完毕!
使用zxing二维码识别的更多相关文章
- 有关python下二维码识别用法及识别率对比分析
最近项目中用到二维码图片识别,在python下二维码识别,目前主要有三个模块:zbar .zbarlight.zxing. 1.三个模块的用法: #-*-coding=utf-8-*- import ...
- Atitit zxing二维码qr码识别解析
Atitit zxing二维码qr码识别解析 1.1. qr码识别解析 by zxing1 1.2. 解码lib:qrcode.jar 2 1.3. atitit.二维码生成总结java zxing ...
- Android二维码识别 开源项目ZXing的编译
Android二维码识别 开源项目ZXing的编译 Android端的条形码/二维码识别功能 因为手机端的输入不是很方便,所以条形码/二维码的扫描是一种很有效的解决手段. 比较流行的手机应用中,常用的 ...
- 实例源码--ZXing识别条形码和二维码识别源码
下载源码 技术要点: 1.ZXing库的 使用 2.识别条形码和二 维码 3.自定义视图 4.源码带有非常详 细的中文注释 ...... 详细介绍: 1.ZXing库 ZXing是个很经典的条码/ ...
- Python zxing 库解析(条形码二维码识别)
各种扫码软件 最近要做个二维码识别的项目,查到二维码识别有好多开源的不开源的软件 http://www.oschina.net/project/tag/238/ Zbar 首先试了一下Zbar,pyt ...
- Atitit java 二维码识别 图片识别
Atitit java 二维码识别 图片识别 1.1. 解码11.2. 首先,我们先说一下二维码一共有40个尺寸.官方叫版本Version.11.3. 二维码的样例:21.4. 定位图案21.5. 数 ...
- 基于opencv3.0和下的条形码与二维码识别
其中对条码与二维码的识别分为以下4个步骤 1. 利用opencv和Zbar(或者Zxing)对标准的条形码图片(即没有多余背景干扰,且图片没有倾斜)进行解码,将解码信息显示出来,并与原始信息对比. 2 ...
- android 图片二维码识别和保存(一)
最新业务开发二维码识别的功能,这个功能,在很多应用上都有,比如微信长按图片识别二维码,如果图片中存在可以识别的二维码时,可以增加一个选项 识别二维码.那么如何去实现这个功能呢.这里其实也非常简单,首先 ...
- C#/.net 通过js调用系统相机进行拍照,图片无损压缩后进行二维码识别
这两天撸了一个需求,通过 JS 调用手机后置相机,进行拍照扫码.前台实现调用手机相机,然后截取图片并上传到后台的功能.后台接收传过来的图片后,通过调用开源二维码识别库 ZXing 进行二维码数据解析 ...
随机推荐
- 吐槽中小民营IT企业管理七宗罪
傲慢.妒忌.暴怒.懒惰.贪婪.贪食及色欲,电影<七宗罪>中借七个典型的命案告诉我们,人性中最丑陋的七大恶行.在实际的工作中自己对企业的经营和日常管理有了一些更深刻的认识,偏偏自己又是一个很 ...
- 02_Redis数据类型(String、Hash)
[Redis数据类型] redis是通过key-Value来存储的,其支持的数据类型如下: 1.字符串 2.Hash 3.List 4.Set 5.SortSet(zset) 注:redis中,命令( ...
- SQL Server数据类型一览表
数据类型 类型 描 述 bit 整型 bit 数据类型是整型,其值只能是0.1或空值.这种数据类型用于存储只有两种可能值的数据,如Yes 或No.True 或Fa lse .O ...
- ArcGIS Enterprise 10.5.1 静默安装部署记录(Centos 7.2 minimal)- 1、安装前准备
安装前准备 上传文件到服务器,x-ftp xshell登陆Centos 检查机器名 修改机器名为:portal.cloud.local 方法一:零时设置,重启后失效,该方法不可取 方法 ...
- 多线程(七)~join方法的使用
作用:join()方法的作用是等待线程对象销毁. join()方法具有能使线程排队运行的作用,有点类似于同步的效果. join与synchronize的区别: jo ...
- BIEE入门(四)展现层
BIEE里最终面向最终用户(业务界面使用者的)叫做BIEE的Presentation Layer也即展现层,展现层的定义将是最终用户Web报表开发界面里能够看见的完全一样的样子,所以展现层一般将是以最 ...
- Hadoop fs命令(转)
最近使用hive做一些etl工作,除了日常sql的编写,了解hadoop及hive的一些底层原理性质的东西包括调优非常有必要,一次hive调优就把原来的零散文件做了合并.首先记下hadoop常用的命令 ...
- Python装饰器AOP 不定长参数 鸭子类型 重载(三)
1 可变长参数与关键字参数 *args代表任意长度可变参数 **kwargs代表关键字参数 用*args和**kwargs只是为了方便并没有强制使用它们. 缺省参数即是调用该函数时,缺省参数的值若未被 ...
- 华为OJ-表示数字
要求:将一个字符中所有出现的数字前后加上符号"*",其他字符保持不变 #include<iostream> #include<string> using n ...
- 查看pip install安装的python包的位置
例如,我在一个名为tf_14的vertualenv环境中(no-site-package)安装了一个contextlib2包 (tf_14) novak@novak-ZBook15G2:~/Carnd ...