AI嵌入式K210项目(26)-二维码识别

文章目录

  • 前言
  • 一、什么是二维码?
  • 二、实验准备
  • 三、实验过程
  • 四、API接口
  • 总结


前言

本章介绍基于机器视觉实现二维码识别,主要包含两个过程,首先检测图像中是否有二维码,如果有则框出并打印二维码信息;

一、什么是二维码?

二维码,也称为二维条码,是一种在二维方向上编码信息的方式。它使用特定的几何图形按一定规律在平面上分布,形成黑白相间的图形。二维码是在一维条码的基础上扩展出来的,比一维条码能存更多的信息,也可以表示更多的数据类型。设备通过扫描二维码,可以识别条码中的二进制数据并获取其中的信息。二维码具有成本低、稳定可靠、简单易用等特点,被广泛应用于电子公文、票据、证件管理、包裹、货运物品追踪、仓储盘点、出版印刷业信息交换等领域,极大地提高了数据采集和信息处理的速度,提高了工作效率。此外,二维码还可以表示图像、多种语言,便于加密处理。同时,融入数字水印防伪技术后的二维码可以防止对条码的伪造和非法复制,能够更有效的对信息进行加密,进一步保护产权,打击盗版,具有广阔的商业开发价值和应用前景。

二、实验准备

首先我们先生成一个带有信息的二维码图片,用于验证我们的功能;可以到https://cli.im/url这个网站上进行免费生成
在这里插入图片描述

生成后如下图所示:
在这里插入图片描述

三、实验过程

导入相关库,并初始化摄像头和LCD显示屏;

import sensor, image, time, lcd
​
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 100)

利用内置find_qrcodes函数来查找是否有二维码,如果有则把二维码框出来,并打印出二维码信息。

clock = time.clock()
while(True):
    clock.tick()
    img = sensor.snapshot()
    for code in img.find_qrcodes():
        img.draw_rectangle(code.rect(), color = 127, thickness=3)
        print(code)
    lcd.display(img)
    #print(clock.fps())

在这里插入图片描述
串口信息大小印如下,可以看到二维码信息被正确读取了;
在这里插入图片描述

四、API接口

更多API接口可以参考https://developer.canaan-creative.com/canmv/main/canmv/library/index.html
在这里插入图片描述

函数说明
qrcode.corners()返回一个由该对象的四个角组成的四个元组(x,y)的列表。四个角通常是按照从左上角开始沿顺时针顺序返回的。
qrcode.rect()返回一个矩形元组(x, y, w, h),用于如二维码的边界框的
qrcode.x()返回二维码的边界框的x坐标(int)。索引 [0] 取得这个值。
qrcode.y()返回二维码的边界框的y坐标(int)。索引 [1] 取得这个值。
qrcode.w()返回二维码的边界框的w坐标(int)。索引 [2] 取得这个值。
qrcode.h()返回二维码的边界框的h坐标(int)。索引 [3] 取得这个值。
qrcode.payload()返回二维码有效载荷的字符串,例如URL 。索引 [4] 取得这个值。
qrcode.version()返回二维码的版本号(int)。索引 [5] 取得这个值。
qrcode.ecc_level()返回二维码的ECC水平(int)。索引 [6] 取得这个值。
qrcode.mask()返回二维码的掩码(int)。索引 [7] 取得这个值。
qrcode.data_type()返回二维码的数据类型。索引 [8] 取得这个值。
qrcode.eci()返回二维码的ECI。ECI储存了QR码中存储数据字节的编码。若您想要处理包含超过标准ASCII文本的二维码,您需要查看这一数值。索引 [9] 取得这个值。
qrcode.is_numeric()若二维码的数据类型为数字式,则返回True。
qrcode.is_alphanumeric()若二维码的数据类型为文字数字式,则返回True。
qrcode.is_binary()若二维码的数据类型为二进制式,则返回True。如果您认真处理所有类型的文本,则需要检查eci是否为True,以确定数据的文本编码。通常它只是标准的ASCII,但是它也可能是有两个字节字符的UTF8。
qrcode.is_kanji()若二维码的数据类型为日本汉字,则返回True。设置为True后,您就需要自行解码字符串,因为日本汉字符号每个字符是10位,而MicroPython不支持解析这类文本。

总结

本章介绍了使用K210调用qrcode接口进行二维码识别的应用。

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

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

相关文章

Re-understanding of data storytelling tools from a narrative perspective

作者:任芃锟, 王轶 & 赵凡 发表:Visual Intelligence,新刊,实行单盲同行评议制度。由施普林格以开放获取 (Open Access) 模式出版。获2022“中国科技期刊卓越行动计划高起点新刊”项目资助,目前出版不收取文章处理…

瑞幸CNY营销又整了哪些花活?媒介盒子分享

还有不到一周时间,龙年春节就要来了,在这场龙年营销大战中,咖啡界的“显眼包”瑞幸又又又凭借花式营销成功出圈,从产品到物料包装,从联名合作到粉丝营销,海陆空全方位上线,那瑞幸具体怎么整的活…

深入探索CoT有效性和推理步长对于LLM性能的影响

思想链(CoT)对于提高大型语言模型(LLM)的推理能力具有重要意义。 然而,CoT 的有效性与提示中推理步骤的长度之间的相关性仍然很大程度上未知。 为了阐明这一点,多家研究机构(西北大学、罗格斯大…

【UE 材质】扇形材质

目录 效果 步骤 (1)控制扇形的弧宽度 (2)控制扇形的角度 (3)完整节点 效果 步骤 (1)控制扇形的弧宽度 创建一个材质,混合模式设置为“Additive”,着色…

【Java 数据结构】String进阶

字符串常量池 1. 创建对象的思考2. 字符串常量池(StringTable)3. 再谈String对象创建 1. 创建对象的思考 下面两种创建String对象的方式相同吗? public static void main(String[] args) {String s1 "hello";String s2 "hello";String s3 …

JVM 性能调优 - Java 中的四种引用(4)

为什么会有四种引用 我们先回顾下在 Java 虚拟机内存体系(1) 中提到了的垃圾回收算法 1、引用计数法 原理:给对象添加一个引用计数器,每当有一个地方引用它,计数器的值就加一。每当有一个引用失效,计数器的值就减一。当计数器值为零时,这个对象被认为没有其他对象引用,…

070:vue+cesium: 利用canvas设置径向渐变色材质

相关API参考: https://cesium.com/learn/cesiumjs/ref-doc/ColorMaterialProperty.html 第070个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置线性渐变色的材质,这里使用canvas的辅助方法。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. …

centos间文件传输

scp /home/vagrant/minio zx192.168.56.34:/home/zx /home/vagrant/minio 是你要传输的文件而且是当前机器登录用户有权限操作的文件 zx是目标机器的用户192.168.56.34是目标机器的地址 /home/zx是要传到这个文件夹下 要确保zx有/home/zx这个文件夹的操作权限 本质就是ssh文…

[leetcode] 27. 移除元素

文章目录 题目描述解题方法双指针java代码复杂度分析 相似题目 题目描述 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O ( 1 ) O(1) O(1) …

分布(一)利用python绘制直方图

分布(一)利用python绘制直方图 直方图(Histogram)简介 直方图主要用来显示在连续间隔(或时间段)的数据分布,每个条形表示每个间隔(或时间段)的频率,直方图的…

2024年考PMP还有什么用?

PMP 是项目管理专业人士资格认证的意思,也是项目管理领域通用的证书, 做项目的基本都会去考。 要说 PMP 有啥作用? 个人感觉 PMP 证书更多的是跳槽、转行的敲门砖的作用,因为现在很多公司都要 PMP 证书,有了可以加分…

VS Code+Live Server插件开发游戏并结合内网穿透分享好友异地访问

文章目录 前言1. 编写MENJA小游戏2. 安装cpolar内网穿透3. 配置MENJA小游戏公网访问地址4. 实现公网访问MENJA小游戏5. 固定MENJA小游戏公网地址 前言 本篇教程,我们将通过VS Code实现远程开发MENJA小游戏,并通过cpolar内网穿透发布到公网,分…

springboot157基于springboot的线上辅导班系统的开发与设计

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

fastapi 链接数据库,并报错问题

还有一个重点需要下载 pip install sqlalchemy -i https://pypi.tuna.tsinghua.edu.cn/simple pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simplefrom fastapi import FastAPI import uvicorn from student.urls import student_id_mysql from sqlalchemy …

【sentinel流量卫兵配置持久化到Nacos】

sentinel流量卫兵配置持久化到Nacos 概述: 一、添加配置二、配置说明限流规则配置:降级规则配置:热点规则配置:授权规则配置:系统规则配置: 三、服务整合 概述: 控制台配置的参数,默…

2024/2/4学习记录

微信小程序 网络数据请求 出于安全性方面的考虑,小程序官方对数据接口得请求做出了俩个限制 只能对 https 类型的接口必须将接口的域名添加到信任列表中 需要去这里设置 域名只支持 https 协议域名不能使用 ip 地址 或者localhost域名必须经过 ICP 备案 服务器域…

【C++】基础语法:深浅拷贝

前言 在学习拷贝构造函数的时候遇到了深浅拷贝这个知识点 就写篇文章记录一下 (引用的部分不用太在意 是查的 (需要前提知识:知道默认拷贝构造函数是什么 知道默认拷贝构造函数和构造函数的关系、知道析构函数的写法和用处 浅拷贝 浅拷贝&…

周报(20240204)

日期:2024.1.29 - 2024.2.4 本周工作: 1. 阅读论文 本周主要对这篇文献进行了阅读: 《用可学习的跳跃连接缩小U-Net中的语义差距:以医学图像分割为例》 背景 医学图像分割和随后对目标对象的定量评估为疾病诊断和治疗规划提…

在Vue中如何动态绑定class和style属性

在Vue中,动态绑定class和style属性是我们经常遇到的需求。这个功能允许我们根据不同的条件来动态改变元素的样式,让我们的应用更加灵活和富有交互性。在本篇博客文章中,我将带你深入探索在Vue中如何实现这一功能。 首先,让我们了…

c++中使用ifstream对文件按照行间隔或者符号间隔来读取

简单的文本存取与读取在的程序中是比较常见的,一般为了读取的时候便于区分数据,我们常常会用空格或者空行来隔开数据字段,所以对于读取文件的操作我们肯定会有些具体的需求比如按照行读取或者按照词来读取(或者说是以空格来间隔数…