2023 电赛 E 题 K210 方案
第一章:K210 介绍
K210芯片是一款基于RISC-V架构的嵌入式人工智能芯片,具备低功耗、高性能的特点。它拥有强大的图像处理和机器学习能力,适用于边缘计算设备和物联网应用。为了方便开发者,K210芯片提供了丰富的外设接口,包括摄像头接口、显示接口、WiFi、蓝牙等,同时支持多种编程语言和开发环境,如MicroPython和C语言。在计算机视觉领域,K210芯片被广泛应用于对象检测、人脸识别、图像分类等任务,能够实现快速的图像处理和分析。
K210 官网
第二章:矩形识别的基本原理
矩形识别是计算机视觉领域中常见的任务之一,它主要涉及图像处理和机器学习算法。
-
对于图像的预处理,可以根据具体需求选择合适的方法进行降噪、分辨率调整和对比度增强等操作。例如,可以使用滤波器进行降噪,使用插值算法进行分辨率调整,使用直方图均衡化进行对比度增强。
-
特征提取阶段需要根据具体的矩形特征进行选择合适的方法。边缘检测算法可以帮助找到图像中的边界信息,常用的算法包括Sobel算子和Canny边缘检测算法。直线检测可以使用Hough变换来识别直线,而角点检测算法可以使用Harris角点检测或Shi-Tomasi角点检测等方法。
-
矩形检测阶段可以使用霍夫变换或其他算法来检测图像中的矩形。霍夫变换可以通过累加直线参数来找到直线,进一步组合成矩形。也可以使用基于角点特征的方法,例如使用RANSAC算法来拟合矩形模型。还可以结合机器学习算法,如基于深度学习的目标检测方法,来实现矩形检测。
-
矩形定位可以通过计算矩形的边界框或角点坐标来实现。根据具体需求,可以选择不同的方式表示矩形的位置和大小,例如使用左上角和右下角坐标、中心点和宽高等。
-
矩形识别应用广泛,根据具体场景和需求,可以进行目标检测、边缘检测等任务。例如,在自动驾驶中,矩形识别可以帮助车辆识别道路的边界和交通标志;在工业领域,矩形识别可以用于产品的质量检测和生产线的自动控制。此外,矩形识别还可以应用于机器人视觉、安防监控等领域。
第三章:图像预处理与特征提取
在矩形识别任务中,图像预处理和特征提取是非常关键的步骤。
3.1 图像采集与传输
在进行图像预处理和特征提取之前,需要先将图像从 K210 开发板采集并传输到计算机上进行处理。可以通过连接相机模块或者摄像头到 K210 开发板来实现。
3.2 图像预处理
图像预处理旨在提高图像质量,减少后续处理过程中的噪声和干扰。以下是一些常见的图像预处理方法:
- 降噪:使用滤波器(如高斯滤波器)对图像进行平滑处理,去除图像中的噪声。
- 阈值处理:使用阈值对图像进行处理,选取需要的区域。
- 对比度增强:通过直方图均衡等方法增强图像的对比度,使得图像中的信息更加明显。
- 光照校正:对图像的亮度进行调整,使得图像中的目标更加清晰可见。
3.3 特征提取
特征提取是矩形识别中的关键步骤,它从图像中提取出与矩形相关的特征信息。以下是几种常用的特征提取方法:
- 边缘检测:边缘是图像中物体之间的界限,通过使用边缘检测算法(如Canny算法、Sobel算法等),可以找到图像中的边缘信息。
- 直线检测:直线是矩形的基本组成部分,通过使用直线检测算法(如霍夫变换),可以找到图像中的直线段。
- 角点检测:角点是矩形的关键特征点,通过使用角点检测算法(如Harris角点检测、FAST角点检测等),可以找到图像中的角点位置。
这些提取到的特征可以作为后续矩形检测和定位的输入,帮助我们准确定位和识别图像中的矩形目标。
第四章:矩形检测与定位
在矩形识别任务中,矩形检测与定位是核心步骤之一。
4.1 矩形检测算法
矩形检测算法旨在从图像中找到可能的矩形目标。以下是几种常用的矩形检测算法:
- 霍夫变换:霍夫变换是一种常用的图像处理技术,可以用于检测直线和其他形状。在矩形检测中,可通过霍夫变换检测图像中的直线,并根据直线之间的关系推断出可能的矩形。
- 边缘连接:边缘连接是一种基于边缘信息的矩形检测方法。它通过将相邻的边缘线段进行连接,形成更大的轮廓,然后根据轮廓的形状和特征进行矩形的筛选。
- 模板匹配:模板匹配是一种基于图像相似度的矩形检测方法。它先使用一个预定义的矩形模板,在图像中进行滑动窗口式的匹配,找出与模板最相似的位置,从而检测出可能的矩形。
4.2 矩形定位
矩形定位是在检测到可能的矩形后,精确定位和判断矩形的位置和大小,以下是几种常用的矩形定位方法:
- 最小外接矩形:通过计算轮廓的最小外接矩形来定位矩形。最小外接矩形是能够完全包围住轮廓,并且具有最小面积的矩形。
- 长宽比筛选:根据矩形的长宽比进行筛选,排除不符合要求的矩形。例如,可以设定一个阈值,只保留长宽比接近于1的矩形。
- 角度筛选:检测矩形四条边的角度,排除角度不在一定范围内的矩形。例如,可以设定一个阈值,只保留角度接近于90度的矩形。
这些矩形检测和定位的方法可以根据实际需求进行选择和组合,以得到更准确的矩形识别结果。
4.3 K210深度算法
-
MobileNet-SSD:MobileNet-SSD是基于MobileNet和SSD(Single Shot MultiBox Detector)的目标检测算法。它在保持较高精度的同时,具有较低的计算复杂度,非常适合在K210芯片上进行实时的矩形检测与定位。
-
Tiny YOLO:Tiny YOLO是一种轻量级的目标检测算法,它是对YOLO算法的优化版本。通过减少网络结构和运算量,Tiny YOLO在保持较高检测精度的同时,能够在K210芯片上实现实时的矩形检测。
-
EfficientDet:EfficientDet是一种高效的目标检测算法,它结合了EfficientNet和BiFPN(Bi-directional Feature Pyramid Network)。该算法通过设计高效的网络结构和特征金字塔网络,能够在K210上实现准确且高效的矩形检测与定位。
-
CornerNet:CornerNet是一种基于角点的目标检测算法,它通过检测矩形的角点来实现矩形的定位和姿态估计。该算法具有较高的准确性和鲁棒性,在K210芯片上进行角点检测和矩形定位非常有效。
第五章:K210 实现矩形识别并返回坐标
5.1 K210 开发板配置
按照以下步骤进行操作:
-
获取 K210 开发板:购买或准备一块 K210 开发板,如 Sipeed Maixduino 等。
-
安装开发环境:在电脑上安装 K210 的开发环境,主要包括 K210 的工具链和 SDK。
-
连接开发板:将 K210 开发板通过 USB 线缆与电脑连接,并确保驱动程序正确安装。
-
编程与烧录:使用开发环境编写矩形识别的代码,将代码烧录到 K210 开发板中。
-
配置摄像头:如果需要从摄像头获取图像进行矩形识别,还需要配置和连接摄像头。
5.2 代码编写
在 K210 开发板上进行矩形识别的代码编写,可以使用 K210 提供的 SDK(Software Development Kit)。以下是一般的代码编写步骤:
-
引入必要的库和头文件:根据需要引入与矩形识别相关的库和头文件,如摄像头库、神经网络库等。
-
初始化开发板和摄像头:通过相应的函数调用初始化 K210 开发板和连接的摄像头。
-
图像采集和处理:使用摄像头获取图像数据,并进行预处理,如缩放、裁剪和色彩空间转换等操作。这些操作可根据具体的矩形识别算法来确定。
-
矩形识别与定位:使用选定的矩形识别算法进行图像的矩形检测和定位。根据具体的算法,可以获取矩形的位置、大小和角度等信息。
-
坐标返回:将识别到的矩形的坐标信息返回给主程序或其他设备,以便进行后续处理或显示。
-
清理资源:在完成矩形识别任务后,释放所使用的资源,如摄像头、内存等。
5.3 坐标应用
在实际应用中,可以使用矩形识别得到的坐标信息进行各种操作和应用,如图像分析、目标跟踪、自动驾驶等。以下是一些常见的应用场景:
-
目标跟踪:通过识别和返回的矩形坐标,可以实现对目标物体的跟踪和定位。例如,在视频监控系统中,可以通过矩形识别得到的坐标信息,实现对目标物体的自动追踪。
-
姿态估计:通过识别和返回的矩形坐标和角度信息,可以进行物体的姿态估计。例如,在机器人导航系统中,可以使用矩形识别结果来判断物体的朝向和姿态,从而实现更准确的导航和操作。
-
物体测量:通过识别和返回的矩形坐标和大小信息,可以进行物体的尺寸测量。例如,在生产线上,可以使用矩形识别结果来测量产品的长度、宽度等参数,以保证产品质量和一致性。
第六章:总结
本文系统地介绍了基于K210开发板的矩形识别技术的实现过程,并探讨了其在实际应用中的重要性和前景。通过对K210开发板的配置和编写相应的代码,可以在K210上实现准确和实时的矩形识别。未来,基于K210的矩形识别技术有望进一步优化算法、扩展功能,并在更多领域中得到应用。
下一章内容:使用K210进行实地测试,得到矩形的坐标
硬性的标准其实限制不了无限可能的我们,所以啊!少年们加油吧!
相关文章:

2023 电赛 E 题 K210 方案
第一章:K210 介绍 K210芯片是一款基于RISC-V架构的嵌入式人工智能芯片,具备低功耗、高性能的特点。它拥有强大的图像处理和机器学习能力,适用于边缘计算设备和物联网应用。为了方便开发者,K210芯片提供了丰富的外设接口ÿ…...

Python的正则表达式re模块的compile()方法有什么作用?
re模块是Python标准库中的正则表达式模块,它提供了对正则表达式的支持。re.compile()是re模块的一个方法,用于将正则表达式编译成可复用的正则对象。 正则表达式是用来匹配和处理文本模式的强大工具。当你需要在字符串中查找、替换或者提取符合特定模式…...

SQL 语句中 left join 后用 on 还是 where,区别大了!
目录 情况 小结 举例 情况 前天写SQL时本想通过 A left B join on and 后面的条件来使查出的两条记录变成一条,奈何发现还是有两条。 后来发现 join on and 不会过滤结果记录条数,只会根据and后的条件是否显示 B表的记录,A表的记录一定会显…...

uni-app 微信小程序自定义导航栏
一、效果图 二、导航栏的组成 上面的导航栏主要由状态栏(就是手机电量显示栏)和小程序的导航栏组成,android手机一般为48px,ios手机一般为44px 三、开发步骤 1、设置navigationStyle:custom {"path": "pages/v…...

电缆故障检测仪技术参数
一、电缆故障测试仪的技术参数 1.采样方法:低压脉冲法、冲击闪络法、速度测量法 2.电缆长度:50m、300m、1km、2km、5km、10km、30km、60km 3.波速设置:交联乙烯、聚氯乙烯、油浸纸、不滴油和未知类型自设定 4.冲击高压:35kV及以下…...

固定资产管理软件
固定资产全生命周期管理软件采用先进的RFID技术,从采购、入库、借用、总结、清理到损坏等方面准确统计资产,突破过去手工统计的复杂性,节省资产资源,减少调查时间,确保资产管理工作的准确性和快速性。 固定资产管理软…...

云安全攻防(四)之 云原生技术
云原生技术 容器技术 容器与虚拟化 虚拟化(Virtualization)和容器(Container)都是系统虚拟化的实现技术,可实现系统资源的”一虚多“共享。容器技术可以理解成一种”轻量的虚拟化“方式,此处的”轻量“主…...

线上通过Nginx部署前端工程,并且配置SSL
介绍、为了更好的帮助大家学习,减少歧义,IP地址我就不隐藏了,公司也是我自己的公司。你们就别来攻击了。 下面给出步骤: 一、前期准备工作 通过在目标服务器上安装宝塔面板、安装redis、mysql、nginx、jdk环境等 1、 2、前端工程通过npm run build 打…...

直播预告 | 开源运维工具使用现状以及可持续产品的思考
运维平台自上世纪90年代开始进入中国市场,曾形成以传统四大外企:IBM、BMC、CA、HP为代表的头部厂商,还有一众从网管起家的国内厂商。2010年前后,出现了以Zabbix、Nagios、Cacti为代表的开源工具,后来又陆续出现了Prome…...

GPT带我学-设计模式-工厂模式
1 你好,请问你知道设计模式的工厂模式吗 当然知道,工厂模式是一种创建型设计模式,它提供了一种创建对象的方式,而不需要暴露对象创建的逻辑细节。工厂模式通过使用工厂类来创建对象,从而将对象的实例化逻辑与客户端代…...

Docker 安装 Tomcat
目录 一、查看 tomcat 版本 二、拉取 Tomcat Docker 镜像 三、创建 Tomcat 容器 四、访问 Tomcat 五、停止和启动容器 一、查看 tomcat 版本 访问 tomcat 镜像库地址:https://hub.docker.com/_/tomcat,可以通过 Tags 查看其他版本的 tomcat; 二、拉…...

seata注册到nacos(docker)
1、安装:docker run --name seata-server2 -p 8091:8091 -p 7091:7091 seataio/seata-server:1.5.1 复制seata-server2到服务器,然后过河拆桥 2、创建挂载目录 mkdir -p /ssy/seata_docker 3、将容器 resources文件挂载到宿主机 docker cp seata-server2…...

ffmpeg综合应用示例(五)——多路视频合并(Linux版本)
本文的目的为方便Linux下编译运行多路视频合成Demo 原文:ffmpeg综合应用示例(五)——多路视频合并 Ubuntu 20.04 ffmpeg version ffmpeg-4.4-x86_64 编译 export LD_LIBRARY_PATH$LD_LIBRARY_PATH:/home/workspace/dengzr/linux-x64/lib…...

Node.js-http模块服务端请求与响应操作,请求报文与响应报文
简单案例创建HTTP服务端: // 导入 http 模块 const http require("http"); // 创建服务对象 const server http.createServer((request, response) > {// 设置编码格式,解决中文乱码问题response.setHeader("content-type", &…...

除了PS,还有那些软件可以打开PSD文件
设计师在交接文件时,会看到各种格式的扩展文件,不同的格式需要不同的软件来运行。大多数人都听说过流行的文件格式PSD,因为它是最常用的图片格式之一,还有JPG、PNG等。然而,与JPG和PNG不同的是,PSD格式文件…...

uniapp h5支付宝支付后端返回Form表单,前端如何处理
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1.调取接口拿到后端返回的form表单 前言 uniapp h5 支付宝支付,后端返回一串form表单,前端如何拿到支付串并且调用支付 1.调取接口拿到…...

【华秋干货铺】PCB布线技巧升级:高速信号篇
如下表所示,接口信号能工作在8Gbps及以上速率,由于速率很高,PCB布线设计要求会更严格,在前几篇关于PCB布线内容的基础上,还需要根据本篇内容的要求来进行PCB布线设计。 高速信号布线时尽量少打孔换层,换层优…...

c#:ObservableCollection<T>的用法
1.说明: ObservableCollection:表示一个动态数据收集,该集合在添加或删除项或刷新整个列表时提供通知。 2.使用: 首先声明一个类 public ObservableCollection ProItems;//具体情况具体写对应的信息 表格DataGrid案例ÿ…...

Linux 端口号占用如何处理(使用命令处理)
查看被占用端口号 sudo netstat -tlnp 端口号 示例: sudo netstat -tlnp 3380杀死进程 sudo kill 进程Id sudo kill 11032...

ubuntu git操作记录设置ssh key
用到的命令: 安装git sudo apt-get install git配置git用户和邮箱 git config --global user.name “用户名” git config --global user.email “邮箱地址”安装ssh sudo apt-get install ssh然后查看安装状态: ps -e | grep sshd4. 查看有无ssh k…...

SystemVerilog数组参数传递及引用方法总结
一、将常数数组传递给task/function 如下面的程序,将一个常数数组传递给function module my_array_test();function array_test(int array[4]);foreach(array[i]) begin$display("array[%0d] %0d", i, array[i]);endendfunctioninitial beginarray_tes…...

Shell脚本学习-While循环1
当型循环和直到型循环: 循环语句常用于重复执行一条指令或一组指令,直到条件不满足时停止。 在企业实际应用中,常用于守护进程或者持续运行的程序。 while语法结构: while 条件 do指令... done while循环语句对后面的条件表达…...

docker for Windows, WSL2 ,Hyper-v的关系
Hyper-v Hyper-V是由微软开发的一种虚拟化技术和虚拟机管理器。它允许在Windows操作系统上创建和运行多个虚拟机实例,每个虚拟机可以运行独立的操作系统和应用程序。属于硬件虚拟化。 WSL2 WSL2在技术上与WSL有很大的不同。在WSL2中,Windows 10引入了…...

SAS-数据集SQL水平合并
一、SQL水平合并基本语法 sql的合并有两步,step1:进行笛卡尔乘积运算,第一个表的每一行合并第二个表的每一行,即表a有3行,表b有3行,则合并后3*39行。笛卡尔过程包含源数据的所有列,相同列名会合…...

企业既要用u盘又要防止u盘泄密怎么办?
企业在日常生产生活过程中,使用u盘交换数据是最企业最常用也是最便携的方式,但是在使用u盘的同时,也给企业的数据保密工作带来了很大的挑战,往往很多情况下企业的是通过u盘进行数据泄漏的。很多企业采用一刀切的方式,直…...

汉明距离,两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。
题记: 两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。 给你两个整数 x 和 y,计算并返回它们之间的汉明距离。 示例 1: 输入:x 1, y 4 输出:2 解释: 1 (0 0 0 1) 4 (0 1 0 0…...

Android 之 使用 Camera 拍照
本节引言 本节给大家带来的是Android中Camera的使用,简单点说就是拍照咯,无非两种: 1.调用系统自带相机拍照,然后获取拍照后的图片 2.要么自己写个拍照页面 本节我们来写两个简单的例子体验下上面的这两种情况~ 1.调用系统自带…...

盘点7月Sui生态发展,了解Sui的近期成长历程!
自5月Sui主网上线三个月以来,7月是Sui网络进行最多次重要更新的一个月,Sui网络和生态正呈指数形式不断向上发展。为吸引更多的项目或开发者加入生态构建以及活跃用户参与生态,Sui基金会推出了Builder House、黑客松、Bullshark Quests、NFT再…...

6.物联网操作系统信号量
一。信号量的概念与应用 信号量定义 FreeRTOS信号量介绍 FreeRTOS信号量工作原理 1.信号量的定义 多任务环境下使用,用来协调多个任务正确合理使用临界资源。 2.FreeRTOS信号量介绍 Semaphore包括Binary,Count,Mutex; Mutex包…...

《向量数据库指南》——使用Milvus Cloud操作员安装Milvus Cloud独立版
Milvus cloud操作员HelmDocker Compose Milvus cloud Operator是一种解决方案,帮助您在目标Kubernetes(K8s)集群上部署和管理完整的Milvus cloud服务堆栈。该堆栈包含所有Milvus cloud组件和相关依赖项,如etcd、Pulsar和MinIO。本主题介绍如何使用Milvus cloud Operator安…...