【能力展现】魔改ZXING源码实现商业级DM码检测能力

学习《OpenCV应用开发:入门、进阶与工程化实践》一书
做真正的OpenCV开发者,从入门到入职,一步到位!

什么是DM码

dataMatrix是一种二维码,原名datacode,由美国国际资料公司于1989年发明。dataMatrix二维码是一种矩阵式二维条码,其发明的构想是希望在较小的条码标签上存入更多的资料量。dataMatrix二维码的最小尺寸是目前所有条码中最小的,适用于小零件的标识,商品防伪,以及直接印刷在实体上。

dataMatrix码是一种矩阵式二维码,其最大特点就是密度高,尺寸小,储存信息量大,其最小尺寸是所有条码中最小的,可在仅仅25mm²的面积上编码30个数字,dataMatrix二维码采用复杂的纠错码技术,所以dataMatrix码抗污损能强,特别适用于小零件标识,商品防伪,电路标识等
在这里插入图片描述

ZXING条码库

ZXing-CPP是一个用C++实现的开源、多格式一维与二维条形码图像处理库。它最初是从Java ZXing库移植而来的,但经过进一步开发,现在在运行时和检测性能方面有了许多改进。它可以读取和写入多种格式的条形码。包括工业DM码、RQ码、以及其他常见的各种一维条形码。最新的ZXING2.2版本,支持旋转、反色、镜像、二值、多尺度解码。源码地址:

https://github.com/zxing-cpp/zxing-cpp

编译命令行

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -A x64
cmake --build build -j8 --config Release -A x64

深度定制

DM解码过程主要是由定位、预处理、解码这三个部分组成,定位的精准度直接决定了解码难度与解码速度,我们采用了传统图像分析与深度学习对象检测两种方式实现了精准的DM定位;预处理根据我们的大量数据积累发现三种手段最为有效分别是形态学、二值化、降噪滤波,所以在预处理阶段我们基于OpenCV实现了这三种预处理方式,大大提升了解码效率与精度;解码最主要的是要考虑容错性,很多商业级别的DM库容错性很强,这个方面ZXING有短板,通过我们大量数据测试与对ZXING源码的修改实现了这个部分提升,大大提升ZXING解码能力。
在这里插入图片描述

解码策略与对比测试

基于ZXING+OpenCV我们实现了三种不同的DM解码策略分别是快速、平衡、优化,提供了一套完整的界面参数与SDK,基于QT打包以后,测试对比一些在线收费的商业库的DM码解码能力,结果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到我们基于ZXING+OpenCV深度定制条码检测库DM码的能力已经完全超越了网上在线收费的商业库解码能力,对比Halcon、VP等主流工业级收费库,我们也是毫不孙色,在伯仲之间。

合作与源码购买请 +QQ 57558865

学习《OpenCV应用开发:入门、进阶与工程化实践》一书
做真正的OpenCV开发者,从入门到入职,一步到位!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/583576.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GuildFi升级为Zentry的背后 链游公会的探索与转型

​链游即区块链游戏,指依托区块链技术构建的游戏产品。其与传统游戏的最大区别在于区块链的去中心化特性对玩家的资产有着天然的确权行为,因此玩家在链游中的资产是作为玩家的个人资产存在。较于 GameFi 来说,链游的包含范围更大,…

吴恩达机器学习笔记:第 8 周-14降维(Dimensionality Reduction) 14.3-14.5

目录 第 8 周 14、 降维(Dimensionality Reduction)14.3 主成分分析问题14.4 主成分分析算法14.5 选择主成分的数量 第 8 周 14、 降维(Dimensionality Reduction) 14.3 主成分分析问题 主成分分析(PCA)是最常见的降维算法。 在 PCA 中,我们要做的是找到一个方向…

【高校科研前沿】华东师大白开旭教授博士研究生李珂为一作在RSE发表团队最新成果:基于波谱特征优化的全球大气甲烷智能反演技术

文章简介 论文名称:Developing unbiased estimation of atmospheric methane via machine learning and multiobjective programming based on TROPOMI and GOSAT data(基于TROPOMI和GOSAT数据,通过机器学习和多目标规划实现大气甲烷的无偏估…

OS复习笔记ch5-1

引言 讲解完进程和线程之后,我们就要来到进程的并发控制这里,这一章和下一章是考试喜欢考察的点,有可能会出大题,面试也有可能会被频繁问到,所以章节内容较多。请小伙伴们慢慢食用,看完之后多思考加强消化…

【JPE】顶刊测算-工业智能化数据(附stata代码)

数据来源:国家TJ局、CEC2008、IFR数据 时间跨度:2006-2019年 数据范围:各省、地级市 数据指标: 本数据集展示了2006-2019年各省、各地级市的共工业智能化水平的数据。本数据集包含三种构建工业机器人密度来反映工业智能化水平的方…

基于Springboot的数字化农家乐管理平台(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的数字化农家乐管理平台(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系…

Apache Seata基于改良版雪花算法的分布式UUID生成器分析2

title: 关于新版雪花算法的答疑 author: selfishlover keywords: [Seata, snowflake, UUID, page split] date: 2021/06/21 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 关于新版雪花算法的答疑 在上一篇关于新版雪花算法的解析中…

web前端学习笔记4

4. 盒子模型 4.0 代码地址 https://gitee.com/qiangge95243611/java118/tree/master/web/day044.1 什么是盒子模型(Box Model) 所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用。 CSS盒模型本质上是一个盒子,封装周围的HTML元素,…

在Docker中部署Java应用:Java版本隔离的实践案例

在Docker中部署Java应用:Java版本隔离的实践案例 人生就是一场又一场的相遇,一个明媚,一个忧伤,一个华丽,一个冒险,一个倔强,一个柔软,最后那个正在成长。 背景需求 在软件开发和部…

Debian 12 -bash: netstat: command not found 解决办法

问题表现: debian 12系统中,不能使用 netstat命令 处理办法: netstat 命令就的net-tools中,把net-tools工具安装上就好了。 apt-get install netstat 安装之后就可以使用netstat 命令了,如查询端口情况: …

基于SpringBoot+Vue高校宣讲会管理系统设计与实现

项目介绍: 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装高校宣讲会管理系统软件来发挥其高效地信息…

C# Web控件与数据感应之 Control 类

目录 关于数据感应 Control 类 范例运行环境 simpleDataListEx方法 设计 实现 调用示例 数据源 调用 小结 关于数据感应 数据感应也即数据捆绑,是一种动态的,Web控件与数据源之间的交互,诸如 ListControl 类类型控件,在…

pytest教程-35-钩子函数-pytest_unconfigure

领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了pytest_configure钩子函数的使用方法,本小节我们讲解一下pytest_unconfigure钩子函数的使用方法。 pytest_unconfigure(config) 是一个 pytest 钩子函数,它在 pytest 退…

【linux运维】vim基础应用

系列综述: 💞目的:本系列是个人整理为了学习基本的shell编程和linux命令,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于b站大学——linux运维课程进行的,…

【MHA】MySQL高可用MHA源码1-主库故障监控

1 阅读之前的准备工作 1 一个IDE工具 ,博主自己尝试了vscode安装perl的插件,但是函数 、变量 、模块等都不能跳转,阅读起来不是很方便。后来尝试使用了pycharm安装perl插件,阅读支持跳转,自己也能写一些简单的测试样例…

[iOS]组件化开发

一、组件化开发基础 1.组件定义 在软件开发中,一个组件是指一个独立的、可替换的软件单元,它封装了一组相关的功能。组件通过定义的接口与外界交互,并且这些接口隔离了组件内部的实现细节。在Swift语言中,组件可以是一个模块、一…

CCF-CSP真题题解:201312-2 ISBN号码

201312-2 ISBN号码 #include <iostream> #include <cstring> #include <algorithm> using namespace std;string s;int main() {cin >> s;int num 0;for (int i 0, p 1; i < s.size() - 1; i)if (s[i] ! -) {num (s[i] - 0) * p;p;}num % 11;ch…

win11 自带分区磁盘管理,右键U盘 删除卷,显示不支持该请求

win11 自带分区磁盘管理&#xff0c;右键U盘 删除卷&#xff0c;显示不支持该请求&#xff0c;打开cmd 输入下面命令 1.diskpart 2.list disk 3.sel disk (U盘盘符编号) 4.clean

Linux vi\vim编辑器

vi/vim编辑器 一、vi\vim 编辑器的三种工作模式1.命令模式&#xff08;Command mode&#xff09;2.输入模式&#xff08;Insert mode&#xff09;3.底线命令模式&#xff08;Last line mode&#xff09; 二、参考 vi\vim 是 visual interface 的简称&#xff0c;是 Linux 中最经…

Tcp 协议的接口测试

首先明确 Tcp 的概念&#xff0c;针对 Tcp 协议进行接口测试&#xff0c;是指基于 Tcp 协议的上层协议比如 Http &#xff0c;串口&#xff0c;网口&#xff0c; Socket 等。这些协议与 Http 测试方法类似&#xff08;具体查看接口自动化测试章节&#xff09;&#xff0c;但在测…