葡京线路检测3522_葡京线路检测中心网址|首页

托盘插孔视觉识别解决方案

添加时间: 2021-07-03

来源:

浏览:

概 述

AGV实现自动搬运的两个最重要环节分别是叉车在仓储地图中的定位与导航和叉车对托盘的位置检测。一般自动搬运流程为:

(1)叉车受仓储调度系统的指令,获取自身与托盘在仓储环境中的位置,并自动规划路径,抵达相应的工位。

(2)叉车在当前工位自动检测托盘位置,获取自身与托盘的相对位姿关系,并调整位置与姿态,规划合理路径存取托盘。

由此可见,叉车到达指定工位、在存取托盘前与托盘的相对位姿初始状态受叉车在仓储环境中的导航与定位的精度影响。常见的有轨导航,如磁钉导航、二维码导航等,以及无轨导航,如视觉slam、激光slam等,这些导航方式精度都不理想。叉车与托盘的初始位姿还受重复搬运的累积误差、重力引起的车叉形变等因素影响。由于叉车与托盘的初始位置在实际搬运过程中易于变化,存在着很大的安全隐患,所以对托盘进行视觉识别是必不可少的一项环节。

 而当前对托盘检测的研究方法主要可分为以下三类:

(1)基于激光雷达的检测方法。激光雷达具有测量精度高、抗干扰能力强等优点,因此对光照具有较强的鲁棒性,但是其成本十分昂贵,一般企业难以承受如此高昂的价格,并不适合大规模使用。

(2)基于视觉的检测方法。视觉传感器结构简单,安装方式多元化,价格低廉,更适合投入到实际应用。视觉传感器主要用单目、双目摄像头、深度相机等其他外部设备获取图像,从图像背景中分割出仓储托盘,用特定的特征进行检测。

 基于激光雷达与视觉结合的方法。雷达与相机结合可以获得稠密的三维数据、物体的纹理、深度,也可以获得颜色、亮度等光学信息。检测效果好,是一个较为理想的方案。但是价格昂贵,而且传感器之间的联合标定和配准十分复杂。

  本设计方案前端基于tensorflow深度学习网络对储物托盘进行识别,提取图像感性区域。后端基于opencv进行算法处理,提取托盘特征及其定位。


一、 tensorflow模型训练

1.1 环境搭建

(1)安装tensorflowKeras环境。

(2)安装训练说需要的pillowjupytermatplotliblxml 包。打开anaconda输入命令即可。

(3)GitHub上下载所需的models文件,地址:https://github.com/tensorflow/models(这是tensorflow提供训练好的model)

(4)下载SSD-MobileNet模型,本文深度学习网络基于ssd模型。

(5)下载protobuf,训练模型和配置参数需要protobuf先编译文件,下载地址https://github.com/google/protobuf/releases。需选择Windows版本,解压后将bin文件下的 protoc.exe 放到 Cwindows 下。并在models esearch目录下打开cmd命令行窗口,输入命令编译文件。                  

2 数据标注及格式转换

1.2.1 制作托盘数据集

  1. 下载labelImg,并标注自己收集的图片样本,框出需要识别的托盘图片,并标注“pallet”,标注的标签自动保存为xml格式。

      准备voc数据集,在object_detection文件夹下新建voc文件夹,用于存储训练数据,以及训练生成的模型文件,将所有的图片放入JPEGImages文件夹中。标注的xml文件放入split文件夹中。

1.2.2 文件格式转换

1.  xml文件转换csv文件

      首先需要把数据集分成训练集和测试集,其中训练集占总数据集90%,测试集占10%。如图2-5所示,在该文件夹下新建Annotataions文件夹,在该文件夹下新建traintest文件夹分别用于放入训练集以及测试集。,打开 train_test_split.py 文件。运行自动生成所需文件,注意更改原文件及存储文件路径。

       其次分别将训练集、测试集的xml文件转换成csv文件。新建data文件夹,将生成文件放入。打开 xml_to_csv.py 文件,注意修改原文件及存储文件路径,运行后输出结果为 Successfully converted xml to csv. 表示成功。

 转换tfrecord文件

     TFRecord文件是tensorflow提供的统一存储数据的一种二进制格式,也是模型训练首选的文件格式,里面既有图片数据也有label数据。打开generate_tfrecord.py 文件,修改label的名称为“pallet”,如若还有别的label,在下面自行添加。

1.jpg


  object_detectionvocVOCdevkitVOC2007data 目录下,打开cmd命令行窗口。输入python generate_tfrecord.py --csv_input=data/train_labels.csv --output_path=data/train.tfrecord 。生成二进制的训练集文件。输入python generate_tfrecord.py --csv_input=data/test_labels.csv --output_path=data/test.tfrecord 。生成二进制的测试集文件。

1.3 训练模型

1.3.1 配置pbtxt config文件

   pbtxt文件存放模型识别的种类和数量,config文件内存放着模型训练的参数。object_detection文件夹下的 pascal_label_map.pbtxt复制到voc文件夹下,改名为 label_map.pbtxt,并对其进行修改,其中name对应标注的名称。  

voc文件夹下新建pretraind文件夹, 将下载好的 ssd_mobilenet_v1_coco模型解压到此文件夹。在 models/research/object_detection/samples/configs 文件下的 ssd_mobile_v1_coco.config voc文件夹下,改名为ssd_mobilenet_v1.config

2.jpg


1.3.2 训练模型

    object_detection/ 目录下,打开cmd命令行窗口,输入python train.py --train_dir voc/train_dir/ --pipeline_config_path voc/ssd_mobilenet_v1.config 命令。开始训练时,观察模型随着时间是否下降,在其达到近似一个收敛的值时,可考虑结束训练。

3.jpg


1.3.3 opencv模型调用

  训练完模型之后,生成的模型结构存储在voc/train_dir下,如下图所示。仓储托盘前端识别工作已完成,进而需要将该模型在opencv中调用,进行后端算法定位。因opencv无法读取ckpt格式的模型,只能调用.pb模型文件,所以需把训练过程文件导出,转为.pb的模型文件。object_detection目录下提供了export_inference_graph.py文件,可以将ckpt格式冻结为pb格式。

voc文件夹下新建export文件夹,用于存放生成的pb文件。到object_detection目录下,打开cmd命令行窗口,输入命令:

python export_inference_graph.py

--input_type image_tensor

--pipeline_config_path voc/ssd_mobilenet_v1.config

--trained_checkpoint_prefix voc/train_dir/model.ckpt-1000

--output_directory voc/export/

Opencv调用tensorflow目标检测模型的pb文件还需要一个对应的pbtxt文件,否则会报错,opencv_extra提供了一些现有的.pbtxt文件。也可根据自己的pb文件config文件生成该模型对应的pbtxt文件,避免报错的风险。

该步骤需要两个执行文件,即在voc/export文件夹下的translation.py tf_text_graph_common.py文件。到voc/export文件夹下,打开cmd命令行窗口,

输入命令:

python translation.py

--input frozen_inference_graph.pb

--config D:/train_model/object_detection/voc/ssd_mobilenet_v1.config

--output D:/train_model/object_detection/voc/export/ssd_v1.pbtxt

 至此模型调用所需文件的准备工作完成。所需文件在voc/export/文件夹下。继而将模型导入opencv进行托盘前端识别,分割出图像感性ROI区域,对区域进行后端图像处理,算法检测等等,如下图所示为部分图像提取的感性ROI区域。

4.jpg

          二、仓储托盘定位

 本方案所需定位的仓储托盘具备典型的三维外形、立面轮廓。在当前已有的识别方法中,有基于托盘立面等的局部特征检测和基于三维外形的全局检测。目前基于局部特征的检测算法依赖托盘立面的点线特征、颜色灰度分布、托盘立柱与叉孔的线段比例等。这类算法对于在较强的光照环境、相似的物体视角下具有较快的识别效率。但对于仓储环境复杂、光照不均、托盘摆放偏角、以及托盘堆叠等情况下识别率低,且复杂环境下算法复杂。基于全局特征的检测算法主要通过激光雷达、或三维相机等,得到仓储托盘的三维点云数据,与托盘特征进行匹配。基于全局的托盘检测算法光照鲁棒性强、对位姿偏角大、堆叠的托盘识别率更高。

2.2 数据预处理

      由于相机直接捕捉到的图片中含有或多或少的毛边或杂点。这些噪声点很大程度上将影响仓储托盘的边缘检测,所以需对图像进行预处理,对噪声点进行滤除。

2.2.1 高斯滤波

高斯滤波(Gauss Filter)是线性滤波中的一种。在OpenCV图像滤波处理中,高斯滤波用于平滑图像,或者说是图像模糊处理,因此高斯滤波是低通的。其广泛的应用在图像处理的减噪过程中,尤其是被高斯噪声所污染的图像上。
       高斯滤波的基本思想是: 图像上的每一个像素点的值,都由其本身和邻域内其他像素点的值经过加权平均后得到。其具体操作是,用一个核(又称为卷积核、掩模、矩阵)扫描图像中每一个像素点,将邻域内各个像素值与对应位置的权值相称并求和。从数学的角度来看,高斯滤波的过程是图像与高斯正态分布做卷积操作。
高斯滤波是将二维高斯正态分布放在图像矩阵上做卷积运算。考虑的是邻域内像素值的空间距离关系,因此对彩色图像处理时应分通道进行操作,也就是说操作的图像原矩阵时用单通道数据,最后合并为彩色图像。高斯滤波在数值图像处理中最常见的是以滑动卷积窗口来实现,利用高斯滤波方法,对噪声点进行滤除。

2.2.2 边缘检测

对仓储托盘的定位算法实则是对数字图像的像素值进行直接的操作,从而得到目标在图像中的边缘信息。利用边缘检测算法,对数字图像中像素值变化较为剧烈的“边缘”,能够进行有效的提取,保留图像的边缘结构信息。各个检测算法基于图像强度的导数及卷积核不同,所以产生了多种效果不同的检测算法,本文采取了SobelLaplaceCanny三种算子的边缘检测方法。

5.jpg


 拉普拉斯算子(laplace)与索贝尔算子(sobel)不同之处在于对图像强度的导数不同,索贝尔算子计算一阶微分,拉普拉斯算子计算二阶微分。处理结果如下图。

6.jpg


 Canny算子检测原理是通过图像信号函数的极大值来判定图像的边缘像素点。边缘检测的算法主要是基于图像强度的一阶和二阶微分操作,但导数通常对噪声很敏感,边缘检测算法常常需要根据图像源的数据进行预处理操作,因此必须采用滤波器来改善与噪声有关的边缘检测的性能。在进行Canny算子边缘检测前,应当先对原始数据与滤波模板进行卷积操作,得到模糊后的图像如图上图。本方案使用均值滤波器卷积降噪。Canny 边缘检测算子,处理结果如图下图所示。

7.jpg

2.3 定位算法

        此部分内容针对预处理后的数字图像结果进行算法设计,从而得到托盘两插孔的坐标,实现仓储托盘定位的最后一步。根据2.2部分的预处理结果的比较,由于Canny边缘检测方法使用两种不同的阈值分别检测强边缘和弱边缘,并且当弱边缘和强边缘相连时,才将弱边缘包含在输出图像中。意味着Canny检测算法在不容易受噪声干扰的同时,也能够检测到真正的弱边缘,因此本文选用Canny边缘检测作为预处理方法。

2.3.1 直线检测

       由于Canny边缘检测结果是一张二值化的数字图像,由一系列像素点构成,而若用一系列像素点集来表达仓储托盘的轮廓信息,则不仅数据量过大,且复杂、不易管理,所以提前提取有效、简易的数据信息十分重要。本文所采取的方案是先将检测结果图像中的一系列像素点拟合成一条条直线,用一系列直线组合来表达仓储托盘的轮廓,且存储直线的信息只需要保留其两端点的坐标即可。

 将点拟合成直线有多种方法,OpenCV为我们提供了霍夫直线检测方法。霍夫变换利用点与线之间的对偶性,将图像空间中直线上离散的像素点通过参数方程映射为霍夫空间中的曲线,并将霍夫空间中多条曲线的交点作为直线方程的参数映射为图像空间中的直线。霍夫直线检测有较强的抗干扰能力,对图像中的噪声以及非直线结构不敏感,能够适应目标特征边缘的间隙。

2.3.2 直线拟合

所示的直线检测结果中,可以看出单一的一条边中有重合、距离及其靠近的多条直线构成,或一条边是由多条短线段相连、相重合而成。这会使直线数据信息复杂化,甚至或导致用于表达直线的端点坐标发生错误。因此必须做到一条边由一条线段表示,且做到直线两端点坐标准确表达托盘轮廓的两终点的位置。可以明显看出每条边都由一条线段绘制而成,托盘立面下方的直线也完成补全目标。

9.jpg


2.3.3 插孔坐标定位

设计要求:

1)确定两插孔的轮廓位置。

2)输出两插孔中心点的坐标。

设计步骤如下:

(1)    对上述结果图片进行矩形检测,检测出图像中满足条件的所有矩形。

(2)    构建矩形间的位姿关系,使其满足托盘立面的结构特征,从而进行定位。

10.jpg


   对托盘立面矩形特征描述是指将上图中表征仓储托盘共性特征的三个矩形(外轮廓矩形1、左插孔矩形2、右插孔矩形3)建立相互位置关系,托盘特征描述是托盘定位的核心。而相对位置关系的设计将直接绝定托盘定位性能的好坏。由于图像处理后的图像中,托盘轮廓线段会有或长或短的缺失,如下图中线段5与线段7所示,无法采用opencv自带的矩形检测方法。需自行设计一个合托盘特征矩形的特定矩形检测算法,筛选出符合条件的所有矩形。

11.jpg


合肥葡京线路检测3522智能机器人针对托盘插孔识别难点,采用线段聚类模型设计了托盘立面插孔轮廓矩形的特征描述模型及相应算法,可精准插孔位置坐标,处理结果在整幅图像如下图所示。

12.jpg

现场测试视频如下:


联系我们

地 址: 合肥市马鞍山路1000号

电 话: 0551-62902652

Q Q: 23435547

邮 箱: hfyhir@163.com

在线留言
姓名Name
邮 箱Email
联系电话Tel
标题Title
内容Content
微信扫一扫