基于OpenMV识别数字及程序说明

OpenMV简介

OpenMV是一个开源、低成本且功能强大的机器视觉模块。它基于STM32F427CPU,集成了OV7725摄像头芯片,能在小巧的硬件模块上,用C语言高效地实现核心机器视觉算法,并提供了Python编程接口,使得图像处理的复杂度大大降低。

OpenMV的功能非常多样,包括但不限于板级控制、画图、图像滤波、拍摄、特征检测、颜色追踪、codes以及测距等。这些功能使得OpenMV在多个领域都有广泛的应用,例如智能监控、机器人导航、工业视觉、智能家居安防、工业质检、交通监控以及农业智能化等。

OpenMV的特点主要体现在以下几个方面:

  1. 简单易用:OpenMV使用Python编程语言,使得用户能够更轻松地处理图像。
  2. 快速响应:由于采用了高性能处理器,OpenMV能够实时响应图像处理需求。
  3. 多功能性:OpenMV支持多种图像处理功能和算法,能够满足用户多样化的需求。
  4. 社区支持:OpenMV拥有活跃的社区和丰富的资源,方便用户学习和交流。

总的来说,OpenMV是一个强大的机器视觉模块,具有广泛的应用前景和潜力。

代码应用分析

OpenMV跟嵌入式系统结合可以实现许多智能化的应用案例,本文分享的识别图像数字的案例就是基于OpenMV,同时对于OpenmV3和OpenmV4都适用,配置了相应串口用于与上位机或者嵌入式系统通信。

首先是导入库以及初始化,主要是对传感器进行初始化。第一行是导入Python的标准库和OpenMV Cam的特定库;第二行是从image模块中导入两个常量,用于设计模板匹配的算法;第三行是IO口、定时器和LED的导入。后面都是默认的设置函数,值得注意的是sensor.set_windowing(0, 40, 160, 40)设置了观察窗口的大小,这点比较重要,能够减少处理的数据量,避免浪费资源。

f89973adba9080c5a72dce4fce9d7060.jpeg

然后加载模板图片,数字识别的原理还是图像识别,OpenmV要先记录模板图片的特征,然后将实际的数字图片跟模板图片对比,判断实际的数字图片跟哪一个模板图片相似度最高,以此来确定数字图片的数字。

123abda788bb8024fd035005b3a3bc67.jpeg

最后就是利用img.find_template函数来匹配识别图片和模板图片的相似度。Template是要对比的模板;0.8是相似度阈值,只有当模板与图像的相似度超过了这个阈值时,才认为与模板匹配;step=1表示在搜索时,每次移动一个像素的距离来寻找匹配项,step越小搜索越精确,但会增加搜索时间;roi表示搜索区域;search=SERACH_EX表示搜索算法。当图像与模板匹配时,函数返回值R为匹配区域的位置。

86dd429d9823d18cd2f6dc35b93929bd.jpeg

怎么样,简单吧!以上是利用OpenMV识别数字的代码,从以上分析中可以看出,其实不仅仅是识别数字,只要具有某种明显特征可以用来判断,就可以利用上面的算法来识别。下面增大一下难度,假如图像是一排数字,想要识别目标数字所在位置是在左边还是右边,应该怎么办呢?

在进行这个任务之前我们先定义串口,用于调试或者接收嵌入式系统的信息,这里设置其波特率为115200。

然后定义一下串口接收函数,接收目标数字。这里定义了数据帧,防止接收出错。

40bbccdde5a002ada609596ea3ca9ff6.jpeg

上位机或嵌入式系统将想要找的数字发送到OpenMV,然后OpenMV再去识别数字并且判断数字位于什么位置。这里仍然需要调用img.find_template函数。识别出来数字之后返回R值是匹配区域的坐标,判断坐标的范围即可以判断数字所在位置。

b0fcab87a84d729733e4ce341df4cddf.jpeg

最后,将识别的信息利用串口发送到上位机或者嵌入式系统中就可以了,识别效果如下图所示。

9d0a56b5540ce1f6475f6b1c73b5ea1f.jpeg

其他说明

上述介绍的代码实际应用过,可以稳定运行,需要相关程序代码文件用于借鉴学习可以私聊。

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

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

相关文章

【教程】lighttpd配置端口反向代理

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 1、修改配置文件: sudo vim /etc/lighttpd/lighttpd.conf2、先添加mod_proxy: 3、然后添加端口映射: 4、保存&…

2024年07年01日 Redis数据类型以及使用场景

String Hash List Set Sorted Set String,用的最多,对象序列化成json然后存储 1.对象缓存,单值缓存 2.分布式锁 Hash,不怎么用到 1.可缓存经常需要修改值的对象,可单独对对象某个属性进行修改 HMSET user {userI…

Transformation(转换)开发-switch/case组件

一、switch/case组件-条件判断 体育老师要做一件非常重要的事情:判断学生是男孩还是女孩、或者是蜘蛛,然后让他们各自到指定的队伍中 体育老师做的事情,我们同样也会在Kettle中会经常用来。在Kettle中,switch/case组件可以来做类似…

河南特岗教师报名流程及免冠照片电子版制作要求

2024年河南特岗教师招聘季又来啦!想要成为孩子们心中的超级英雄吗?想要在教育的田野上播种希望吗?那就不要错过这次机会,今年全省共招聘特岗教师3495名(具体岗位设置参见《河南省2024年特岗教师招聘岗位设置》&#xf…

盒子模型(笔记)

盒子模型 盒子模型的属性 padding属性 内边距:盒子的边框到内容的距离 /*每个方向内边距*/padding-top: 20px;padding-left:20px;padding-bottom:20px;padding-right: 20px; /*每个方向内边距的第二种方法*/ /* 顺序依次是上左右下*/padding: 10px 20px 30px 4…

02:vim的使用和权限管控

vim的使用 1、vim基础使用1.1、vim pathname 2、vim高级用法2.1、查找2.2、设置显示行号2.3、快速切换行2.4、 行删除2.5、行复制粘贴 3、权限管理3.1、普通用户和特权用户3.2、文件权限表示 vim是Linux中的一种编辑器,类似于window中的记事本,可以对创建…

TP8/6 更改后台入口地址admin改为myadmin 隐藏真实后台网址

原来www.xxx.com/admin 改后www.xxx.com/myadmin config/app.php // 应用映射(自动多应用模式有效)app_map > [admintest>admin],

【前端VUE】VUE3第一节—vite创建vue3工程

什么是VUE Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xff0…

卷积层里的填充和步幅

一、定义 1、对于卷积,我们另一个超参数是核的大小,通常使用的卷积核是33或者55,很少用偶数核 2、填充是为了让输出不变或者变大,是为了在输入不太大,又能使模型足够深的情况下使用 3、填充:在输入周围添…

开源软件开发平台哪家好?

进行数字化转型,离不开低代码技术平台等软件产品的加持与助力。因为它更好操作、更灵活、易维护等优势特点突出,在推动企业实现流程化办公的过程中助力明显,作用大,深得客户喜爱。那么,低代码技术平台、开源软件开发平…

居然这么简单就能实现扫雷游戏!

目录 一.思路 1.成果展示 2.思路 二.具体操作 1.创建"棋盘" 2.初始化雷 3.布置雷 4.打印 5.排除雷 三.代码实现 1.test.c文件 2.thunder.h文件 3.thunder.c文件 Hello,大家好,今天我们来实现扫雷游戏,希望这一篇博客能给带给大家一…

HCIA是什么等级的证书

HCIA是华为认证体系中的初级认证,主要用于表明持有者在某一技术领域达到了工程师级别的能力证明。这种认证主要涉及到ICT(信息技术基础设施与通信)设备的安装、配置、运行以及故障排除等方面。 HCIA证书的作用 HCIA证书是进入IT行业的一个初步资格证书,它…

昇思25天学习打卡营第6天|数据变换 Transforms

学习目标:熟练掌握数据变换操作 熟悉mindspore.dataset.transforms接口 实践掌握常用变换 昇思大模型平台学习心得记录: 一、关于mindspore.dataset.transforms 1.1 变换 mindspore.dataset.transforms.Compose将多个数据增强操作组合使用。 mindspo…

【Java】如果让你设计一个分布式链路跟踪系统?你怎么做?

一、问题解析 分布式链路跟踪服务属于写多读少的服务,是我们线上排查问题的重要支撑。我经历过的一个系统,同时支持着多条业务线,实际用上的服务器有两百台左右,这种量级的系统想排查故障,难度可想而知。 因此&#…

Linux文件传输

目录 wget传输 先用我的云服务器vps开放一个端口 目标机wget进行请求下载 指定保存路径 curl传输(win11也有) ​Netcat传输 文件传输 SFTP传输 连接远程主机 下载远程主机文件 DNS传输 dns带出字符数据命令 拼接hex码进行转字符串 成功转出​…

WIN32核心编程 - 数据类型 错误处理 字符处理

公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 数据类型 基本数据类型 Win32基本数据类型 错误处理 C语言中的错误处理 C中的错误处理 Win32中的错误处理 字符处理 C/C WIN32 字符处理 数据类型 基本数据类型 C/C语言定义了一系列…

umi项目中的一些趣事

前言 出于某些安全问题,需要把HTML中框架注入的umi版本信息去掉,那要怎么搞呢~ 方案 查找官方文档,没发现可以去掉注入信息的方法,但在一番折腾后😉终究还是解决了~ 发现 版本信息是从这里注入的~ Object.define…

uboo对内存操作读写命令的基本使用

内存操作命令 直接对DRAM进行读写的操作,uboot常用的内存操作命令有md,nm,mm,mw,cp和cmp. md命令: 显示内存值 # md md - memory display Usage: md [.b, .w, .l, .q] address [# of objects] b:1个字节 byte w:2个字节 world l:4个字节 long of objects 以word 为单位的1…

人工智能--图像语义分割

个人主页:欢迎来到 Papicatch的博客 课设专栏 :学生成绩管理系统 专业知识专栏:专业知识 ​ 文章目录 🍉引言 🍉介绍 🍈工作原理 🍍数据准备 🍍特征提取 🍍像素分…

实习总结 --- 其他业务

一. 回归测试:回归测试与测新是对应的,当需求准入交付测试的时候首先要进行的就是测新,也就是对新功能对测试,一般是在sim环境下测试的;当测新通过后才会进行回归测试,回归测试的目的是为了保证老功能的正确…