智能车竞赛技术报告 | 智能车视觉 - 西北工业大学 - 赤霄2021

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了智能车竞赛技术报告 | 智能车视觉 - 西北工业大学 - 赤霄2021相关的知识,希望对你有一定的参考价值。

学 校:西北工业大学    
队伍名称:赤霄2021      
参赛队员:武锦辉 龙俊旺 石钰莹
带队教师:曲仕茹 胡深奇    

 

第一章


■ 1.1 大赛介绍

  为加强大学生实践、创新能力和团队精神的培养,促进高等教育教学改革, 2005年10月受教育部高等教育司委托(教高司函[2005]201号文),教育部高等学校自动化专业教学指导分委员会(2013年已更名为“教育部高等学校自动化类专业教学指导委员会”,以下简称自动化教指委)创办了全国大学生智能汽车竞赛,并被教育部批准列入国家教学质量与教学改革工程资助项目(教高司函[2010]13号文)。在2020年转为中国自动化学会作为主办单位。

  该竞赛以智能汽车为研究对象的创意性科技竞赛,是面向全国大学生的一种具有探索性工程实践活动,是教育部倡导的大学生科技竞赛之一。该竞赛以“立足培养,重在参与,鼓励探索,追求卓越”为指导思想,旨在促进高等学校素质教育,培养大学生的综合知识运用能力、基本工程实践能力和创新意识,激发大学生从事科学研究与探索的兴趣和潜能,倡导理论联系实际、求真务实的学风和团队协作的人文精神,为优秀人才的脱颖而出创造条件。

  该竞赛由竞赛秘书处为各参赛队提供/购置规定范围内的标准硬软件技术平台,竞赛过程包括理论设计、实际制作、整车调试、现场比赛等环节,要求学生组成团队,协同工作,初步体会一个工程性的研究开发项目从设计到实现的全过程。该竞赛融科学性、趣味性和观赏性为一体,是以迅猛发展、前景广阔的汽车电子为背景,涵盖自动控制、模式识别、传感技术、电子、电气、计算机、机械与汽车等多学科专业的创意性比赛。该竞赛规则透明,评价标准客观,坚持公开、公平、公正的原则,保证竞赛向健康、普及、持续的方向发展。

  该竞赛以英飞凌半导体公司、江苏国芯科技有限公司为协办方,得到了教育部相关领导和各高校师生的高度评价,已发展成全国30个省市自治区近300所高校广泛参与的全国大学生智能汽车竞赛。2008年起被教育部批准列入国家教学质量与教学改革工程资助项目中科技人文竞赛之一(教高函[2007]30号文)。

  全国大学生智能汽车竞赛原则上由全国有自动化专业的高等学校(包括港、澳地区的高校)参赛。竞赛首先在各个分赛区进行报名、预赛,各分赛区的优胜队将参加全国总决赛。

  本届比赛分为基础四轮、节能信标、电磁越野、双车接力、全向行进、单车拉力、专科基础和智能视觉组八个竞速赛题组。本文主要介绍基于智能视觉组赛题的智能车系统设计与制作,从机械设计、硬件设计、软件设计三大方面进行阐述。

■ 1.2 智能视觉组任务要求

  对于智能视觉组,规定使用C型车模,车模尺寸不限。车模中微控制器使用NXP系列单片机,推荐使用i.MX RT系列的任意一款单片机。允许使用摄像头、电感、红外光电、激光传感器等器件进行赛道和环境检测。竞赛车模从车库出发沿着赛道运行两周,然后返回车库。车模需要分别通过三岔路口两条岔路。比赛时间从车模驶出车库到重新回到车库为止。在车模行进过程中,需要完成以下两种任务:

  1)选择三岔路口。在三岔路口中心前方放置一个靶标牌,上面有0 ~ 9单个数字。在车模出发后,由现场裁判员随机确定靶标牌上的数字。车模行进到三岔路口时,需要根据数字的奇偶特性判断左边路口还是右边路口。

  • 若为偶数(0、2、4、6、8),选择左侧路口;
  • 若为奇数(1、3、5、7、9),选择右侧路口。

  该任务示意图如图1.1所示。

▲ 图1.1 选择三岔路口任务示意图

  2)路边目标识别与定位。在赛道某一区域(直线或者弯道)中心放置AprilTag25h9二维码图片。根据二维码对应数字,分别在赛道左侧,或者右侧,二维码前后50厘米范围内放置靶标牌。其中,偶数表示以AprilTag指向的左侧放置靶标牌,奇数表示以AprilTag指向的右侧放置靶标牌。

  靶标上张贴有两类物品的图案:动物图案和水果图案。其中动物类包括狗、猫、马、猪、牛等,动物图案包含有动物全身照片;水果类包括苹果、橘子、葡萄、香蕉、榴莲等,水果图案包括有水果整体照片。

  如果路边目标牌上的图案属于动物类,则车模需要在二维码所在的区域(前后50厘米)内不少于3秒钟,方能驶出车模停止区域。

  如果路边目标牌上的图案属于水果类,则车模需要使用车载小型激光发射器对准靶点中心发送一束激光,激发目标靶响应。靶心检测激光束的范围是直径为5厘米的圆形区域,激光点落在靶心便可以触发目标靶位的响应。

  该任务示意图如图1.2所示。

▲ 图1.2 路边目标识别与定位任务示意图

■ 1.3 系统设计框架

  系统以检测电磁场信号、赛道图像信号为基础,通过单片机处理信号并实现对车体控制,实现车体能够准确沿着预设路径巡迹运行。系统电路部分包括电源管理系统电路、电机驱动电路、舵机驱动电路、电磁运放电路等;外部传感器设备包括用于获取赛道信息的摄像头、用于测速的编码器、用于获取车身姿态的陀螺仪、用于打靶的激光发射模块、用于调试的无线串口模块、用于人机交互的TFT屏幕和按键等;此外还有用于固定电池、电路板和各类传感器器件的机械装置。综上所述,本智能小车系统包含了以下模块:

  1. 单片机最小系统模块(NXP i.MX RT1064单片机)
  2. 电机驱动模块
  3. 舵机转向模块
  4. 摄像头传感器模块
  5. 电磁运放模块
  6. 编码器测速模块
  7. 陀螺仪模块
  8. OpenART模块
  9. 激光发射模块
  10. 云台模块
  11. 调试模块
  12. 人机交互模块

  系统框架图如图1.3所示。

▲ 图1.3 系统框架图

 

第二章 统机械设计说明


2.1 系统机械设计参数要求

  本届竞赛中,智能视觉组别的要求如下:

  1. 车模要求:车模使用C型车模。车模作品尺寸不限。
  2. 微控制器要求:车模中微控制器使用NXP系列单片机,推荐使用i.MX RT系列的任意一款单片机。
  3. 传感器要求:允许使用摄像头、电感、红外光电、激光传感器等。

2.2 系统机械整体参数调校

  智能车的整体参数,包括车体重心、传感器排布方式等,都对整个智能车系统的稳定运行起着至关重要的作用。因此,对智能车机械系统的调节,有助于智能车速度上的提升。智能车的布局以要尽可能的精简和牢固,通过对车上传感器及电路板的合理布局,尽量保证整车重心应靠近整车的几何中心,使得车模的四个轮胎都有良好的抓地能力,提升车模整体运动能力。

  智能车整体机械布局图如图2.1所示。

▲ 图2.1 智能车整体机械布局图

2.3 云台安装

  云台的作用为控制摄像头的转向和激光发射的方向。云台通过3D打印设计与实现,前后共设计了3版。
  第一版,设计如图2.2所示。

▲ 图2.2 云台ver.1

  该设计方案为将舵机云台放置在智能车转向舵机的上方,由于该方案会使激光与OPENART无法放置在较低的位置,且整体靠前,不利于转向、打靶等动作的完成,因此放弃该方案 。

  第二版,设计如图2.3所示。

▲ 图2.3云台ver.2

  该设计方案将视觉任务的舵机后移,下方不再有转向舵机,因此高度可调范围增大。但由于仅由两个铜柱与车身固定,智能车在行进的过程中舵机云台会有较大的晃动,这对视觉任务与行进任务都是不利的。综合考虑后,改善并确定了方案。

  第三版,在第二版的基础上增加了两个螺孔,使用4根铜柱将云台与车身连接,效果明显改善,智能车机械结构稳定性增强。如图2.4所示。

▲ 图2.4 云台ver3

  考虑到激光左右打靶任务的对称性,设计3D打印件使激光能固定在碳素杆正前方,确定好任务后,用热熔胶固定。3D打印件设计如图2.5所示。

▲ 图2.5 激光器固定件

  最终,云台安装如图2.6所示。

▲ 图2.6 云台安装

2.4 电池及PCB安装

  PCB板用三根铜柱固定在车身前部,电池通过3D打印件固定在车身后侧,更加牢固同时方便更换。如图2.7所示。

▲ 图2.7 电池与PCB版安装

2.5 本章小结

  机械结构是智能车的基础,其首先决定了智能车的性能,特别是转向和加速性能,本章主要通过对转向机构的分析以及对汽车理论知识的学习和应用,找到了影响小车转向范围和效率的因素并进行了改进,使得小车的转向灵敏度得到提高,同时电机差速效率也得到较大提高。此外还针对智能视觉组的任务要求,对电磁传感器、云台等硬件的布局进行合理规划。

 

第三章 统硬件电路设计说明


3.1 单片机最小系统模块

  基于NXP i.MX RT1064核心的单片机最小系统是本智能车的核心。图3.1为NXP i.MX RT1064核心板示意图。

▲ 图3.1 NXP i.MX RT1064核心板

  3.2 电源管理系统
  本智能车系统由一块2S锂电池进行供电。智能车系统各硬件组成部分分别需要5V、3.3V以及6V的电压供电。

  核心板、OPENART模块、OPENMV模块以及电磁传感模块需要5V的电压供电。在该硬件电路设计中,为避免各模块之间相互干扰,使用三块LP38692MP-5.0稳压芯片产生5V稳压。

  摄像头模块、TFT彩屏、人机交互模块、蜂鸣器、激光、信号缓冲芯片、编码器、无线串口以及陀螺仪需要3.3V的供电。其中,摄像头模块通过RT9013-33GB稳压芯片供电,这是因为本基于RT1064单片机的系统需要严格的上电次序,在单片机内核启动成功后才能给外设上电。单片机的CR引脚在内核启动成功后会变为高电平,再经过3.3V LDO输入RT9013-33G的使能引脚。除摄像头外,用一块LP38692MP-3.3供电。

  舵机部分需要6V的供电 ,该硬件系统设计了三个舵机,考虑到之后智能车性能提升的需要,选用了两片可调节输出电压的LM2941SX稳压芯片,分别给三个舵机供电。

  电源管理系统如图3.2所示。

▲ 图3.2 电源管理系统

3.3 传感器模块

  传感器是小车最重要的模块之一。本系统主要使用摄像头模块作为主传感器,辅以OpenART模块、OpenMV模块、编码器测速模块、陀螺仪模块等作为辅传感器。经过考虑后,没有使用电磁运放模块。

3.3.1 摄像头模块

  本系统使用逐飞总钻风MT9V034灰度传感器作为摄像头模块。摄像头模块接口原理图如图3.3所示。

▲ 图3.3 摄像头模块接口原理图

3.3.2 OpenART模块

  OpenART是实现智能视觉组别AI任务的核心,其与主控之间通过UART接口进行通讯,该硬件电路共引出三个OpenART模块,接口原理图如图3.4所示。

▲ 图3.4 OpenART模块接口原理图

3.3.3 OpenMV模块

  为了提高识别的准确性,除OpenART模块外,辅以OpenMV模块,其与主控的通信方式也是UART通信,接口原理图如图3.5所示。

▲ 图3.5 OpenMV模块接口原理图

3.3.4 编码器测速模块

  本小车使用逐飞1024线、带方向输出的光电编码器进行小车的测速。处理器通过读取编码器脉冲数来实现小车速度的检测,通过读取编码器旋转方向脚的高低电平来检测电机的正反转。其接口原理图如图3.6所示。

▲ 图3.6编码器测速模块接口原理图

3.3.5 陀螺仪模块

  陀螺仪模块可获取车模的角速度和加速度,可辅助进行元素识别和运动控制。其接口原理图如图3.7所示。

▲ 图3.7陀螺仪模块接口原理图

3.4 电机驱动模块

  电机采用BTN8982芯片,构成完整的全桥驱动分别控制两个电机,可以很好实现电机的正转、反转和刹车制动。其电路原理图如3.8所示。

▲ 图3.8 电机驱动模块原理图

3.5 人机交互模块

  为了方便调试,本车有无线串口模块,通过UART通信方式进行通讯和传输数据。除此之外,主板还设置了按键、拨码开关和TFT显示屏,以方便控制参数的修改,便捷地进行智能车的调试。各模块原理图如图3.9所示。

▲ 图3.9 人机交互模块

3.6其他外设模块

3.6.1蜂鸣器模块

  蜂鸣器模块通过MOS管与主控的IO口连接,可进行调频实现各种效果。蜂鸣器模块接口原理图如图3.10所示。

▲ 图3.10 蜂鸣器模块

·3.6.2激光模块

  激光模块用来实现任务中的打靶部分,由于裁判系统要求激光具有一定的频率,因此通过MOS管令激光与主控的I/0口连接,实现125Hz的调频。激光模块接口原理图如图3.11所示。

▲ 图3.10 蜂鸣器模块

3.7 PCB板整体布局

 

第四章 统软件设计说明


4.1 AI任务部分

4.1.1 AI任务介绍

  本届竞赛,智能视觉组别在车模行进过程中,需要完成两种任务,分别为三岔路口选择和路边目标识别与定位。

  1)选择三岔路口。在三岔路口中心前方放置一个靶标牌,上面有0 ~ 9单个数字。在车模出发后,由现场裁判员随机确定靶标牌上的数字。车模行进到三岔路口时,需要根据数字的奇偶特性判断左边路口还是右边路口。

  • 若为偶数(0、2、4、6、8),选择左侧路口;
  • 若为奇数(1、3、5、7、9),选择右侧路口。

  该任务示意图如图4.1所示。

▲ 图4.1 选择三岔路口任务示意图

  2)路边目标识别与定位。在赛道某一区域(直线或者弯道)中心放置AprilTag25h9二维码图片。根据二维码对应数字,分别在赛道左侧,或者右侧,二维码前后50厘米范围内放置靶标牌。其中,偶数表示以AprilTag指向的左侧放置靶标牌,奇数表示以AprilTag指向的右侧放置靶标牌。

  靶标上张贴有两类物品的图案:动物图案和水果图案。其中动物类包括狗、猫、马、猪、牛等,动物图案包含有动物全身照片;水果类包括苹果、橘子、葡萄、香蕉、榴莲等,水果图案包括有水果整体照片。

  如果路边目标牌上的图案属于动物类,则车模需要在二维码所在的区域(前后50厘米)内不少于3秒钟,方能驶出车模停止区域。

  如果路边目标牌上的图案属于水果类,则车模需要使用车载小型激光发射器对准靶点中心发送一束激光,激发目标靶响应。靶心检测激光束的范围是直径为5厘米的圆形区域,激光点落在靶心便可以触发目标靶位的响应。
  该任务示意图如图4.2所示。

▲ 图4.2 路边目标识别与定位任务示意图

  其中,三岔路口选择任务需要针对阿拉伯数字进行识别,路边目标识别与定位任务则包含AprilTag码识别、动植物图案识别和激光打靶三个环节。故智能视觉组别的AI任务可细分为以下四个任务:数字识别与处理、AprilTag码识别与处理、动植物图案识别与处理、激光打靶处理。

4.1.2 神经网络模型部署

  根据智能视觉组赛题要求,本届比赛中的数字识别与处理任务、动植物图案识别与处理任务都需要使用神经网络模型进行部署实现。对于图像识别,由竞赛规则可知所用到的图像均为全身或是整体图片,可以得到以下推论:

  1)待检测图片内部只包含其中一种物体,也就是说不会涉及到多物体检测,不需要采用OD类模型(OD是object detection的简称,一般模型体量会比较大,执行耗时比可比图像分类多几十倍,但好处在于可以一次性检出画面上所有的待检物体,并且提供位置信息)来做。

  2)待检测图片背景不复杂,全图只有待检物体本身,大大降低了背景噪声的引入对分类模型的影响。

  无论是数字识别任务,还是动植物识别任务,任务本身都是一个典型的十分类问题,从任务难度上看并不会特别困难。CNN领域有一些经典的十分类问题,以最耳熟能详的例子cifar10和lenet为例,数据集本身的体量很大,每一子类都有1w的可用数据。然而我们所使用的基于RT1064核心的OpenART模块,对于一些体量比较大的模型,由于MCU算力有限,处理的速度会比较慢,会耗费大量的时间来进行目标的识别。算力和模型精度是一对欢喜冤家,往往好的模型,体量都不会太小,这也就使得我们在设计模型的时候,要通盘考虑,如何设计出一款小而精的模型,从而在识别速度和准确率上脱颖而出。

  本系统的神经网络模型使用开源人工神经网络库Keras进行设计、调试、评估和应用。Keras是一个用python编写的深度学习API,可以在机器学习平台Tensorflow上运行,作为神经网络的推理引擎。

  首先,需要对数据进行预处理。在进行深度神经网络训练时,一般往往要求输入的数据范围在(-1,1)或(0,1)之间,因此,我们要对数据进行归一化处理,并将标签数据转换为one-hot码。对于智能视觉组赛题,数字和动植物的识别都是10分类,要训练一个10分类的网络(对10种物体进行分类),那么要将标签(图片所对应的类别号)转换为长度为10,并且仅有其所对应的类别号的位置的数据为1,其余均为0,这样一组n维向量就被称为one-hot码,以方便网络进行迭代学习。同时,需要对数据集进行拆分,将其划分为训练集与测试集,训练集用于模型自身迭代,测试集用于诊断模型能力。相关代码如下:

	x = np.load('./x.npy') # 数据集读入  
	y = np.load('./y.npy') # 数据集读入  
	x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.2, random_state = 40) # 拆分数据集,80%作为训练集,20%作为测试集  
	np.save("test_x", x_test)  
	np.save("test_y", y_test)  
	x_train = x_train / 128.0 - 1 # 数据集归一化处理  
	y_train = to_categorical(y_train) # 转换为one-hot码  
	x_test = x_test / 128.0 - 1 # 数据集归一化处理  
	y_test = to_categorical(y_test) # 转换为one-hot码 

  接着需要搭建一个神经网络模型。我们构建了一个拥有3Conv+1Dense的CNN,即一个具有3层卷积+1层全连接的简单卷积神经网络模型,如图4.3所示。

▲ 图4.3 3层卷积+1层全连接的简单卷积神经网络模型

  相关代码如下:

	def model_sequential():  
	    mopdel = Sequential()  
	  
	    model.add(Conv2D(32, (3,3), padding='same', input_shape=(32,32,3)))
	    model.add(pooling((2,2)))  
	    model.add(Activation("relu"))  
	  
	    model.add(Conv2D(64, (3,3), padding='same'))  
	    model.add(pooling((2,2)))  
	    model.add(Activation("relu"))  
	  
	    model.add(Conv2D(128, (3,3), padding='same'))  
	    model.add(pooling((2,2)))  
	    model.add(Activation("relu"))  
	  
	    model.add(Flatten())  
	    model.add(Dense(10))  
	    model.add(Activation("softmax"))  
	  
	    return model  

  搭建完神经网络模型后,就可以开始训练。

  对于学习率(lr)设置,过大的学习率会提高模型的学习速度,但是太大了可能反而适得其反,还可能会导致模型无法得到最优解;而过小的学习率,会导致训练速度过慢,陷入局部最优不能自拔,选择上要进行试错调整。这里选择
  0.001作为学习率:

	opt = Adam(lr=0.001)  

  对于训练的评价标准,我们选择categorical_crossentropy,是专门适用于多分类问题的损失函数:
  model.compile(optimizer=opt, loss=‘categorical_crossentropy’, metrics=[“acc”])

  训练函数如下:

	early_stop = EarlyStopping(patience=20)  
	reduce_lr = ReduceLROnPlateau(patience=15)  
	save_weights = ModelCheckpoint("./models/model_{epoch:02d}_{val_acc:.4f}.h5",  save_best_only=True, monitor='val_acc')  
	callbacks = [save_weights, reduce_lr]  
	model.fit(x_train, y_train, epochs = 100, batch_size=32,  validation_data = (x_test, y_test), callbacks=callbacks)  

  其中epochs代表总共迭代遍历数据集多少多少次,batch_size为一次迭代需要使用多少数据。小了能让模型迭代快,但是训练效果容易震荡,还妨碍学到全局特征;大了能让学习过程更平稳,但模型收敛效率会下降,还可能陷入局部最优。save_weights和callbacks函数负责模型的保存,会将训练过程中遇到的最好结果即时保存下来。
  以上即为神经网络模型训练的流程和相关代码,训练时的界面如图4.4所示,其训练后会得到如图4.5所示的.h5格式文件。

▲ 图4.4 神经网络模型训练界面

▲ 图4.5 神经网络模型训练导出文件

  训练完毕后,需要对训练导出的文件进行模型的量化和部署。由于所使用的模型层数较少,所以我们使用性能最佳的NNCU工具。

  首先针对导出的模型文件进行量化。量化可以在减小模型尺寸的同时,加速模型的运行。在nncu底层使用的CMSIS-NN老式库中,量化系数给出了是由多少个位来表达tensor中的整数部分和分数部分,并且整数都是有符号整数。比如,对于8位量化,如果由3个位表示分数,那么就有1个符号位,4个整数位,和3个分数位,表达范围是[-128/8,127/8],分辨率为1/8;如果是4个位表达分数,则表达范围就是[-128/16,127/16],分辨率为1/16。在nncu中量化模型,既可以由用户指定一个全局的数值来配置表达分数的位数,就像是在电磁AI中的做法;又可以像tflite那样提供一个代表性的数据集来估算各tensor的取值范围。图4.6为nncu工具调整量化参数的界面。

▲ 图4.6 nncu工具量化参数界面

  模型量化后,需要把模型部署到OpenART模块上。量化导出的文件格式为.nncu,把该量化后的文件放在OpenART模块的SD卡根目录上,即可调用相关API实现模型部署。相关代码如下:

	net_path = "_1s_model_03_0.9957_xxxx.nncu" # 定义模型的路径  
	labels = [line.rstrip() for line in open("/sd/labels_animal_fruits.txt")] # 加载标签  
	net = nncu.load(net_path, load_to_fb=True) # 加载模型  
	while TRUE:  
	    for r in img.find_rects(threshold = 50000): # 在图像中搜索矩形  
	        img.draw_rectangle(r.rect(), color = (255, 0, 0)) # 绘制矩形外框,便于在IDE上查看识别到的矩形位置  
	        img1 = img.copy(r.rect()) # 拷贝矩形框内的图像  
	        for obj in nncu.classify(net , img1, min_scale=1.0, scale_mul=0.5, x_overlap=0.0, y_overlap=0.0):  
	            sorted_list = sorted(zip(labels, obj.output()), key = lambda x: x[1], reverse = True)  

  至此,完成了从数据集制备到模型部署的所有工作。神经网络模型部署这一步骤适用于后文的数字识别与处理任务和动植物图案识别与处理任务。

4.1.3 数字识别与处理

  在三岔路口需要对路口处的数字进行识别,并根据数字的奇偶性,来决策应该走左边还是走右边。我们使用OpenART模块来完成此任务。

  要实现该任务,首先需要实现被识别图片矩形框的寻找和提取。OpenART提供了寻找矩形的函数img.find_rects,但由于竞赛标靶与赛道间仍有一定距离,车模在实际运行时,标靶后的背景会严重干扰矩形框的寻找定位。针对该问题,由于比赛时标靶的图片矩形框颜色是固定的(如分赛区比赛时为紫色,其RGB值为(68,0,98)),我们使用指定颜色提取的方法,把非矩形框的颜色信息全部滤除。我们先对图像色彩空间进行预处理,把RGB色彩空间转换为HSI色彩空间,其转换公式为:

θ=cos^(-1)⁡〖{([(R-G)+(R-B)]/2)/((R-G)^2+(R-B)(G-B))}〗
H={(θ@360-θ)(B≤G)¦(B>G)
S=1-(3*min(R,G,B))/(R+G+B)
I=(R+B+G)/3

  相关代码如下:

	void RGBtoHSI()  
	{  
	  int i,j;  
	  double r,g,b,numm,den,min,theta,H,S,I;  
	  uint16 color_tran;  
	  for(i=0;i<SCC8660_CSI_PIC_H;i++)  
	    for(j=0;j<SCC8660_CSI_PIC_W;j++)  
	    {  
	      color_tran = ((image_RGB[i][j]>>8)|(image_RGB[i][j]<<8));  
	      b = 1.0 * (color_tran & 0x1f) / 0x1f;  
	      g = 1.0 * ((color_tran >> 5) & 0x3f) / 0x3f;  
	      r = 1.0 * ((color_tran >> 11) & 0x1f) / 0x1f;  
	      //几何推导法转换  
	      numm=0.5*((r-g)+(r-b));  
	      den=sqrt((r-g)*(r-g)+(r-b)*(g-b));  
	      if(den==0)  
	        H=0;  
	      else  
	      {  
	        theta=acos(numm/den);  
	        if(b>g)  
	          H=(2.0*M_PI-theta)/(2.0*M_PI);  
	        else  
	          H=theta/(2.0*M_PI);  
	      }  
	      min=(b>g)?g:b;  
	      min=(min>r)?r:min;  
	      den=r+g+b;  
	      if(den==0)  
	        S=0;  
	      else  
	        S=1-3.0*min/den;  
	      I=(r+g+b)/3.0;  
	      image_H[i][j] = (uint16)(H * 360.0);  
	      image_S[i][j] = (uint8)(S * 255.0);  
	      image_I[i][j] = (uint8)(I * 255.0);  
	    }  
	}  

  转换完毕后,根据矩形框的实际颜色给所提取的HSV三值设定阈值范围,处于阈值范围内的像素点设为白色,处于阈值范围外的像素点为黑色,把整幅图像二值化。

  把图像进行颜色提取二值化后,即可大幅度滤掉背景的干扰,对于被识别图片矩形框的寻找和提取的效果、准确度和灵敏度有非常大的提升。

  我们使用约1500个数据集建立数字模型训练数据库,如图4.7所示。

▲ 图4.7 数字模型训练数据库

  寻找到矩形框后,把矩形框内的图片放入部署好的数字神经网络模型里,即可得到识别结果。数字识别的具体效果如图4.8所示。(2代表奇数,1代表偶数)

▲ 图4.8 数字识别效果图

4.1.4 AprilTag码识别与处理

  AprilTag是一个视觉基准库,在AR,机器人,相机校准领域广泛使用。设定为与二维码相似但相对更简单的特定标志,实现快速检测。在赛题中AprilTag码也代表着数字,依然通过识别其所代表的数字,并判断奇偶性来得知

以上是关于智能车竞赛技术报告 | 智能车视觉 - 西北工业大学 - 赤霄2021的主要内容,如果未能解决你的问题,请参考以下文章

智能车竞赛技术报告 | 智能车视觉 - 青岛科技大学 - 飞猪

智能车竞赛技术报告 | 智能视觉组 -哈尔滨工业大学 - 紫丁香七队

智能车竞赛技术报告 | 智能车视觉 - 中国地质大学(武汉) - 2021 地大乘风队

智能车竞赛技术报告 | 智能车视觉 - 温州大学- 春华秋实

智能车竞赛技术报告 | 智能车视觉 - 首都师范大学 - 首师智能视觉

智能车竞赛技术报告 | 智能车视觉 - 扬州大学 - 这辆盲车不吃水果