基于图像处理的物体识别与分类系统

—2021研究生电子设计大赛总结

1. 赛题

 我们组选的是TI企业命题第三题:基于图像处理的物体识别与分类系统

  • 摄像机采集图像,通过图像处理算法实时检测识别出目标物体,并测量目标与小车距离,控制小车移动靠近目标并同时控制机械臂抓取目标物体进行分类
  • 抓取3种以上物体(例如:泡沫小球、泡沫方块等等机械臂可抓取物体)
  • 目标识别与分类可以使用Opencv、Arm NN、Caffe等任意框架
  • 目标距离检测可通过图像测距/激光雷达实现
  • 支持AM5708的DSP核心进行算法加速
  • 禁止使用带深度信息输出的摄像机

2.软硬件及实验环境

  • 软件

    • 框架:OpenCV框架
    • IDE:VScode. Visual stidio 2019
    • TI ProcessorSDK
  • 硬件

    • TI-RSLK专家版(搭载ubuntu操作系统)
    • 舵机控制的机械臂
    • 激光雷达
    • USB摄像头
    • wifi模块
    • 速度反馈直流电机
  • 实验环境

3.解题思路

   主要分为图像识别与分类和小车驱动两部分。
   关于图像识别分类部分
   主要采用特征提取+支持向量机的方法。该部分采用Opencv框架,以C++语言编写程序。特征提取方面,先对视频逐帧读取得到图片,之后对图片进行灰度、二值化等图像处理操作得到待识别的预处理图像。机器学习方面,用最后要进行识别与分类的小球、方块和圆锥等物体制做训练集,然后在PC机上进行训练得到权重文件。之后将权重文件和识别与分类程序下载到工业派上,对图像进行识别与分类。
   关于小车驱动部分
   主要了解linux下C程序的运行方式以及arm在linux操作系统下的配置与使用,然后参照例程驱动电机、舵机、激光雷达和wifi模块。其中电机用以驱动小车前进或后退;前轮靠舵机转向;机械臂由舵机驱动,可以完成放下、举起和抓取等动作;激光雷达测量360度范围内障碍物的距离;wifi模块用于下载程序和与PC机通信。

    小车前轮转向

   小车抓取物体
   关于图像识别程序和小车驱动程序的联合问题。
   图像识别程序采用C++语言编写,而小车驱动程序采用C语言编写。这俩程序难以互相转换使二者在同一个函数中编写,故我们采用共享内存的方式进行进程间通信。物体识别与分类程序将被识别物体的位置坐标、个数及种类写入共享内存,小车驱动从共享内存中主要读取物体的位置信息(物体与屏幕中线的距离)以指导前轮舵机的转向从而对准物体。

4.技术关键

   关于小车定点停车的问题
   小车要想抓住物体,必须停在距离物体一定的位置,这样小车在放下机械臂时才能恰好在可以抓起物体的位置。为达到此目标,我们采用速度、距离双环PID控制的策略。具体的策略为:预先设定一个我们需要的距离-速度参照表V-Smap,在这个表中,每个距离上对有对应的小车速度,而且这个速度是我们自己设定的并可以使小车定点停下来。在小车前进过程中,小车实时监测自己与目标物的距离和自己电机的转速。每到一个距离,小车就会去查表找到对应的预期转速,这个速度与当前的实际速度的差作为误差参与PID调节,输出的是控制电机转速的pwm的占空比。这样小车就能按照我们设计好的速度趋近物体并在指定的位置停下来。

   V-Smap

   图像预处理部分
    预处理方面先要进行灰度处理,之后进行二值化处理使图像中只剩下被识别物体的实心轮廓。关于图像预处理,要使用DSP进行加速,其具体方式为用共享内存的方式将图片传入DSP,然后调用ti官方的图像处理库IMGLIB中的函数进行图像处理。处理完后再传回主程序中进行之后的支持向量机分类。

    以共享内存的方式在ARM和DSP之间传输图像


    使用opencv库中的二值化函数效果

    使用IMGLIB中的函数DSP加速的效果

   物体跟踪问题
   假设屏幕中不只一个物体,仅仅知道当前帧特定物体的位置并不能完全指导小车趋近该物体。还得知道在下一帧中同一物体的位置。这样我们才能根据位置反馈来调节前轮舵机来对准物体。但实际的情况是,我们对每一帧进行物体的分类与识别,每次识别我们会给物体进行序号标记,遗憾的是,不同帧中同一物体的标号并不相同,如下图所示,在下一帧中可能是cone的index=2而cube的index=1,这使我们不能依靠标号来锁定物体的位置,按照我们预先的想法,假设同一物体的标号一直不变,我们以共享内存的方式按照标号将位置信息写入数组中该标号对应的位置,然后在小车驱动程序中一直读该数组同一位置的距离信息,以此来作为反馈来调节前轮舵机。但是因为标号在改变,这种思路行不通。之后我们也尝试用相邻帧同一物体位移距离很小的原则来锁定同一物体,但是这种思路对于屏幕中出现或消失的新物体的情况并不理想。最后询问哈工大的一位朋友得知可以用boosting算法进行跟踪来解决此问题。

                    成功识别物体效果图
   图像处理与识别分类的处理时间即实时性的问题
   在比赛开始之初我们完全没有考虑过实时性的问题,以为这种基于AM5708的工业派搭载linux操作系统运行起来会很快,但实际情况并非如此,在图像处理与识别分类部分,程序对每一帧都会进行机器学习,这十分耗时。我们做了程序计时,在图像预处理过程(灰度处理、二值化)中时间花费相对较少,时间大量花费在对物体进行识别分类上,这就导致位置信息的反馈是滞后的,无法及时发送给小车驱动程序以指导前轮舵机的转向。具体表现为小车的舵机在小车前进快接近目标时才接受到转向信息,但此时已没有剩余距离可供调节转向。哈工大朋友的建议我们可以采取只机器学习(svm)识别第一帧然后用boosting算法进行跟踪,根据他所说,hog+svm在pi4上能跑到10fps左右,但boosting能到60fps。这为我们的工作指明了前进的方向。

5.总结

   在做这次比赛之前我们团队仅有单片机的编程经验和少量的linux 操作系统知识,对于图像处理、机器学习、搭载在arm上的linux操作系统如何驱动硬件等领域毫无经验。但好在匠牛科技出具了完成的视频与文档教程为参赛者提供参考,使我们能够快速上手。在图像处理与目标识别方面,我们已经可以成功在PC端进行识别与分类但无法实现跟踪,而且程序下载到工业派中的运行速度太慢,以至于无法及时提供反馈信息以控制转向。这也和程序的控制策略有关系,我们不应该对每一帧都进行机器学习(这浪费了大量的时间),而应该只对第一帧机器学习并识别出物体后再使用boosting算法进行跟踪,这将会极大改善我们小车对准物体运行的情况。在小车定点停车方面,我们已经使用PID控制算法基本完成了从高速启动-缓慢行驶-定点停车的全过程,但是由于时间关系我们调整好PID参数及V-Smap来让小车的停车点更为精确。
   下图便是我们交上去的最终作品视频,可以看到视频中只有一个物体,因为我们无法实现跟踪及转向,就让小车直奔一个物体;没有抓到物体是因为没有时间来调节PID参数及V-Smap。

6.展望

   我们这次没有完成题目的指标,也没有在比赛中获奖,但是我们认真且努力地投入到了这场比赛当中,领会到了控制算法与机器学习的魅力,体会到了奋斗与坚持的艰难,也感受到了团队一起工作的快乐。这将是我们宝贵的经验与记忆,也是构成多彩人生的一点一滴。
   最后我想说,以出世的精神做入世的事情,认真做事,成功与否且随他,只求内心安乐。

基于图像处理的物体识别与分类系统--2021研究生电子设计大赛总结相关推荐

  1. 基于ARM的指纹识别门禁系统设计方案

    现代社会高速发展,很多场合需要身份确认,传统的身份识别技术已经不能满足社会要求.人的身体特征具有不可复制性,因此人们开始研究生物识别技术,而指纹具有唯一性.终生不变性.难于伪造等特点,安全性高,因而得 ...

  2. 基于图像处理交通信号灯识别算法

    基于图像处理交通信号灯识别算法 摘 要:交通信号灯是智能车辆在城市环境中行驶的主要指示信号,在城市交通安全中发挥了不可或缺的作用.交通信号灯通常设在交叉口,能够供应智能车辆的方位信息,查看和辨认交通信 ...

  3. 基于python opencv人脸识别的签到系统

    基于python opencv人脸识别的签到系统 前言 先看下效果 实现的功能 开始准备 页面的构建 功能实现 代码部分 总结 前言 一个基于opencv人脸识别和TensorFlow进行模型训练的人 ...

  4. 基于改进AlexNet的植物中草药分类系统(源码&教程)

    1.研究背景 传统的中草药图像识别往往需要人工采集大量的原始样本,再进行人工分析和研究,需要研究者具有相当丰富的中医药知识储备和经验,整个过程耗时耗力且识别率难以得到保证.随着信息技术的飞速发展,人工 ...

  5. 一种基于嵌入式的多重识别门禁系统设计方案

    一种基于嵌入式的多重识别门禁系统设计方案 1. 前言 门禁系统已广泛的应用在各行各业,随着社会经济的发展,人们对门禁系统的要求越来越高,设计更加安全.更加方便的门禁系统势在必行.由于不同企业对于门禁系 ...

  6. springboot 打卡功能_基于spring boot框架的公司考勤系统的研究与设计

    基于 spring boot 框架的公司考勤系统的研究与设计 李宏坤 ; 郑光勇 ; 谢舞 ; 彭承辉 [期刊名称] <电脑知识与技术> [年 ( 卷 ), 期] 2019(015)018 ...

  7. 2020年TI杯电子设计大赛F题及2022年山西省电子设计大赛E题简易无接触温度测量与身份识别装置整体思路及代码

    在2022年山西省电子设计大赛选题刚刚公布的时候,我们组本来是想做电源题的,奈何学艺不精,最后转做了这道仪器仪表题,经过几天紧张的制作,写报告,最终也是获得了省一,想要代码和报告文档的可以私聊我或者从 ...

  8. 2019全国大学生电子设计大赛H题 模拟电磁炮系统全国一等奖

    2019全国大学生电子设计大赛H题 模拟电磁炮系统全国一等奖 作者 xxx 队友 阿华 狗子 (想要比赛指导的可以xian鱼搜索 电子设计竞赛国一竞赛指导(发布人为晨星)) (想要源码和我比赛时候准备 ...

  9. 如何使用CNN进行物体识别和分类_基于CNN目标检测方法(RCNN系列,YOLO,SSD)

    转载自:基于CNN目标检测方法(RCNN,Fast-RCNN,Faster-RCNN,Mask-RCNN,YOLO,SSD)行人检测 一.研究意义 卷积神经网络(CNN)由于其强大的特征提取能力,近年 ...

最新文章

  1. Microbiome:肠道菌群失衡促进高血压
  2. 只要做出角色3D模型,AI就能让它动起来!再也不怕3D动画拖更了丨SIGGRAPH 2020
  3. mysql 分页查询时,如何正确的获取总数
  4. 同名字的数值求和插入行_中望CAD2021:支持表格和字段插入公式,提高数据处理效率...
  5. 网易前端进阶特训营,邀你免费入营!一举解决面试晋升难题!
  6. P1494 [国家集训队]小Z的袜子
  7. 使用大于16TB的ext4文件系统
  8. Firefox 新版本发布,Cookie 可真不好吃
  9. java中 关于静态方法的定义_为什么我们不能在Java接口中定义静态方法?
  10. 49.字符串转int
  11. Log4cpp 安装和使用
  12. XMPP即时通讯协议
  13. nofollow、noopener和noreferrer标签的区别
  14. Mac如何使用Windows各种老式打印机(P1007为例)
  15. Unity冒险游戏集合
  16. Android 资源文件错误排查 Process 'command ' 等错误排查
  17. Kitty中的动态线程池支持Nacos,Apollo多配置中心了
  18. XSL中特殊符号详解
  19. 第十四周 任务二
  20. 每日新闻丨力争2025年网络安全产业规模突破2000亿/华为证实已生产不含美国部件5G基站...

热门文章

  1. 如何从零基础开始学习搭建小程序?
  2. Ambari搭建大数据平台教程(HDP)
  3. Open3D 冠层分析法(VCP)提取叶面积指数(Python版本)
  4. 以太坊合并四大支柱重振生态信心
  5. 2022.2.7-2.13 AI行业周刊(第84期):家庭的责任
  6. [转]Porting to Oracle with Entity Framework NLog
  7. python求时间序列所有的极值点
  8. org.json解析JSON
  9. 皕杰报表(问题小结)
  10. C++之二叉树的序列化与反序列化