相关电子技术论文

相关标签

基于OpenMV颜色快识别系统的设计与实现

发布时间:2019-12-03 14:07

  摘 要

  作为机器视觉模块的重要技术之一的OpenMV (Open Machine vision)开放视觉模块,是当下嵌入式计算机视觉领域的一个研究热点。

  OpenMV视觉模块对于颜色块识别、追踪与测距系统的实现,在背景颜色与目标颜色相近程度、光照强度、颜色块与镜头的距离发生改变时,都会对测试结果产生较大的影响。因此分析这些变化时对我所设计的OpenMV颜色块识别追踪与测距系统产生的影响是有必要的。

  本文主要的工作内容是:首先研究分析OpenMV的颜色块识别与测距系统模型的设计,然后研究了OpenMV视觉模块的基本原理和Micro Python语言的编写,接着对背景颜色与目标颜色的相近程度和颜色块与镜头距离改变时系统的误差做了比较与说明,最后完成了1)基于OpenMV的颜色块识别与追踪系统设计;2)颜色块目标测距系统的设计。

  实验结果表明:1)OpenMV颜色块识别系统进行颜色块识别时,如果背景的颜色与目标色块的颜色太过接近,则会出现多个色块识别的情况,并不能分离出背景与色块;2)当OpenMV颜色块测距系统进行测距时,如果目标颜色块距离过远则会发生测得的距离与实际距离相差较多。

  关键词:OpenMV,颜色块识别,颜色块追踪,颜色块测距

  前 言

  在算机技术和电子技术飞速发展的现代,作为人类认知世界的最主要来源,也是人类获取,表达和传递信息的重要手段的图像,在人们的日常生活中发挥着不可代替的重要作用。用计算机进行图像处理的愈加频繁使数字图像处理技术迅速发展,OpenMV (Open Machine vision,开放视觉模块)开源计算机视觉库作为当下嵌入式计算机视觉领域的重要研究技术,具有功能强大、开源、低成本的优点,是国内外爱好者的研究热点。

  本文以OpenMV和Micro Python语言的基本理论为基础,做出了基于OpenMV的颜色块识别与追踪、测距系统的设计。并在此基础上,在背景颜色与目标颜色相近程度、光照强度、颜色块与镜头的距离发生改变时,对系统的识别准确度做了一些比较。

  围绕OpenMV颜色块识别、追踪与测距系统的设计与实现,本文的结构安排如下:

  第一章介绍了与本课题相关的OpenMV的研究背景,国内外一些研究现状以及本文的研究内容和研究目标。

  第二章阐述了基于OpenMV的颜色块识别、追踪和测距系统的基本原理,并建立系统的设计模型以及一些设计中所应用的算法。

  第三章介绍了基于OpenMV的颜色块识别、追踪和测距系统的Micro Python语言的部分代码及代码功能。

  第四章介绍了基于OpenMV的颜色块识别、追踪与测距系统的实现,并在一些参数发生改变时,对设计的系统的识别准确度做了一些比较。

  最后总结全文,并对基于OpenMV视觉模块的各种更加深入的系统设计的前景做出了展望。

  第一章 绪 论

  1.1 研究背景

  在计算机技术和电子技术的飞速发展的今天,图像作为人类观察世界、了解世界的最主要手段,据统计,人类认知世界有70%-80%的信息是通过图像获取的[1]。随着数字图像处理技术快速发展,OpenCV(Open Source Computer Vision Libraray,开源计算机视觉库)成为在图像处理和计算机视觉方面的热门技术,OpenCV是由C函数以及一部分不多的C++类组成,来实现计算机视觉方面和图像处理的通用算法如3D重建、目标分割、目标识别、特征检测、运动分析、特征跟踪等的由Intel公司资助的开源视觉库[2],也是国内外爱好者使用的视觉模块方便快捷的技术。而OpenMV作为一个集成了一部分OpenCV核心算法的单片机视觉模块,也受到了广大视觉研究爱好者的喜爱。

  OpenMV是一个功能强大的机器视觉模块,它相比其他视觉模块,具有开源并且成本低的有点。OpenMV以STM32F767CPU芯片以及OV7725摄像头芯片为核心,在硬件模块看上去很小巧情况下,通过C语言卓效地实现了机器视觉的核心算法。OpenMV还提供Python编程接口,所以可以使用自己编写的Python语言来实现想要的OpenMV的各种不同的机器视觉功能[3]。

  寻找色块、人脸检测、眼球检测、边缘检测、目标跟踪等都是OpenMV上的机器视觉算法。这些算法可以用来实现多种功能,包括入侵检测、跟踪标记的目标、残次品筛选、人脸识别跟踪等。一些简单的Python程序的编写,就可以使OpenMV完成各种的任务。轻便灵巧的设计让OpenMV可以应用在更多意想不到的地方,比如设计出具有人脸识别功能的机器人,设计出具有视觉巡线的小车,能感知周边的摄像头等[3]。

  本文研究的是基于OpenMV的颜色块识别、追踪与测距系统的设计与实现。

  1.2 国内外现状

  目前对OpenMV视觉模块的研究,国内外发展势头都很迅猛。

  在国内,2010年4月王小波,刘慧英在VC++6.0的环境下,用OpenCV的编程获得了较为理想的车辆轮廓线,实现了的对车辆轮廓的检测[4]。2011年尹俊超、刘直芳对基于OpenMV的运动目标检测和追踪方案进行了研究,最终实现了对一个场景中的多个不同目标同时检测和追踪,提取目标特性并标记出目标的运动轨迹[5]。同年7月,秦小文、温志芳、乔维维等人在研究了OpenCV的特点及结构,并通过图像形态学和平滑处理为例介绍了OpenCV在数字图像处理上的应用[6]。2012年,黄佳提出了基于OpenNI、OpenCV、OpenGL视觉库的检测与跟踪动态目标的检测系统[7]。2013年12月,赵健和张东泉通过分析和优化基于OpenCV的手势识别算法,最终0~9的简单手势识别率可以超过97%[8]。同年12月份,雷建锋和汪伟实现了基于OpenCV的图像阈值分割[9]。2016年,杜聪阐述了OpenCV的特点、运行环境、操作、应用领域等,强调了OpenCV在图形处理技术领域中的重要作用[10]。2016年,郭中华,苑俊英,伍冯洁等人对基于OpenMV人脸识别进行了研究,并将人此技术应用在了智能社区的门禁系统上[11]。同年9月份,李华琛进行了基于OpenCV的图像边缘检测技术的三种不同算子实现边缘检测算法的对比研究[12]。同年11月份,吕昆和金晅宏进行了基于OpenMV的车牌识别的研究并提出了一种很实用的方法[13]。

  国外对OpenCV以及OpenMV的研究则更加深入,YAMAMOTO Kenji、SENOH Takanori、KURITA Taiichiro在2010年通过OpenCV成功实现了2D和3D的转换[14]。同年2月,Jun Burden、Malcolm Cleland等人进行了基于OpenCV和Python在自行车赛道上进行团队转换时跟踪单个骑车人的研究[15]。Nvidia也在同年为OpenCV应用程序开发添加GPU加速[16]。2012年,Coombs Joseph、Prabhu等人克服了将OpenCV移植到TI嵌入式ARM + DSP平台的挑战[17]。Kirll Kornyakov在2013年研究了在IOS上使用OpenCV并发布了教学手册[18]。2015年2月,I Wayan Agus Suryawibawa 等人发表了基于Android的OpenCV草药识别[19]。2018年,L Triyono、E H Pratisto等人使用OpenCV的手语翻译器应用程序[20]。

  1.3 本文主要研究内容

  本文的主要内容是基于OpenMV的颜色块识别、追踪与测距系统的设计与实现。

  课题实施主要分为:

  1.资料收集以及当前研究现状分析;

  2.了解OpenMV视觉模块和Python语言的基本原理;

  3.颜色块识别追踪与测距算法的研究;

  4系统调试与实验结果分析;

  5完善课题设计。

  图1-1的设计系统流程图阐述了我在设计这些系统时所采用的算法、各个系统之间的关系以及系统所产生的一些问题

  第二章 OpenMV颜色块识别系统设计的分析

  2.1 颜色块识别与追踪系统的分析与原理

  要实现基于OpenMV的颜色块识别与追踪系统的设计,经过查阅资料,我将系统的设计归结于以下几点。

  要识别颜色块,首先利用阈值进行二值化,二值图像是经过二值化后的图像亮度值只(0)黑和(255)白两种状态。二值化在图像识别与分析中的地位是十分重要的,这种简单的图像模式,在空间上使它对像素的关系有很好的表现力。因为我们要识别的图像是彩色的,我所使用的是Lab(CIE(Commission International Eclairage,国际照明委员会) 1976(L*,a*,b*)色彩空间的非正式缩写)颜色空间,Lab颜色空间中,L分量代表Luminosity,即照明度,L的取值范围是[0,100],0表示纯黑色,100则代表纯白色;a和b则是两个不同颜色的颜色轴,a的取值范围是[-128,127],-128代表绿色,127代表红色;b的取值范围是[-128,127],-128代表蓝色,127代表黄色。所以我们有(minL, maxL,minA, maxA, minB, maxB)这三个阈值,一共六个值。

  然后,进行联通域检索,连通域检索运用八连通域算法,通过对图像进行的逐行逐列的扫描,按照算法一定的规则标记连通区域,来得到对象的个数,同时统计每一个区域所包含的像素个数,再用标尺转换最后就可以得到想要测得的区域面积,在阈值编辑器上使自己想要的目标显示出来,就可以识别所需要的目标颜色块。

  实现颜色块的追踪所采用的是CamShift(Continuously AdaptiveMeanShift,不断适应变化)算法,它是由Mean-Shift 算法为基础,在Mean-Shift算法上做了改进,改进后,它能够自主调节搜索窗口的大小以此来适应目标的大小,CamShift算法可以跟踪视频中目标尺寸的变化而进行变化。它是一种半自动追踪算法,需要手动标记出需要追踪的目标。CamShift算法是以视频或者图像中运动目标的颜色信息当做特征作为基本思想,对拍摄的图像的每一张分别用Mean-Shift的的算法运算,而且将上一张图像搜索窗口的大小和目标的正中心作为下一步Mean-shift的搜索窗口大小和中心的起点,再一步一步迭代,最终实现OpenMV对目标颜色块的追踪。因为CamShift算法每一步实施搜索之前就会将搜索窗的大小以及位置设置成目标色块当前的中心的大小和位置,而目标颜色块通常在这区域附近,所以CamShift算法会使搜索时间缩短;另外,当颜色块目标的运动时,颜色每一帧的改变并不会太大(除非发生重大事故),所以CamShift算法的鲁棒性十分良好。图2-2就是CamShift追踪算法的基本流程:

  2.2 颜色块测距系统的分析与原理

  要实现基于OpenMV的颜色块测距系统,首先得要在2.1颜色块识别与追踪系统的基础上再做出测距的公式加入程序才能获得测距功能。

  首先识别颜色块,利用阈值进行二值化,识别彩色图像,使用Lab颜色空间,在OpenMV IDE上得出(minL, maxL,minA, maxA, minB, maxB)六个值。

  然后,进行联通域检索,在阈值编辑器上使自己想要的目标显示出来。

  接着,用CamShift算法实现颜色块追踪,因为要得出目标颜色块的实时距离,所以得在目标变化的情况下也能测距,所以要在识别和追踪的基础上进行测距。

  测距的基本模型原理图如图2-3所示:

  第三章 Python代码的编写

  3.1 Micro Python语言简介

  Python是一种面向对象的解释型计算机程序设计语言,它由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。设计者开发时总的指导思想是,对于一个特定的问题,只要有一种最好的方法来解决就好了。

  Python是纯粹的自由软件,源代码和解释器CPython遵循 GPL(GNU General Public License)协议。

  Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。

  Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写。但是在使用扩展类库时需要考虑平台问题,某些可能不能跨平台的实现。

  Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。

  2017年7月20日,IEEE发布2017年编程语言排行榜:Python高居首位。

  Micro Python语言是Python中的一种精简和高效的实现编程语言,它包含了Python标准库的一个小子集,并且进行了在微控制器和受限环境中的运行上的优化。借助Micro Python,用户可以通过编译Python脚本语言来实现硬件底层的访问和控制,比如控制LED灯泡、LCD显示器、访问SD卡、读取电压以及控制电动机等。

  3.2 识别与追踪系统流程图与代码编写

  根据基于OpenMV的颜色块识别与追踪系统的分析和原理,设计代码实现所需要的程序流程图,如图3-1所示。首先引入摄像头、图像和时间模块,然后设置目标颜色的Lab阈值,接着重置摄像头,调整像素格式、窗口分辨率、摄像头等待时间并关闭白平衡,再开始计时,拍摄图像,调用的snapshot()函数返回一个image对象,如果找到了目标颜色块,就迭代目标并标记出来,最后计算开始计时后到标记目标的时间,并转化为帧率即可。

  3.3 测距系统流程图与代码编写

  根据基于OpenMV的颜色块测距系统的分析和原理以及前面所说的颜色块识别与追踪的分析和原理,设计出代码实现所需要的程序流程图,如图3-2所示。前面的引入模块和对摄像头的调整都与3.2的识别与追踪系统一样,开始计时后,我们需要用(2.6)所得的距离公式来让OpenMV测出距离,首先设置K 的值,并用识别与追踪系统识别并计算出目标半径,再带入公式(2.6),即可测出目标与摄像头的距离

  图3-2 测距系统流程图

  Pyhon计时函数代码的描述:

  第四章 系统的实现与误差比较

  4.1 颜色块识别与追踪系统的实现

  首先将编写完成的颜色块识别与追踪的代码并放入OpenMV IDE里,打开摄像头,将目标放在一个背景颜色差异明显的桌面上,如图4-1所示:

  图4-1 放置目标

  接着我们用矩形框将要识别追踪的目标色块标记,如图4-2所示:

  图4-2 用矩形框将标记要识别追踪的目标色块

  我们可以看到,图像下方的白色、黄色和蓝色波形就是图像在Lab颜色空间中的表现形式,如图4-3所示

  图4-3 图像在Lab颜色空间中的表现形

  然后我们用阈值编辑器进行图像的处理,打开工具 Tool -> 机器视觉 Machine Vison -> 阈值编辑器 threshold editor,将图3-2上Lab的阈值在阈值编辑器里表示出来,我们可以看到,在Lab阈值范围在(60, 77, 0, 18, -58, -25)时,图像已经可以较为清晰地显示出来,且没有什么背景混在图形里,如图4-4所示:

  图4-4 阈值编辑器调试二值化黑白图像

  接着,关闭阈值编辑器,将Lab阈值范围(60, 77, 0, 18, -58, -25)输入程序中,再运行程序,就可以看到目标圆柱体在被拖到不同位置时都在被追踪,如图4-5、图4-6所示:

  图4-5 将目标放置在中间时识别的情况

  图 4-6 将目标移动后识别的情况

  可以看到,基于OpenMV的颜色块识别与追踪系统已经基本实现。

  但是当我们将阈值编辑器的B Max值向后调整到1,可以发现右边图的左下角出现了较为明显的背景色块,如图4-7所示:

  图4-7 调整B Max后的二值化图像

  而在程序中将Lab阈值范围从(60, 77, 0, 18, -58, -25)改成 (60, 77, 0, 18, -58, 1)时,识别的图像也会在识别出部分背景,如图4-8所示:

  图4-8 改完B Max后识别出的图像

  而在其它5个值都不变的情况下,L Min值调小、L Max值调大、A Min值调小、A Max值调大或者B Min值调小时都不会出现这种误差。由图2-1所知,由于背景偏黄色,所以B Max值的变化对背景颜色对目标色块的影响十分明显。

  由此,得出结论,在背景呈不同颜色时,分别按背景颜色在Lab颜色空间,见图2-1中的表示调整6个值对背景识别出的误差会出现不同程度的影响,越靠近背景色的值改变对识别正确率的影响越大。具体见表4-1:

  背景颜色偏向对识别正确率影响最大的值

  白色L Max

  黑色L Min

  红色A Max

  绿色A Min

  黄色B Max

  蓝色B Min

  表4-1

  4.2 颜色块测距系统的实现

  首先将编写完成的代码并放入OpenMV IDE里,打开摄像头,将目标放在一个背景颜色差异明显的桌面上,并用矩形框将要识别追踪的目标色块标记,与4.1中颜色块识别与追踪系统一样,可以看到,图像在Lab颜色空间中的表现形式,如图4-9所示:

  图4-9用矩形框将标记要识别追踪的目标色块

  然后我们用阈值编辑器进行图像的处理,将图4-1上Lab的阈值在阈值编辑器里表示出来,我们可以看到,在Lab阈值范围在(64, 85, -16, 11, -45, 1)时,图像已经可以较为清晰地显示出来,如图4-10所示:

  图4-10 阈值编辑器调试二值化黑白图像

  接着,关闭阈值编辑器,将Lab阈值范围(64, 85, -16, 11, -45, 1)输入颜色块测距的程序中,再运行程序,就可以看到目标圆柱体当前与摄像头的实时距离,左下角显示出目标距离:14厘米,如图4-11及4-12所示:

  停止运行程序,将摄像头离目标稍远一些,运行程序,可以看到目标圆柱体当前与摄像头的实时距离,左下角输出的目标距离:19厘米,如图4-13及4-14所示:

  当我们将距离先放置在9厘米左右,并将OpenMV向后拉动时,输出值从9厘米一直变大,达到了12-13厘米,如图4-15所示:

  图4-15 移动时测距的输出值

  可见,基于OpenMV的颜色块测距系统已经基本实现。

  第五章 总结与展望

  5.1 课题总结

  在这个科技飞速发展的时代,作为绝大部分人类生活学习工作中获得信息的来源,图像以及机器视觉的发展也十分迅速,在未来,人工智能中的视觉智能模块更是人工智能中的重中之重,所以学习、分析机器视觉模块十分重要。

  本文主要对基于OpenMV的颜色块识别追踪与测距系统的设计与实现进行研究,首先介绍了OpenMV视觉模块的国内外研究情况;接着分析了基于OpenMV的颜色块识别、追踪和测距系统的实现;再讲解了Python语言编写的流程图与Python代码;最后介绍了基于OpenMV的颜色块识别、追踪与测距系统的实现与一些环境因素改变时系统所发生的误差。

  5.2 研究展望

  在这个科技发展非常迅速的时代,我们对于世界的认知和开发也越来越深入,作为绝大部分人类生活学习工作中获得信息的来源,图像以及机器视觉的发展也越来越飞速,在未来,人工智能将普及,而人工智能中的视觉智能模块更是人工智能中的重中之重,所以,学习、分析机器视觉模块显得尤为重要。

  机器视觉与机器学习也是不可分割的,OpenMV内置的很多算法近年来在人脸识别、人脸检测、人脸跟踪、航拍、安全防卫、入侵检测、特定目标跟踪、目标检测等领域都发挥了非常重要的作用。而这仅仅是冰山一角,在将来,OpenMV能够实现的功能将越来越多,作用的范围也会越来越广,图像、视频处理领域也会越来越多的运用机器视觉。我会更加深入学习机器视觉,争取为未来的机器视觉添砖加瓦。

毕业论文:http://www.3lunwen.com/jsj/dzjs/5392.html

上一篇:基于OCT的眼底积液自动检测

下一篇:没有了

     移动版:基于OpenMV颜色快识别系统的设计与实现

本文标签:
最新论文