Giter Site home page Giter Site logo

picking's People

Contributors

eternal-echo avatar

Stargazers

 avatar

Watchers

 avatar

Forkers

gleke

picking's Issues

[move] 传送带速度计算

传送带的速度和图片中像素移动的速度需要建立联系。这样根据坐标能够计算时长。

测试阶段先在程序中使用定时器计算目标的移动多少像素每秒。

然后零件移动多少cm每秒。

[detect][optical] 运动目标检测

光流法

步骤

使用光流法来估计目标零件的运动方向和速度的具体步骤如下:

  • 选取感兴趣区域:将目标零件的矩形选框扩大一定的范围,作为光流法的感兴趣区域。
  • 选择光流法:选择一种合适的光流法算法,例如基于互相关的Lucas-Kanade算法、Horn-Schunck算法等。
  • 计算光流:利用选定的光流法算法,在连续两帧图像中,对感兴趣区域内的像素进行匹配,得到每个像素的位移向量,即光流向量。
  • 过滤光流向量:对于光流向量进行一些过滤和优化,例如使用中值滤波去除噪声,使用平均值滤波平滑光流向量等。
  • 计算平均运动向量:对于所有的光流向量,可以计算出平均运动向量,即为目标零件的运动方向和速度。
    需要注意的是,光流法的精度受到许多因素的影响,例如运动模式、图像噪声、光照变化等。因此,在实际应用中,需要对算法进行优化和改进,以提高光流估计的精度和稳定性。

进度

暂时不用光流法,直接对连通域进行匹配,将前一帧的每个连通域与当前帧的每一个连通域进行匹配,是否能够找到横坐标基本不变(x坐标值减小不到40),纵坐标变小(向上移动)的匹配的连通域。然后对连通域坐标进行卡尔曼滤波,得到坐标、速度、加速度信息。

[mark]标定模块部分

标定模块

  • 通过两条直线,标出传送带的范围
  • 通过矩形框,给出最大零件和最小零件的尺寸,用于连通域的筛选。
  • 标注完成后需要将传送带范围和最大最小零件尺寸保存到select.json文件中

[detec][filter][morphology] 通过腐蚀,去除传送带上的噪点

以下是实现步骤:

  • 对原始二值图像进行腐蚀操作,消除噪点。
  • 使用连通域分析算法获取腐蚀后二值图像中所有的连通域信息。
  • 针对每个连通域,判断其是否存在于原来的二值图像中。如果存在,说明该连通域对应原来的白色区域仍然存在;如果不存在,说明该连通域对应的白色区域已被腐蚀消除,应该将该连通域从筛选结果中剔除。
  • 将所有未被剔除的连通域对应的白色区域作为筛选结果输出。

需要注意以下问题:

  • 腐蚀操作可能会将一些本来应该保留的白色区域消除掉,因此需要根据具体情况来选择合适的腐蚀程度。
  • 连通域分析算法需要根据实际情况来选择合适的实现方式和参数,以保证能够正确获取所有连通域信息。
  • 判断连通域是否存在于原来的二值图像中时,需要考虑到连通域的位置、大小等因素,以免误判。
  • 如果存在多个白色区域有重叠部分,可能会被误判为一个连通域。需要根据具体情况选择合适的解决方案。

自动化零件分拣输送系统

自动化零件分拣输送系统 Automatic parts sorting and conveying system

该系统是一个自动化生产线,主要用于零件的分拣和输送。系统包含以下部分:

  • 视觉分拣系统:(#2 )
    使用相机或摄像头采集传送带上零件的运动视频流,然后对视频流进行处理和分析,通过背景建模、噪声过滤、连通域分析、运动目标检测和目标跟踪等步骤,检测到零件并进行识别和分类,最终控制喷嘴吹送到指定区域。

  • 移动模块:(#1 )
    控制喷嘴的移动,根据传输协议将零件吹送到相应的区域。

  • 数据库模块:
    将检测到的零件信息存储到数据库中,以备后续统计和分析。

  • 用户界面模块:
    提供系统的可视化界面,方便用户进行操作和监控系统状态。

  • #4
    传送带位置标定模块:负责标定传送带的位置,并确定最大零件和最小零件的选框大小。

系统设计说明

在设计时,需要考虑传输速率和稳定性,以确保移动模块能够及时接收到视觉分拣系统的指令,并实现精准控制。此外,还需要进行系统测试和调试,以确保整个系统的稳定性和可靠性。

视觉分拣系统

该系统的设计中,需要选用高质量的相机或摄像头来采集传送带上零件的运动视频流。为了提高视频流的质量和减少误检率,系统需要使用混合高斯模型对视频流的背景进行建模,并使用形态学操作来去除噪声和连接连通域。根据相邻帧间连通域的重叠面积、位移方向和大小跟踪目标。

当检测到目标出现,向线程池提交任务。在任务中调用YOLOv5的api进行检测,检测完成后查看零件的实时预估位置,计算出到达指定区域的时间。根据预期时间,延时开启对应喷嘴然后关闭。

移动模块需要通过modbus协议,控制多路开关来开启和关闭电磁阀,从而控制喷嘴吹送零件。

[detect][kalman] 卡尔曼滤波实现目标跟踪

卡尔曼滤波

步骤

卡尔曼滤波器是一种常用的状态估计方法,可以用来跟踪目标的位置、速度和加速度等状态。以下是使用卡尔曼滤波器来跟踪候选目标的具体步骤:

  • 定义状态向量:对于目标的位置、速度和加速度等状态,可以定义一个状态向量,如x=[x,y,vx,vy,ax,ay],其中x和y分别表示目标的横向和纵向位置,vx和vy分别表示目标的横向和纵向速度,ax和ay分别表示目标的横向和纵向加速度。
  • 定义观测向量:可以使用目标在图像上的位置作为观测向量,如z=[x,y]。
  • 定义状态转移矩阵:可以使用匀加速运动模型来描述目标的运动状态,状态转移矩阵为F=[1,0,Δt,0,0.5Δt^2,0;0,1,0,Δt,0,0.5Δt^2;0,0,1,0,Δt,0;0,0,0,1,0,Δt;0,0,0,0,1,0;0,0,0,0,0,1],其中Δt为两帧图像之间的时间间隔。
  • 定义观测矩阵:可以使用单位矩阵作为观测矩阵,即H=[1,0,0,0,0,0;0,1,0,0,0,0]。
  • 定义过程噪声和观测噪声:过程噪声可以使用匀加速运动模型来估计,观测噪声可以根据实际情况来确定。
  • 初始化滤波器:对于每个候选目标,可以使用其初始位置和速度来初始化卡尔曼滤波器。
  • 预测目标状态:使用状态转移矩阵和过程噪声来预测目标的状态,如x(k)=F*x(k-1)+w(k),其中w(k)为过程噪声。
  • 预测目标协方差:使用状态转移矩阵、过程噪声和上一时刻的协方差来预测目标的协方差,如P(k)=F*P(k-1)*F'+Q(k),其中Q(k)为过程噪声的协方差矩阵。
  • 更新目标状态:使用观测向量和观测噪声来更新目标的状态,如x(k)=x(k)+K(k)(z(k)-Hx(k)),其中K(k)为卡尔曼增益。
  • 更新

[detect][filter] 噪声过滤和连通域分析

对二值化的图像进行形态学操作来去除噪声,并将目标连接成连通域。接着,通过连通域分析,筛选出候选目标。使用区域生长算法来进行连通域分析,并根据连通域的大小进行过滤。

  • #9
  • 找到面积在阈值范围内的连通域
  • 框选候选目标,等待卡尔曼滤波通过速度来去除静止的光斑

[move] 零件移动模块设计

零件检测模块会零件移动模块传递零件的类型和坐标参数,零件传输模块需要根据零件类型和坐标,在某个时间范围内启动对应类型的喷嘴。

喷嘴接口

可以开启和关闭对应的喷嘴,获取某个喷嘴的状态。目前已通过集成测试,能正确控制多路放大器。

  • open_valve
  • open_all_valves
  • close_valve
  • close_all_valves
  • get_valve_status
  • get_all_valve_status

[detect] 移动零件的检测 Moving Object Detection

检测模块

架构

  • 采集视频流
    使用相机或者摄像头采集传送带上的物体运动视频流。

  • #5
    采用混合高斯模型对视频流的背景进行建模。此步骤将使我们获得场景中的前景和背景信息。通过比较当前帧与背景模型,将得到一张二值化的图像。

  • #8
    对二值化的图像进行形态学操作来去除噪声,并将目标连接成连通域。接着,通过连通域分析,筛选出候选目标。使用区域生长算法来进行连通域分析,并根据连通域的大小进行过滤。

  • #11
    使用卡尔曼滤波器对目标的状态进行估计和预测,并根据新的测量值进行更新速度和加速度等信息。只有速度和加速度恒定的候选目标才是待检测的目标零件。

  • #15
    当传送带上目标离开视频流的指定区域后,使用yolov5识别跟踪过程中获取的目标。在识别出目标后,将其分类并分拣到相应的区域。

资料

使用背景消除或帧差法实现,适用于这个相机固定的背景。光流法和均值偏移法计算量大。
image

参考文献

https://ieeexplore.ieee.org/abstract/document/7856037

[move] 类型重复

move中下面的参数和sys重复了,后续需要删除

@dataclass
class Point:
    x: float
    y: float

@dataclass
class PartInfo:
    part_id: int
    pos: Point
    timestamp: float

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.