4.1-机械臂色块分拣图像采集《智能机器人技术应用》_第1页
4.1-机械臂色块分拣图像采集《智能机器人技术应用》_第2页
4.1-机械臂色块分拣图像采集《智能机器人技术应用》_第3页
4.1-机械臂色块分拣图像采集《智能机器人技术应用》_第4页
4.1-机械臂色块分拣图像采集《智能机器人技术应用》_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目四YOLO模型实现目标检测创灵实验平台项目引导介绍

首先,什么是YOLO算法?

YOLO及YouOnlyLookOnce,是一种目标检测算法,目标检测任务的目标是找到图像中的所有感兴趣区域,并确定这些区域的位置和类别概率。目标检测领域的深度学习方法主要分为两大类(如右图所示):两阶段式(Two-stage)目标检测算法和单阶段式(One-stage)目标检测算法。两阶段式是先由算法生成一系列候选边界框作为样本,然后再通过卷积神经网络分类这些样本,也被称为基于区域的方法,例如R-CNN、FastR-CNN、FasterR-CNN、R-FCN等;后者则是直接将目标边界定位问题转换成回归问题,图像会被缩放到同一尺寸,并以网格形式均等划分,模型仅需处理图像一次就能得到边界框坐标跟类概率,例如MultiBox、YOLO、SSD等。两种方法的区别也导致其性能也不同,前者在检测准确率和定位准确率方面更优,而后者胜在算法速度。YOLO是一个one-stage的目标检测算法,我们可以将其看作单一的回归问题。YOLO检测系统如下图所示:项目引导介绍YOLOv1:YOLOv1的论文中给出YOLO的主要思想如下:1.我们的系统将输入图像划分为S×S网格,具有分而治之的思想。如果对象的中心落入网格单元中,则该网格单元负责检测该对象。如图三所示,狗的中心落在了第五行第二列的格子中(红点所示),那么这个格子负责预测狗这个对象。这里需要说明一下,网格只是划分图像中物体的位置,而不是将每个格子单独分离出来,所有的网格还是一个整体关系。因此,YOLO在训练和测试时都会全局考虑图像。项目引导介绍YOLOv1:YOLOv1的论文中给出YOLO的主要思想如下:2.每个网格需要预测B个boundingbox,每个boundingbox除了需要预测位置坐标、预测confidence值以外,还需要去预测C个类别的分数。confidence为置信度,是指boundingbox中存在物体的概率;C与数据集的类别相关,VOC数据集为0,COCO数据集为80。每个边界框需要预测5个值:x,y,w,h,confidence。(x,y)表示预测框相对于网格单元边界的中心;(w,h)表示预测框相对于整个图像预测宽度和高度;置信度表示预测框与真实框之间的IOU。置信度的计算公式如下所示:Pr(object)表示网格单元中是否有object,如果有object,则为1,否则为0。IOU(b,object)表示真实框与预测框之间的交并比,表示bbox位置的准确性。网络输出维度为:S×S×(B×5+C)。在YOLOv1中,把图片划分为7×7的网格,每个网格预测两个BoundingBox,我们采用VOC数据集。因此,S=7,B=2,C=20。网络的输出维度为7×7×(2×(4+1)+20)=7×7×30。项目引导介绍YOLOv1:YOLOv1的论文中给出YOLO的网络结构如下:那什么是目标检测呢?项目引导案例目标检测,也叫目标提取,是一种基于目标几何和统计特征的图像分割。它将目标的分割和识别合二为一,其准确性和实时性是整个系统的一项重要能力。尤其是在复杂场景中,需要对多个目标进行实时处理时,目标自动提取和识别就显得特别重要。随着计算机技术的发展和计算机视觉原理的广泛应用,利用计算机图像处理技术对目标进行实时跟踪研究越来越热门,对目标进行动态实时跟踪定位在智能化交通系统、智能监控系统、军事目标检测及医学导航手术中手术器械定位等方面具有广泛的应用价值。机械臂色块分拣图像采集任务一职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一机械臂色块分拣图像采集掌握图像数据采集方法与要求;学习常用图像数据采集的方法;了解并学习opencv保存图像的方法;掌握基于opencv的色块图像采集自动化脚本编写。了解常用图像数据采集方法;了解并掌握opencv保存图像方法;掌握基于opencv的色块图像采集自动化脚本编写。职业能力目标01实验目的实验内容职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一机械臂色块分拣图像采集

此任务要求同学们掌握图像数据采集方法与要求,学习常用图像数据采集的方法,了解并学习opencv保存图像的方法,并掌握基于opencv的色块图像采集自动化脚本编写。任务描述任务要求了解常用图像数据采集方法,学习五个方法;了解并掌握opencv保存图像方法,能够根据实验实现opencv保存图像,并能设置自动保存和手动保存;完成编写基于opencv的色块图像采集自动化脚本。任务描述与要求02职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一机械臂色块分拣图像采集任务分析在引导案例里,我们介绍了目标检测算法,思考一下完成目标检测有哪些步骤,我们要怎么去做?根据自己的了解,要怎样去了解认识目标检测算法,可以促进自己进一步地学习?任务分析与计划03任务计划表项目名称创灵实验平台任务名称机械臂色块分拣图像采集计划方式自主设计计划要求请用6个计划步骤来完整描述出如何完成本次任务序号任务计划1

2

3

4

5

6

通过上面的思考,你是否对本任务要完成的工作有所了解?让我们一起来制订完成本次任务的实施计划吧!任务分析与计划03职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一机械臂色块分拣图像采集opencv204知识储备数据集1数据集04

数据集,又称为资料集、数据集合或资料集合,是一种由数据所组成的集合。

Dataset(或dataset)是一个数据的集合,通常以表格形式出现。每一列代表一个特定变量。每一行都对应于某一成员的数据集的问题。它列出的价值观为每一个变量,如身高和体重的一个物体或价值的随机数。每个数值被称为数据资料。对应于行数,该数据集的数据可能包括一个或多个成员。原理与分类04数据集

从历史上看,这个术语起源于大型机领域,在那里它有一个明确界定的意义,非常接近现代的计算机档案。这个主题是不包括在这里的。最简单的情况下,只有一个变量,然后在数据集由一列列的数值组成,往往被描述为一个列表。尽管名称,这样一个单数据集不是一套通常的数学意义,因为某一个指定数值,可能会出现多次。通常的顺序并不重要,然后这样数值的集合可能被视为多重集,而不是(顺序)列表。值可能是数字,例如真正的数字或整数,例如代表一个人的身高多少厘米,但也可能是象征性的数据(即不包括数字),例如代表一个人的种族问题。更一般的说,价值可以是任何类型描述为某种程度的测量。对于每一个变量,通常所有的值都是同类。但是也可能是“遗漏值”,其中需要指出的某种方式。原理与分类04数据集

数据集可以分成类型化数据集与非类型化数据集。类型化数据集:这种数据集先从基DataSet类派生,然后,使用XML架构文件(.xsd文件)中的信息生成新类。架构中的信息(表、列等)被作为一组第一类对象和属性生成并编译为此新数据集类。可以直接通过名称引用表和列,在VS.NET中可以智能感知元素的类型。非类型化数据集:这种数据集没有相应的内置架构。与类型化数据集一样,非类型化数据集也包含表、列等,但它们只作为集合公开。需要通过Tables集合引用列。04(注:请打开JupyterLab项目四:YOLO模型实现目标检测第一节)常用图像数据采集方法获取图像数据集方法:1).开源数据集和代码开源一样,随着人工智能的发展,数据这种人工智能时代重要的资源已经有越来越多的公开资源了。可以直接下载进行对应需求的模型训练,如手写字数据集MNIST,目标检测数据集COCO,人脸识别LWF等都是各自领域比较热门的公开数据集;04(注:请打开JupyterLab项目四:YOLO模型实现目标检测第一节)常用图像数据采集方法获取图像数据集方法:2).网络爬虫互联网的发展,网络上有很多的数据资源,图片也不例外,而从网络上高效获取图片的方法是使用网络爬虫工具,所以,网络爬虫也是一种获取图片数据的方法之一;04(注:请打开JupyterLab项目四:YOLO模型实现目标检测第一节)常用图像数据采集方法获取图像数据集方法:3).摄像采集有时候有些人工智能应用场景可能比较难找到合适的且符合场景的数据集,这时候就需要根据实际的场景进行数据采集,而采集的方法场景的就是使用摄像头进行需要的数据采集;04(注:请打开JupyterLab项目四:YOLO模型实现目标检测第一节)常用图像数据采集方法获取图像数据集方法:4).视频获取有些时候需要的图片数据可能在一帧帧的视频里,这时候就需要从视频里将图像数据提取出来。04(注:请打开JupyterLab项目四:YOLO模型实现目标检测第一节)常用图像数据采集方法获取图像数据集方法:5).摄像头图像数据采集摄像头在进行图像数据采集时候,需要结合软件进行相应的采集与处理,本次实验是使用opencv计算机视觉处理库,通过编写Python代码半自动的进行图片数据采集,采集符合要求的数据,减少数据清洗的工作量。05知识储备opencv2数据集1304什么是opencv?

OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和MacOS操作系统上。它轻量级而且高效——由一系列C函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。大家在生活中有哪些地方遇到过或者使用过opencv的地方吗?04思考一下,我们在过去学习代码的时候有使用过opencv吗?什么是opencv?

OpenCV用C++语言编写,它具有C++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和MacOS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令,如今也提供对于C#、Ch、Ruby,GO的支持。历史发展04OpenCV

OpenCV拥有包括500多个C函数的跨平台的中、高层API。它不依赖于其它的外部库——尽管也可以使用某些外部库。OpenCV为Intel®IntegratedPerformancePrimitives(IPP)提供了透明接口。这意味着如果有为特定处理器优化的IPP库,OpenCV将在运行时自动加载这些库。(注:OpenCV2.0版的代码已显著优化,无需IPP来提升性能,故2.0版不再提供IPP接口)最新版本是4.5。1999年1月,CVL项目启动。主要目标是人机界面,能被UI调用的实时计算机视觉库,为Intel处理器做了特定优化。2000年6月,第一个开源版本OpenCValpha3发布。2000年12月,针对linux平台的OpenCVbeta1发布。2006年,支持MacOS的OpenCV1.0发布。历史发展04OpenCV

2009年9月,OpenCV1.2(beta2.0)发布。2009年10月1日,Version2.0发布。2010年12月6日,OpenCV2.2发布。2011年8月,OpenCV2.3发布。2012年4月2日,发布OpenCV2.4。2014年8月21日,发布OpenCv3.0alpha。2014年11月11日,发布OpenCV3.0beta。2015年6月4日,发布OpenCV3.0。2016年12月,发布OpenCV3.2版(合并969个修补程序,关闭478个问题)2017年8月3日,发布OpenCV3.3版(最重要的更新是把DNN模块从contrib里面提到主仓库)历史发展04OpenCV

OpenCV使用类BSDlicense,所以对非商业应用和商业应用都是免费(FREE)的。(细节参考license)OpenCV提供的视觉处理算法非常丰富,并且它部分以C语言编写,加上其开源的特性,处理得当,不需要添加新的外部支持也可以完整的编译链接生成执行程序,所以很多人用它来做算法的移植,OpenCV的代码经过适当改写可以正常的运行在DSP系统和ARM嵌入式系统中,这种移植在大学中经常作为相关专业本科生毕业设计或者研究生课题的选题。优势04OpenCV

计算机视觉市场巨大而且持续增长,且这方面没有标准API,如今的计算机视觉软件大概有以下三种:1、研究代码(慢,不稳定,独立并与其他库不兼容)2、耗费很高的商业化工具(比如Halcon,MATLAB+Simulink)3、依赖硬件的一些特别的解决方案(比如视频监控,制造控制系统,医疗设备)这是如今的现状,而标准的API将简化计算机视觉程序和解决方案的开发,OpenCV致力于成为这样的标准API。OpenCV致力于真实世界的实时应用,通过优化的C代码的编写对其执行速度带来了可观的提升,并且可以通过购买Intel的IPP高性能多媒体函数库(IntegratedPerformancePrimitives)得到更快的处理速度。职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务一机械臂色块分拣图像采集基于opencv的色块图像采集自动化脚本编写204任务实施opencv保存图像方法1机械臂色块分拣图像采集任务一opencv保存图像方法(详细实验请参考第四章中任务一部分)我们该去如何完成实验呢?

需求描述:通过opencv调用摄像头,每10秒保存当前捕获的图片,并按顺序进行命名,保存10张后停止。具体步骤如下:步骤一:导入必要的依赖库:importcv2importtimefromthreadingimportThreadimportipywidgetsaswidgets

fromIPython.displayimportdisplay机械臂色块分拣图像采集任务一opencv保存图像方法(详细实验请参考第四章中任务一部分)我们该去如何完成实验呢?

需求描述:通过opencv调用摄像头,每10秒保存当前捕获的图片,并按顺序进行命名,保存10张后停止。具体步骤如下:步骤二:编写线程异步函数装饰器:defasync_call(fn):

"""异步装饰器:paramfn:函数:return:"""def

wrapper(*args,**kwargs):th=Thread(target=fn,args=args,kwargs=kwargs)th.start()returnwrapper机械臂色块分拣图像采集任务一opencv保存图像方法(详细实验请参考第四章中任务一部分)我们该去如何完成实验呢?

需求描述:通过opencv调用摄像头,每10秒保存当前捕获的图片,并按顺序进行命名,保存10张后停止。具体步骤如下:步骤三:构建显示图像函数:image=widgets.Image(format='jpg',height=480,width=640)机械臂色块分拣图像采集任务一opencv保存图像方法(详细实验请参考第四章中任务一部分)步骤四:编写opencv调用摄像头函数:

1.cv2.VideoCapture(0)调用设备摄像头的功能2.capture.read()读取一帧的图片

3.cv2.imencode('.jpg',frame)[1].tobytes()读取图像数据并转换成图片格式并转成bytes数据。@async_calldef

save_img():#保存图像函数capture=cv2.VideoCapture(0)#采集图像

globalret,frame

whileTrue:ret,frame=capture.read()#读取图像

ifnotret:time.sleep(2)

continueimgbox=cv2.imencode('.jpg',frame)[1].tobytes()

globalimageimage.value=imgbox机械臂色块分拣图像采集任务一opencv保存图像方法(详细实验请参考第四章中任务一部分)步骤四:编写opencv调用摄像头函数:

1.cv2.VideoCapture(0)调用设备摄像头的功能2.capture.read()读取一帧的图片

3.cv2.imencode('.jpg',frame)[1].tobytes()读取图像数据并转换成图片格式并转成bytes数据。机械臂色块分拣图像采集任务一opencv保存图像方法(详细实验请参考第四章中任务一部分)步骤四:编写opencv调用摄像头函数:

1.cv2.VideoCapture(0)调用设备摄像头的功能2.capture.read()读取一帧的图片

3.cv2.imencode('.jpg',frame)[1].tobytes()读取图像数据并转换成图片格式并转成bytes数据。机械臂色块分拣图像采集任务一opencv保存图像方法(详细实验请参考第四章中任务一部分)动手练习1:1.在<1>处,填写opencv使用usb摄像头代码。2.在<2>处,填写将opencv读取图像数据并转换成图片格式并转成bytes数据。@async_calldefsave_img():

<1>

globalret,frame

whileTrue:ret,frame=capture.read()

ifnotret:time.sleep(2)

continue

<2>

globalimageimage.value=imgbox机械臂色块分拣图像采集任务一opencv保存图像方法(详细实验请参考第四章中任务一部分)步骤五:保存图像前先清空save_img文件夹:#慎重执行,否则会清空你采集好的图像数据!rm-rf./save_img/*.png机械臂色块分拣图像采集任务一opencv保存图像方法(详细实验请参考第四章中任务一部分)步骤六:显示图像与保存图像:采集图像建议使用电脑与开发板直连的方式进行,电脑使用无线方式连接路由在采集图片时会因为传输原因摄像头画面延迟比较严重。frame=None#图像全局变量ret=Nonesave_img()#执行调用摄像头获取图片函数display(image)#显示图片num=1#计数变量whileTrue:image_name='./save_img/'+str(num)+'.png'#图片名称构建,将图片保存在save_img目录ifnotret:continuecv2.imwrite(image_name,frame)#保存图片print(str(num)+'.png')num+=1time.sleep(2)ifnum>10:#大于10张图片后退出循环print("图像采集完毕!")break注意:图像采集完毕,重启内核,释放摄像头资源,防止占用摄像头导致后续实验无法进行。如图所示。机械臂色块分拣图像采集任务一opencv保存图像方法(详细实验请参考第四章中任务一部分)动手练习2:在上面的opencv保存图片代码的基础上,修改下代码,让其可以通过手动控制进行图片保存(将摄像头变成一部自制的照相机)。1.在<1>处,添加代码,是TakePhoto具备异步的功能。2.在<2>处,添加代码,保证照相开关可以正常恢复。2.在<3>处,添加代码,使图片可以正常保存。机械臂色块分拣图像采集任务一opencv保存图像方法(详细实验请参考第四章中任务一部分)动手练习2:frame=None#图像全局变量save_img()#执行调用摄像头获取图片函数display(image)#显示图片take_photo=None#照相开关exit_var=None#退出开关

<1>defTakePhoto():global<2>print("等待照相.....")num=1#计数变量whileTrue:image_name='./save_img/'+str(num)+'.png'#图片名称构建,将图片保存在save_img目录if(frameisNone):continueiftake_photo:#照相开关打开机械臂色块分拣图像采集任务一opencv保存图像方法(详细实验请参考第四章中任务一部分)动手练习2:<3>print("{0}拍照成功".format(str(num)+'.png'))num+=1take_photo=Noneprint("等待照相.....")ifexit_var:#退出循环breakdefbutton():'''照相按钮'''globaltake_phototake_photo=True

TakePhoto()机械臂色块分拣图像采集任务一opencv保存图像方法(详细实验请参考第四章中任务一部分)动手练习2:#慎重执行,否则会清空你采集好的图像数据!rm-rf./save_img/*.png保存图像前先清空save_img文件夹。重复执行button按钮代码框,可重复拍照。button()05任务实施2opencv保存图像方法13基于opencv的色块图像采集自动化脚本编写色块图像采集实验教学分析我们要怎么设置使用opencv?我们要怎么去通过opencv去进行色块图像采集自动化?在生活中有哪些运用到了色块图像采集自动化?基于opencv的色块图像采集自动化脚本编写05通过上面的思考,你是否对本任务要完成的任务有所了解?让我们一起来学习如何使用基于opencv的色块图像采集自动化脚本编写吧!05基于opencv的色块图像采集自动化脚本编写基于opencv的色块图像采集自动化脚本编写05步骤一:导入必要依赖库importcv2importtimefromthreadingimportThreadimportipywidgetsaswidgetsfromIPython.displayimportdisplay

接下来我们要基于opencv进行色块图像采集,那么我们要怎样去实现他呢?基于opencv的色块图像采集自动化脚本编写05步骤二:编写线程异步装饰器函数defasync_call(fn):"""异步装饰器:paramfn:函数:return:"""defwrapper(*args,**kwargs):th=Thread(target=fn,args=args,kwargs=kwargs)th.start()returnwrapper

接下来我们要基于opencv进行色块图像采集,那么我们要怎样去实现他呢?基于opencv的色块图像采集自动化脚本编写05步骤三:构建显示图像窗口image=widgets.Image(format='jpg',height=480,width=640)

接下来我们要基于opencv进行色块图像采集,那么我们要怎样去实现他呢?步骤四:编写opencv调用摄像头函数@async_calldefsave_img():capture=cv2.VideoCapture(0)globalframewhileTrue:ret,frame=capture.read()ifnotret:time.sleep(2)continueimgbox=cv2.imencode('.jpg',frame)[1].tobytes()globalimageimage.value=imgbox基于opencv的色块图像采集自动化脚本编写05步骤五:定义采集参数1、color_list要采集色块的颜色种类2、单种颜色采集图片数量3、take_img保存图片开关color_list=["green","yellow","red","blue"]img_num=100take_img=None

接下来我们要基于opencv进行色块图像采集,那么我们要怎样去实现他呢?基于opencv的色块图像采集自动化脚本编写05步骤六:定义功能函数@async_calldefcollect():globaltake_imgforcincolor_list:foriinrange(1,img_num+1):image_name='./image/'+c+'_'+str(i)+'.png'print("等待{0}保存".format(c+'_'+str(i)+'.png'))whileTrue:iftake_img:cv2.imwrite(image_name,frame)#保存图片print("{0}保存成功".format(c+'_'+str(i)+'.png'))print("*"*30)take_img=Nonebreak

接下来我们要基于opencv进行色块图像采集,那么我们要怎样去实现他呢?基于opencv的色块图像采集自动化脚本编写05步骤七:定义保存图片开关defbutton():globaltake_imgtake_img=True

接下来我们要基于opencv进行色块图像采集,那么我们要怎样去实现他呢?步骤八:定义保存图片开关frame=Nonesave_img()display(image)collect()

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论