2021电赛F题之openmv数字识别--更新(附带视频与代码)

简介: 2021电赛F题之openmv数字识别--更新(附带视频与代码)

成果展示

常见出错解决方法

openmv数字识别源代码—gitee

成果展示中的视频对应的源码就是上面Gitee链接里面的代码。

最新版openmv和k210的代码也已经编写完毕,你可以通过给我的Github项目点赞来免费的向我获取代码,联系我时请带上备注以及点赞Github项目后的截图。

如果是对代码有问题以及不知道如何使用的,可以先好好读一下代码的结构并且进行大致的流程梳理后再联系我,谢谢。

Github项目地址

效果如上

openmv的u盘里需要

思路:

模板匹配很简单,只不过使用起来需要自己拍摄大量的模板,同时如果模板数量较多那么就会造成严重的画面延迟,所以需要代码的结构较为严谨,同时需要运用一些算法来优化代码,

下面只是简单的官方历程,如果需要视频中的效果,那么需要自己拍摄模板也需要自己优化代码结构哦.

需要注意的是,如果想要提高帧率,那么这一次进行匹配的模板的数量就必须要少,在模板数量少的情况下还想能匹配的上就需要较好的模板了.

同时也可以适当降低匹配图片的阈值要求,一般设定为0.5到0.7.

下面的这份代码就是官方的源代码

但是说到底我们的模板不可能只有一张,如果是那样那么识别率也太低了对吧。

import time, sensor, image
from image import SEARCH_EX, SEARCH_DS
#重启传感器
sensor.reset()
#传感器配置
sensor.set_contrast(1)
sensor.set_gainceiling(16)
sensor.set_framesize(sensor.QQVGA)  #由于运算量较大,因此只能使用QQVGA
#可以通过设置窗口来减少搜索的图像
#sensor.set_windowing(((640-80)//2, (480-60)//2, 80, 60))
sensor.set_pixformat(sensor.GRAYSCALE)#黑白
#加载模板
#模板应该是一个小的灰度图像,如32×32.
template = image.Image("/1.pgm")#模板库 要求图片格式为pgm 需要下载到sd卡中
clock = time.clock()
#运行模板匹配
#查找模板(模板、阈值、[roi、步骤、搜索])
#ROI:感兴趣的区域元组(x,y,w,h)。
#步骤:使用的循环步骤(y+=步骤,x+=步骤)使用更大的步骤使其更快。
#搜索可以是image.Search\u EX进行穷举搜索,也可以是image.Search\u DS进行菱形搜索
#注1:ROI必须小于图像且大于模板。
#注2:在菱形搜索中,step和ROI都被忽略。
while (True):
    clock.tick()
    img = sensor.snapshot()# 获取当前帧
   # roi=(0, 0, 400, 400) #设置感兴趣区域
    r = img.find_template(template, 0.70, step=4, search=SEARCH_EX) 
    #, roi=(10, 0, 60, 60)) #设置感兴趣区域
    if r:  #如果找到模板图片旧框选出来
        img.draw_rectangle(r)
    print(clock.fps())
// 2499067858

因此我们就得像个办法再增加模板的同时,还不降低帧率。

以openmv的性能,大概6-8张模板是能接受的,再多就会掉帧了

所以我们可以再执行find_template的时候进行for循环,让他去遍历一个list集合,遍历其中的模板,这样子我们就能尽可能提高对同一数字的识别率了.

也就是我们可以把代码改进为下面这种

import time, sensor, image
from image import SEARCH_EX, SEARCH_DS
#重启传感器
sensor.reset()
#传感器配置
sensor.set_contrast(1)
sensor.set_gainceiling(16)
sensor.set_framesize(sensor.QQVGA)  #由于运算量较大,因此只能使用QQVGA
#可以通过设置窗口来减少搜索的图像
#sensor.set_windowing(((640-80)//2, (480-60)//2, 80, 60))
sensor.set_pixformat(sensor.GRAYSCALE)#黑白
#加载模板
#模板应该是一个小的灰度图像,如32×32.
list = ["/1.pgm", "/2.pgm", "/3.pgm", "/4.pgm","/5.pgm", "/6.pgm", "/7.pgm", "/8.pgm"]
template = [0,0,0,0,0,0,0,0]
def loadimg():
  t=0
  for i in list:
    template[t] = image.Image("i")#模板库 要求图片格式为pgm 需要下载到sd卡中
    t+=1
  return template
clock = time.clock()
#运行模板匹配
#查找模板(模板、阈值、[roi、步骤、搜索])
#ROI:感兴趣的区域元组(x,y,w,h)。
#步骤:使用的循环步骤(y+=步骤,x+=步骤)使用更大的步骤使其更快。
#搜索可以是image.Search\u EX进行穷举搜索,也可以是image.Search\u DS进行菱形搜索
#注1:ROI必须小于图像且大于模板。
#注2:在菱形搜索中,step和ROI都被忽略。
template = loadimg()
while (True):
    clock.tick()
    img = sensor.snapshot()# 获取当前帧
   # roi=(0, 0, 400, 400) #设置感兴趣区域
   for i in template:
      r = img.find_template(i, 0.70, step=4, search=SEARCH_EX) 
    #, roi=(10, 0, 60, 60)) #设置感兴趣区域
    if r:  #如果找到模板图片旧框选出来
        img.draw_rectangle(r)
    print(clock.fps())

这样子我们就能做到一次性遍历好多张图片了,之后如果还想优化,你就可以根据比赛的题目进行适当的操作了

(这个代码不是用ide写的,是手撸的,所以可能直接复制会有语法上的报错,可以自己改一改哈)



相关文章
雷达波形之一——LFM线性调频波形
雷达波形之一——LFM线性调频波形
1987 1
|
编解码 IDE 算法
2023年电赛---运动目标控制与自动追踪系统(E题)发挥题思路
2023年电赛---运动目标控制与自动追踪系统(E题)发挥题思路
1511 0
|
7月前
|
机器学习/深度学习 数据可视化 算法
Python | 网格搜索参数优化的XGBoost+SHAP可解释性分析回归预测及可视化算法
本教程将推出Python实现的XGBoost回归预测,结合网格搜索调参与SHAP可解释性分析,涵盖数据处理、模型训练、可视化及结果保存,助力科研论文提升模型可解释性,附完整代码与保姆级环境配置指南。
1142 1
|
Ubuntu Linux 网络架构
OpenWRT 的包管理器镜像如何切换成阿里云源?
OpenWRT 的包管理器镜像如何切换成阿里云源?
3778 0
|
10月前
|
传感器 机器人 物联网
【免费开源】基于STM32的蓝牙小车/智能小车项目详解(附源码)
通过本项目,你可以系统掌握STM32外设控制、蓝牙通信、电机驱动和传感器数据处理技术,实现一辆可远程控制并具备避障功能的智能小车。该项目具有高度可扩展性,后续可增加循迹、自动寻路、摄像头等高级功能。
2801 43
【免费开源】基于STM32的蓝牙小车/智能小车项目详解(附源码)
|
11月前
|
编解码 文字识别 API
InternVL3开源:7种尺寸覆盖文、图、视频处理,多模态能力扩展至工业图像分析
4月11日,OpenGVLab开源发布InternVL3系列多模态大模型,涵盖1B至78B共7个尺寸。相比InternVL 2.5,其在多模态感知与推理能力上表现更优,并新增工具使用、GUI代理等功能。得益于原生多模态预训练,文本性能超越Qwen2.5系列。
1639 0
|
人工智能 监控 算法
Python下的毫秒级延迟RTSP|RTMP播放器技术探究和AI视觉算法对接
本文深入解析了基于Python实现的RTSP/RTMP播放器,探讨其代码结构、实现原理及优化策略。播放器通过大牛直播SDK提供的接口,支持低延迟播放,适用于实时监控、视频会议和智能分析等场景。文章详细介绍了播放控制、硬件解码、录像与截图功能,并分析了回调机制和UI设计。此外,还讨论了性能优化方法(如硬件加速、异步处理)和功能扩展(如音量调节、多格式支持)。针对AI视觉算法对接,文章提供了YUV/RGB数据处理示例,便于开发者在Python环境下进行算法集成。最终,播放器凭借低延迟、高兼容性和灵活扩展性,为实时交互场景提供了高效解决方案。
1097 5
|
开发框架 IDE Java
java制作游戏,如何使用libgdx,入门级别教学
本文是一篇入门级教程,介绍了如何使用libgdx游戏开发框架创建一个简单的游戏项目,包括访问libgdx官网、设置项目、下载项目生成工具,并在IDE中运行生成的项目。
1003 1
java制作游戏,如何使用libgdx,入门级别教学
|
前端开发 搜索推荐 C++
Marp 教程:如何在 VSCode 中引入自定义样式和主题
本文介绍了如何在 Marp 中引入自定义样式和主题,使你的幻灯片更加个性化和独特。首先,你需要安装 VSCode 和 Marp 插件,了解 Marp 的基本结构。接着,通过创建自定义 CSS 文件并在 Markdown 文件中引入,实现样式定制。此外,还可以创建和使用自定义主题,以及进行高级自定义,如调整布局、引入自定义字体和定义复杂动画。最后,使用 Marp 的预览功能实时查看效果。
|
移动开发 前端开发
ruoyi-nbcio-plus的Vue3前端升级组件后出现的问题(二)
ruoyi-nbcio-plus的Vue3前端升级组件后出现的问题(二)
517 1