基于Openmv H7 Plus 的红色巡线+十字路口+多数字识别算法

这篇具有很好参考价值的文章主要介绍了基于Openmv H7 Plus 的红色巡线+十字路口+多数字识别算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、串口通信

由于是采用命令集的方式控制openmv,摄像头不需要接收太多的数据,我采用的是判断串口接收的长度来区分命令集。flag为接收数据的长度,通过发送不同长度数据来改变openmv的工作模式

一、色块识别巧用

1.巡线

在openmv的开源库中有色块识别的关键函数blob(),可以传回识别出的矩形色块的中心坐标blob.cx() blob.cy()和色块宽度blob.w()及高度blob.h() ,及色块偏转角度.

在巡线过程中可以通过传回色块中心坐标和角度来判断当前的姿态是否需要矫正,可通过其他处理器中的pid矫正。

2.十字/T字识别

想必你也能猜到我要用什么来判断十字/T字路口了,那就是通过判断blob.w()即色块宽度来判断是否到达路口,当blob.w()大于一定阈值时,即可判断为十字路口。

3.数字识别

openmv的开源资料很多,其中能用于数字识别的常用的就是神经网络和模板匹配,由于我的摄像头是openmv H7 Plus ,因此选择采用神经网络的方法来作数字识别,建立出来的模型的准确率也极高,只要不是特殊刁钻的角度,均可使用。

(本来是100%的,被我改没了=-=)

 openmv识别十字路口,算法,python,计算机视觉

 4.多数字识别左右判断

图像识别处理的核心就是滤除图像噪音,排除无用的部分。我们可以先截取图像中识别到的矩形数字框,再对矩形数字框进行神经网络的数字识别。这样就排除了很多图像噪音,提高了很多准确率。

为了提高手持数字的成功率,我建立了两套的模型labels1和labels分别来对手持数字、地面数字进行识别。(labels1的数字识别是采用特殊角度进行的,建议你们采用自己建立模型)

具体代码如下

(代码是电赛期间敲的,最近也忙,备注懒得打了=-=,有的备注)文章来源地址https://www.toymoban.com/news/detail-596630.html

# Edge Impulse - OpenMV Image Classification Example

import sensor, image, time, os, tf,math
from pyb import UART

sensor.reset()                         # Reset and initialize the sensor.
sensor.set_pixformat(sensor.GRAYSCALE)    # Set pixel format to RGB565 (or GRAYSCALE)
sensor.set_framesize(sensor.QVGA)      # Set frame size to QVGA (320x240)
sensor.set_windowing((320, 240))       # Set 240x240 window.
sensor.skip_frames(time=2000)          # Let the camera adjust.
threshold_index = 0 # 0 for red, 1 for green, 2 for blue

# Color Tracking Thresholds (L Min, L Max, A Min, A Max, B Min, B Max)
# The below thresholds track in general red/green/blue things. You may wish to tune them...
thresholds = [(70, 4, 18, 127, -125, 127), # generic_red_thresholds
              (30, 100, -64, -8, -32, 32), # generic_green_thresholds
              (0, 30, 0, 64, -128, 0)] # generic_blue_thresholds

uart = UART(3, 115200)

net = "trained.tflite"
labels = [line.rstrip('\n') for line in open("labels.txt")]
net1 = "trained1.tflite"
labels1 = [line.rstrip('\n') for line in open("labels1.txt")]
crosstime=0
clock = time.clock()
aa=[0,0,0,0,0,0]
num=10
roi=(0,0,0,0)
flag=10#4识别数字 5巡线     6匹配数字  1继续寻找 0找到数字
direct=0        #第一个数据判断左右 0直行 1左拐 2右拐
while(True):
    clock.tick()
    size = uart.any();
    if size != 0:
        command = " "
        command = uart.read()
        flag = len(str(command))
        size = 0
        print(flag)

    while(flag==4):#######################2初始复位识别数字
        img = sensor.snapshot().lens_corr(1.8)
        if 1:




    # default settings just do one detection... change them to search the image...
            for obj in tf.classify(net1, img, min_scale=1.0, scale_mul=0.8, x_overlap=0.5, y_overlap=0.5):
                img.draw_rectangle(obj.rect())
        # This combines the labels and confidence values into a list of tuples
                predictions_list = list(zip(labels1, obj.output()))

                for i in range(len(predictions_list)):
                    if  predictions_list[i][1]>0.95:
                        num=i+1
                        output_str="[%3.d,%3.d]" % (num,7)################################
                        uart.write(output_str)########################################
                        print(output_str)
                        flag=5


    if(flag==5):
        sensor.set_pixformat(sensor.RGB565)
        img = sensor.snapshot().lens_corr(1.8)
        found=0
        for blob in img.find_blobs([thresholds[threshold_index]], pixels_threshold=200, area_threshold=200, merge=True):
        # These values depend on the blob not being circular - otherwise they will be shaky.
            if blob.elongation() > 0.5:
                img.draw_edges(blob.min_corners(), color=(255,0,0))
                img.draw_line(blob.major_axis_line(), color=(0,255,0))
                img.draw_line(blob.minor_axis_line(), color=(0,0,255))
        # These values are stable all the time.
            img.draw_rectangle(blob.rect())
            img.draw_cross(blob.cx(), blob.cy())
        # Note - the blob rotation is unique to 0-180 only.
            img.draw_keypoints([(blob.cx(), blob.cy(), int(math.degrees(blob.rotation())))], size=20)
        #print(blob.corners())
            found=1         #找到红线
            if blob.w()<250:
                output_str="[%3.d,%3.d]" % (blob.cx(),1) #巡线
            else:
                output_str="[%3.d,%3.d]" % (0,4) #十字      切换至数字寻找数字
        #print(blob.cx(),blob.w(),blob.rotation_deg())
        if found==0:
            output_str="[%3.d,%3.d]" % (0,6)  #没识别到红线则停车 保持巡线模式

        uart.write(output_str)#######################################################
        print(output_str)

    if(flag==6):
        sensor.set_pixformat(sensor.GRAYSCALE)
        img = sensor.snapshot().lens_corr(1.8)
        img1=img
        found=0
        output_str="[%3.d,%3.d]" % (0,5)
    # 下面的`threshold`应设置为足够高的值,以滤除在图像中检测到的具有
    # 低边缘幅度的噪声矩形。最适用与背景形成鲜明对比的矩形。
    #寻找第一个数字
        for r in img.find_rects(threshold = 10000):
            img.draw_rectangle(r.rect(), color = (255, 0, 0))
            for p in r.corners(): img.draw_circle(p[0], p[1], 5, color = (0, 255, 0))
            #print(r1.x(),r1.y(),r1.w(),r1.h())
            roi=[r.x(),r.y(),r.w(),r.h()]
            img1=img.copy(1,1,roi,True)

            #print(roi1)


            for obj1 in tf.classify(net, img1, min_scale=1.0, scale_mul=0.8, x_overlap=0.5, y_overlap=0.5):
                img1.draw_rectangle(obj1.rect())
                # This com  bines the  labels and confidence values into a list of tuples
                predictions_list = list(zip(labels, obj1.output()))
                if  predictions_list[num-1][1]>0.6:
                    found=1
                    print(num)
                    if  r.x()+r.w()/2<140:  #####左拐
                        output_str="[%3.d,%3.d]" % (1,5)
                    else:
                        output_str="[%3.d,%3.d]" % (2,5)

            uart.write(output_str)
            print(output_str)

到了这里,关于基于Openmv H7 Plus 的红色巡线+十字路口+多数字识别算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于51单片机简易十字路口交通灯_5s全黄闪烁

    (程序+仿真+参考报告) 仿真:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:J007 交通灯运行状态: (1)模式1:东西向红灯与南北向绿灯亮5s; (2)模式2:东西南北方向均黄灯闪烁5s(5次); (3)模式3:东西向绿灯与南北向红灯各5s; (4)模式4:东西南

    2024年02月07日
    浏览(75)
  • 【超详细】基于单片机控制的十字道路口交通灯控制

    目录 最终效果 一、设计任务 二、设计报告 1 设计说明    1.1功能分析 1.1.1整体系统功能分析 1.1.2显示状态功能分析 1.1.3设置状态功能分析 1.1.4紧急状态功能分析 1.2方案比选 1.2.1车辆LED数码管倒计时显示板块 1.2.2车辆信号灯显示板块 1.2.3行人信号灯显示板块 1.2.4键盘输入板块

    2024年02月04日
    浏览(48)
  • 基于AT89C51单片机的十字路口交通灯设计

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87849986?spm=1001.2014.3001.5503 源码获取 主要内容: 本项目中采用单片机 AT89C51为中心器件来设计交通信号灯控制器, 系统实用性强、操作简单、扩展性强。本设计系统就是由单片机最小系统、交通灯

    2024年02月09日
    浏览(54)
  • 【毕业设计】基于PLC的十字路口交通灯控制系统设计【仿真+源码+论文】

    摘 要 本次设计的课题是基于PLC的十字路口交通灯控制系统设计,传统的十字路口交通灯多采用单片机集成电路作为控制系统,单片机系统虽然在功能上能够实现十字路口交通灯的各种控制需求,但是单片机控制系统在设计时需要数字电路与模拟电路的完美结合,这样的控制

    2024年02月08日
    浏览(60)
  • FPGA十字路口红绿灯控制器

    课程设计:十字路口红绿灯控制器 1.要求双方向8个灯的时序控制 2.要求显示倒计时 verilog hdl代码模块 测试程序模块 注意: 选择比较好的器件 测试文件命名为testbench.vt,否则不行。 采用BCD倒计时,经测试时序无错,代码结构清晰。 EDA课设,感谢论坛其他大佬的代码,基于

    2024年02月11日
    浏览(52)
  • DE0开发板交通灯十字路口红绿灯VHDL

    名称:基于DE0开发板的交通灯十字路口红绿灯 软件:Quartus 语言:VHDL 要求: 设计一个十字路口交通信号灯的控制电路。分为两种情况,正常状态和报警状态。 1.正常状态:要求红、绿灯按一定的规律亮和灭,并在亮灯期间进行倒计时,且将运行时间用数码管显示出来。 绿灯

    2024年02月07日
    浏览(55)
  • Web3游戏的十字路口:沿用传统IP还是另起炉灶?

    人们经常问我对 Web3 游戏有什么看法。因此,我想以书面形式概述一下我目前的想法。 让我先澄清一下:我不是专家。这不是一篇深入探讨游戏世界精细指标如 MAU 或 D14 等的全面分析。请把这看作是我根据个人交流和研究,这反映我在游戏领域关注的焦点。 为什么选择游戏

    2024年02月04日
    浏览(262)
  • apollo自动驾驶进阶学习之:如何实现十字路口左转障碍物绕行

    首先需要理解Planning模块是基于Scenario、Stage、Task这样的层次来进行的,即:场景-步骤-具体的决策方法。Apollo可以应对自动驾驶所面临的不同道路场景,都是通过Scenario统一注册与管理。Scenario通过一个有限状态机来判断选择当前行车场景,每个Scenario下又有多个Stage,指当前

    2024年02月12日
    浏览(45)
  • 51单片机STM32交通灯红绿灯十字路口信号灯类设计功能要求汇总

    浏览必读: 使用搜索可以达到事半功倍的效果。 电脑浏览器CTRL+F可以使用搜索查找 功能说明: 1.四路交通灯,带有红绿灯倒计时,绿灯倒计时结束后转黄灯5秒,再转红灯。 2.紧急情况下按键紧急按钮,四路黄灯快闪。 3.可以动态设置红绿灯时间。 涉及知识点:按键扫

    2024年02月11日
    浏览(109)
  • 《数字电子电路》 课程设计:十字路口红绿灯自动控制系统(下)(multisim仿真及PCB实现)

    书接上篇,本片笔者将进行multisim仿真和AD20的PCB实现 五、仿真及结果 1、单元电路仿真结果 ⑴ 脉冲信号发生器: 将NE555独立测试,周期为998.17ms,近似为1s,满足设计指标。 ⑵ 倒计时计数器: 先将25进制倒计时计数器搭好,仿真验证其功能正常,如下图所示 :   2、 整体仿

    2024年02月04日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包