2023 电赛 E 题 K210 方案--K210实现矩形识别

news2025/1/16 12:32:52

相关库介绍

sensor(摄像头)

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(10)

reset():重置并初始化单目摄像头

set_pixformat():设置摄像头输出格式,可选的帧格式有GRAYSCALERGB565YUV422,需要根据自己的摄像头进行修改

set_framesize():设置摄像头输出帧大小,最大支持VGA格式,推荐设置为QVGA格式

skip_frames():跳过指定帧数或者跳过指定时间内的图像,主要作用为让摄像头识别的图像稳定下来,画面不抖动

代码介绍

识别的具体思路可以看2023 电赛 E 题 K210方案 第五章

矩形阈值设定

 图1 选择阈值编辑器

  图2 阈值调节框

通过调节LAB值来得到让图中矩形框为白或为黑。

得到LAB阈值:(73, 16, -67, 30, 55, -56)

  图3 阈值调节结果

注:在实际情况中,这个阈值需要进行调整,在不同环境因素下,即使在同一个地方,由于不同的距离和光线,都会影响阈值的最终结果。

建议:在进行阈值设定时,可以多考虑不同的情况下,不同的阈值情况,让代码选择在不同的情况下的不同阈值;或则收集到足够多的阈值,使用聚类方法将其得到一个中间值。

关键代码

    # 寻找轮廓
    contours = img.find_blobs(region_thresholds1[i], invert=False, area_threshold=100, pixels_threshold=10, merge=True)
    if contours:
        max_blob = find_min(contours)
        if max_blob:
            img.draw_rectangle(max_blob[0:4], color=(0,255,0))

find_blobs():查找图像中所有色块,并返回一个包括每个色块的色块对象的列表。

thresholds: 必须是元组列表. [(minL, minA, minB, maxL, maxA, maxB)],就是阈值

invert:反转阈值操作,像素在已知颜色范围之外进行匹配,而非在已知颜色范围内。

即:在调节的阈值中需要的为黑色,通过反转后,就会检测白色部分,返回白色部分的色块。

area_threshold:若一个色块的边界框区域小于该值,则会被过滤掉。

pixels_threshold:若一个色块的像素数小于该值,则会被过滤掉。

merge :True,则合并所有没有被过滤掉的色块,这些色块的边界矩形互相交错重叠。

通过调用该方法就可以找到在画面中所需要的所有结果。

返回值:[{'x': 140, 'y': 88, 'w': 15, 'h': 7, 'pixels': 43, 'cx': 147, 'cy': 91}]
(x, y, w, h)表示色块的外框,pixels表示色块的像素大小,(cx, cy)表示色块的中心点。

def find_min(blobs):
    use_ = [20,20, 280,200]
    max_size = float("inf")
    min_blob = None
    for blob in blobs:
        if blob[0] != 0 and blob[1] != 0:
            if is_rect_in_rect(use_, blob[0:4]) or abs(abs(blob[0] - blob[2]) - abs(blob[1] - blob[3])) < max_size:
                print(blob)
                min_blob = blob
                min_size = abs(abs(blob[0] - blob[2]) - abs(blob[1] - blob[3]))
    return min_blob

find_min():该函数的作用时从得到的矩形框中选出我们需要的,剔除掉不合适的。

在这个函数里面我们限定识别到的矩形框应该在整个画面的中心位置,不能出现在画面的边界位置。

并且我们还去掉了一种特殊情况,就是当摄像头什么都没有识别到或识别画面为空(显示为黑色)时,就会把整个画面进行框起来,这种是一种特殊情况,在代码中通过判断矩形的起始坐标是否w为0,如果为0,就去掉该种情况。

出现的问题

1、当画面距离摄像头太远时,识别的效果会不佳。

2、在移动过程中,会出现识别不佳。

3、画面模糊。

4、代码频频报错,不知道什么原因。

解决的问题

1、可以等摄像头稳定时,看看它的识别效果怎样,尽量不要用手去移动,可以使用一个支架。

2、在移动过程中,可以考虑给摄像头加一个跳帧识别,或则选用一个高性能的摄像头。

3、这个可能时在初始化摄像头时没有设置对,或则摄像头已经损坏。

4、K210中使用的Python语言并不是一个完整的Python,简称MicroPython,与Python是有区别的,因此在编写代码中要额外注意,不能混淆两则。如果语法正确,那就可能是当前安装的固件中不支持当前代码的库,这样就需要去更新固件。

实现效果

 图4 识别效果1

 图5 识别效果2

下一章内容:对当前代码进行修改和完善,使其在远距离也能够进行识别。

 硬性的标准其实限制不了无限可能的我们,所以啊!少年们加油吧!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开发框架软件公司:与之携手,共同开启办公流程化之路!

在快节奏的社会里&#xff0c;如何提高企业的办公效率&#xff1f;如何让各部门之间的协作关系更为顺畅&#xff1f;如何把企业内部的数据真正利用起来&#xff0c;成为高层做出经营决策的重要依据&#xff1f;其实&#xff0c;要做到这些&#xff0c;与开发框架软件公司联手合…

无人机机巢有哪些,无人机机场/机场的主要分类

随着无人机技术的飞速发展&#xff0c;无人机已经渗透到了物流、农业、救援、公共安全等多个领域。而为了使这些无人机能更加高效、灵活地运行&#xff0c;一个新的概念应运而生&#xff0c;那就是无人机机巢&#xff08;UAV Nest&#xff09;。复亚智能无人机机巢是一种供无人…

8.3一日总结

1.远程仓库的使用 a.克隆远程仓库 1>.在桌面克隆远程仓库 git clone 仓库名 2>.修改仓库内容 3>添加目录 git add. 4>提交: git commit -m 完成登录功能 5>推送提交远程仓库 : git push origin master -u 6>更改推送:git push(简写形式) 需要先添加,再提交,最…

学习潘海东博士的《潮汐调和分析原理和应用》和调和分析软件S_Tide

潘海东博士在B站&#xff08;用户名&#xff1a;ocean_tide&#xff09;分享了他的电子书《潮汐调和分析原理和应用》&#xff0c;以及他开发的潮汐调和分析工具包S_Tide&#xff0c;非常厉害。 水文同事在进行潮汐预报的时候&#xff0c;会经常说到调和分析和调和常数&#x…

AI无监督异常检测项目记录

前言 半年时间没更新博客&#xff0c;这期间主要验证搞通了几个最适合无监督项目落地的网络&#xff0c;选了几个比较好的网络进行落地部署。 进度 --------------------------------------------------------------------------------------------------------------------…

全面解析大语言模型的工作原理

当ChatGPT在去年秋天推出时&#xff0c;在科技行业乃至世界范围内引起了轰动。当时&#xff0c;机器学习研究人员尝试研发了多年的语言大模型&#xff08;LLM&#xff09;&#xff0c;但普通大众并未十分关注&#xff0c;也没有意识到它们变得多强大。 如今&#xff0c;几乎每个…

ICMP协议(Internet控制消息协议)

系列文章目录 华为数通学习&#xff08;3&#xff09; 目录 前言 一&#xff0c;什么是ICMP协议&#xff1f; 二&#xff0c;实例&#xff1a;路由之间相互直连ping 三&#xff0c;了解ICMP报文 ​编辑 3.1&#xff0c;为什么要了解这个字段呢? 四&#xff0c;ICMP重定…

全国产EtherCAT运动控制边缘控制器(一):ZMC432H硬件接口

为了方便用户了解ZMC432H&#xff0c;本节课程主要给大家介绍一下全国产EtherCAT运动控制边缘控制器ZMC432H的硬件接口与功能。 一、功能简介 全国产EtherCAT运动控制边缘控制器ZMC432H是正运动的一款软硬件全国产自主可控&#xff0c;运动控制接口兼容EtherCAT总线和脉冲型的…

【雕爷学编程】MicroPython动手做(33)——物联网之天气预报2

天气&#xff08;自然现象&#xff09; 是指某一个地区距离地表较近的大气层在短时间内的具体状态。而天气现象则是指发生在大气中的各种自然现象&#xff0c;即某瞬时内大气中各种气象要素&#xff08;如气温、气压、湿度、风、云、雾、雨、闪、雪、霜、雷、雹、霾等&#xff…

软件供应链的基础:SBOM

软件作为一种强大的工具&#xff0c;可以简化复杂的技术概念&#xff0c;但随着软件不可思议的力量而来的是一个相互关联的软件依赖迷宫&#xff0c;这些依赖常常构成软件开发的基础。这些依赖关系并非没有缺陷&#xff0c;正如我们从 Log4Shell 这样的事件中所了解到的那样。当…

详解WebSocket

目录 1.WebSocket是什么&#xff1f; 2.WebSocket的通信过程 3.WebSocket的报文结构 4.JAVA中的WebSocket 1.WebSocket是什么&#xff1f; 在传统的BS体系中&#xff0c;请求响应一直是单向的&#xff0c;服务器一直扮演的”被动“的角色&#xff0c;浏览器发起请求去访问…

FFmpeg常见命令行(一):FFmpeg工具使用基础

前言 在Android音视频开发中&#xff0c;网上知识点过于零碎&#xff0c;自学起来难度非常大&#xff0c;不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》。本文是Android音视频任务列表的其中一个&#xff0c; 对应的要学习的内容是&#xff1a;FFmpe…

Windows下安装sqlmap及应用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Windows下安装sqlmap前提下载安装创建快捷方式修改属性 使用验证安装成功 使用GET猜解是否能注入查找数据库猜解表(假如通过(2)得到了web1这个数据库)根据猜解的表进…

uniApp 插件 Fvv-UniSerialPort 使用实例

接上一篇 uniApp 对接安卓平板刷卡器, 读取串口数据 , 本文将详细介绍如何使用插件读取到串口数据 原理 通过uniApp 插件读取设备串口数据, 解析后供业务使用; 步骤 创建uniApp 项目;添加插件 安卓串口通信 Fvv-UniSerialPort 安卓串口通信 Fvv-UniSerialPort - DCloud 插件…

简单高效的npm地址源管理器

Note: 这个库的灵感来自于使用 nrm 时只切换 npm 的问题 您可以使用此库来帮助npm、cnpm、yarn和pnpm快速切换下载地址源。此外&#xff0c;你还可以指定单个或多个地址源进行切换。 这个库将为您省去切换地址源的许多麻烦&#xff01; 1、为什么使用 但你想要简单快速地切换…

宝塔Linux面板Java项目部署域名访问 (SpringBoot项目)

1. 域名解析 (阿里云) 我的域名是阿里云, 服务器是腾讯云 2. SSL证书申请 (阿里云) 3. 证书签发成功 (阿里云) 4. 下载Nginx证书 (阿里云) 5. 解压获取 .key 和 .pem 文件 6. 添加域名 (腾讯云) 7. 添加域名 (宝塔面板) 8. SSL (宝塔面板) 9. SSL 添加成功 10. 域名访问项目 (成…

【AI底层逻辑】——篇章6:人工神经网络(深度学习算法)

目录 引入 一、深度学习算法 1、人工神经网络结构 2、卷积神经网络 3、循环神经网络&#xff1a;模拟记忆 ①循环神经网络 ②长短时记忆网络&#xff08;LSTM&#xff09; 4、强化学习 ①强化学习的控制论 ②强化学习的反馈机制 ③马尔可夫决策过程 ④强化学习的重…

开始学习 Kafka,一文掌握基本概念|Kafka 系列 一

如果你还不了解 Kafka&#xff0c;或者也打算深入探索、系统学习&#xff0c;那么欢迎有同样目标的小伙伴可以加群交流&#xff0c;让学习之路不再孤独。 一个人可能走的很快&#xff0c;但是一群人会走的更远。&#xff08;后台回复&#xff1a;加群&#xff09; 点击上方“后…

如何做好主机安全防护

当今数字化时代&#xff0c;网络安全威胁和风险日益突出&#xff0c;已成为企业面临的重大安全挑战。网络攻击者不断尝试利用各种技术和手段对企业网络资源进行探测和攻击&#xff0c;如&#xff1a;利用漏洞、木马、钓鱼、勒索等方式窃取数据、破坏系统、篡改信息。因此&#…

Semantic Kernel 入门系列:Semantic Function

如果把提示词也算作一种代码的话&#xff0c;那么语义技能所带来的将会是全新编程方式&#xff0c;自然语言编程。 通常情况下一段prompt就可以构成一个Semantic Function&#xff0c;如此这般简单&#xff0c;如果我们提前可以组织好一段段prompt的管理方式&#xff0c;甚至可…