历史上的今天
返回首页

历史上的今天

今天是:2024年12月04日(星期三)

正在发生

2019年12月04日 | 立功科技嵌入式平台“软”实力—二维码算法

2019-12-04 来源:EEWORLD

摘要:二维码不仅给人们生活带来便捷,在工业领域也被广泛应用。如何在嵌入式硬件中开发二维码功能?本文将为大家介绍ZLG二维码识别算法,教大家在ZLG硬件平台中快速搭建具备良好识别效果的二维码。

 

二维码的本质就是根据某种约定的编码方式,将一段文本信息转换为一个能够被解码识别的图片。因为二维码只是一种编码方式,是一种信息的载体,可见二维码用途的关键不在于二维码,而在于如何定义这段文本信息,约定好文本信息的用途。当前,二维码支付功能已经改变了我们的生活方式,出行不再需要带上现金,就能够通过二维码乘公交、搭地铁、打出租车、付停车费和超市购物付款等等。由于QR码具有信息容量大、可靠性高和保密防伪性强等特点,常见的二维码支付均采用QR码。

 

接下来将对ZLG二维码算法进行介绍,分别阐述ZLG二维码算法特点、接口调用方法、可实现平台与性能及效果展示。

 

一、二维码算法特点

 

由于二维码支付相关领域的迅速发展,ZLG针对性的进行了二维码识别算法的研发和优化,目前ZLG二维码算法库仅提供QR码接口的调用。QR码识别算法特点如下:

 

以算法库的形式提供,支持多平台移植,可在现有硬件上使用,大大节省成本;

 

算法调用简单,方便开发人员快速实现QR码识别功能;

 

同时支持手机屏幕条码和纸质条码,适用范围广;

 

识别速度快,针对手机支付场景的优化,可实现闪付;

 

支持手机碎屏QR码识别,贴合实际使用的场景。 

 

二、二维码接口调用

 

ZLG二维码算法库目前提供文件列表为: aw_qrcode.h、 libqr.a或libqr.so。算法调用方式简单,仅需要算法初始化、解码和内存释放三个步骤,QR码算法头文件“aw_qrcode.h”接口如下:

 

 

我们以基于AWorks系统的M7系列平台为例,成功调用ZLG二维码算法之前,需要准备的工作如下:

 

保证能够获取到摄像头的视频帧数据(不同平台可以有不同的实现方式,linux系统可以通过opencv获取图像帧数据),并且转为单通道的灰度图。例如,基于AWorks系统的M7平台demo使用如下接口获取RGB565格式的图像。

 

 

由于获取到的图像为RGB565格式,需要转换为单通道灰度图,接口如下:

 

 

至此,准备工作已经完成,算法所需要的灰度图数据已经得到。接下来进行算法调用,二维码识别接口调用存在三个步骤。

 

首先,使用算法初始化接口实现内存的初始化操作:

 

 

接着,即可通过QR码解码接口实现二维码图像解码操作,指针 imgData指向的地址即为灰度图像存放的地址。

 

 

最后,释放初始化过程中分配的内存:

 

 

基于AWorks系统的M7平台调用二维码算法伪代码如下:

 

 

三、ZLG算法合作模式及平台支持

 

ZLG二维码算法可以以SDK包的形式免费开放给各位工程师,只需使用ZLG嵌入式核心板(硬件平台)即可快速开发出具备商用性能的二维码识别应用。算法原则上可以支持基于AWorks和Linux系统的所有硬件平台。目前,主要测试了基于AWorks系统的M7系列平台,及基于Linux系统的A7和A8系列平台的相关性能,并通过提供静态库或动态库的方式供使用。

 

各平台算法性能如下表:

 

 

四、效果展示

 

基于cortex-m7系列M1052-M16F128AWI -T平台的二维码识别demo配有4.3寸液晶显示屏, 以类似于手机扫码的体验,快速识别QR码,显示识别的结果。效果如下所示:

 

  

视频中分别展示了基于AWorks系统的cortex-m7硬件平台、普通连续扫码情形下的纸质和屏幕码识别、自动感应(通过感应到扫码操作来触发算法,屏幕亮暗用来模拟补光灯亮灭)扫码情形下的纸质和屏幕码识别,以及碎屏情况下的屏幕码识别。

 

M1052-M16F128AWI-T产品图片:

 

 

五、关于算法库获取

 

关于算法库的获取可以咨询ZLG立功科技与ZLG致远电子相关市场人员。


推荐阅读

史海拾趣

DIOTECH公司的发展小趣事

随着全球环保意识的不断提高,DIOTECH公司也开始关注绿色环保和可持续发展问题。公司投入大量研发资源,成功开发出了一系列绿色电子产品,这些产品在生产过程中采用了环保材料和生产工艺,并且具有低功耗、长寿命等特点。这些产品的推出不仅满足了市场对环保产品的需求,也提升了公司的社会责任感和品牌形象。

EMBEST公司的发展小趣事

EMBEST公司成立于XXXX年,早期便专注于ARM嵌入式软件的开发。在XXXX年,EMBEST发布了国内首个具有自主知识产权的ARM嵌入式软件开发工具Embest IDE For ARM,这一里程碑式的产品不仅填补了国内市场的空白,也为EMBEST在嵌入式领域的地位奠定了基础。通过持续的创新和研发,EMBEST逐步建立了自己的技术壁垒,为公司的长远发展奠定了坚实基础。

AMI [American Megatrends Inc]公司的发展小趣事

EMBEST公司成立于XXXX年,早期便专注于ARM嵌入式软件的开发。在XXXX年,EMBEST发布了国内首个具有自主知识产权的ARM嵌入式软件开发工具Embest IDE For ARM,这一里程碑式的产品不仅填补了国内市场的空白,也为EMBEST在嵌入式领域的地位奠定了基础。通过持续的创新和研发,EMBEST逐步建立了自己的技术壁垒,为公司的长远发展奠定了坚实基础。

Hasco Relays and Electronics International Corp公司的发展小趣事

进入21世纪后,Harris公司经历了重要的战略转型。2019年,Harris与L3 Technologies合并成立了L3Harris Technologies。这次合并旨在通过整合两家公司的技术、资源和市场优势,打造一家综合性的国防和信息技术公司。合并后的L3Harris在通信系统、雷达系统、太空和导航系统等多个领域均取得了显著进展,进一步提升了其在电子行业中的竞争力。

艾为(AWINIC)公司的发展小趣事

艾为电子自成立以来,一直致力于技术研发和产品创新。公司研发团队不断攻克技术难题,推出了一系列具有竞争力的产品。其中,音频功放芯片作为公司的主打产品之一,凭借出色的性能和稳定的品质,赢得了市场的广泛认可。此外,艾为还在信号链、电源管理等领域取得了显著的技术突破,为公司的持续发展奠定了坚实的基础。

远东福斯特公司的发展小趣事

随着艾为电子在技术和产品方面的不断突破,公司开始积极拓展市场。艾为电子的产品不仅覆盖了华为、小米等知名手机厂商,还广泛应用于可穿戴设备、智能便携设备等领域。同时,公司还加大了品牌建设的力度,通过参加行业展会、举办技术研讨会等方式,提高了品牌知名度和影响力。

问答坊 | AI 解惑

AVR(MEGA16)入门教程,详细的图解教程

AVR(MEGA16)入门教程,详细的图解教程…

查看全部问答>

如何用红外对射开关控制继电器

我想用一个红外对射开关控制欧姆龙MY2NJ继电器工作,对射开关的型号见图片 我用黄颜色的线接到继电器,继电器不能工作,继电器都是好的,我用12V电压直接控制继电器,是可以工作的,但用感应的不知道怎么接法。 红外对射开关工作电压是5V,继电器 ...…

查看全部问答>

在动车组两个车厢中的无线传输用什么样的方式更好

想在动车组两个车厢中实现数据的无线传输。 也考虑到一些实现方法,但是由于动车组有屏蔽大,速度快特点,造成无线数据包传输难度很大。 请问各位高手,用什么方式能达到这个目的呢?前提是不对车厢作出改造,比如车体外安装天线等 …

查看全部问答>

smart lcd 和普通lcd有哪些区别,驱动起来有何不同

smart lcd 和普通lcd有哪些区别,驱动起来有何不同?…

查看全部问答>

又是一个石沉大海的问题!!??

如何在驱动代码中,获得U盘的插入?并获得其盘符(注:此U盘无文件系统) 谢谢,有钱的捧个钱场,无钱的捧个情场…

查看全部问答>

Fluke 27-II防水防尘数字多用表精确的使用方法

Fluke 27-II 工业多用表 新型 Fluke 27 II数字多用表树立了在困难情况下进行测量的新标准,它具有优异的功能和准确度,可以轻松解决大多数电气故障。 这款多用表均符合 IP 67(防水和防尘)规格,正在接受 MSHA 的认证审批,并且拥有更广的工作温 ...…

查看全部问答>

网页转换工具FCARM和makefsfile的使用简介

    首先在这里要提一下Keil的网页转换工具FCARM.exe的使用,花费了我好几个小时。TI也有一个类似的程序,是Makefsfile,并且源码公开的。     这个FCARM.exe,一直认为只要这个custom arguments里边设置好了FCarm.exe的路径就可以在勾 ...…

查看全部问答>

有没有可以监视USB数据传送的软件?

                                 就像串口调试时监视串口那种的,谢谢。。。…

查看全部问答>

新手问一个简单的问题

我写了一个简单的求正旋值的c程序: #include<math.h> #define NX 180 #define pi 3.14159 short i; double x[NX]; double r[NX]; void main(void) { for(i=0;i<NX;i++)   {x=pi*i/180;    r=sin(x);   ...…

查看全部问答>