本发明涉及机器视觉图像处理领域,特别是涉及双队列异步图像处理方法及装置。
背景技术:
目前,业界所采用典型的机器视觉处理流程是将采集图像作为图像处理过程中的采图步骤,在采图后再进行图像算法处理等具体步骤,采集图像与图像算法处理共同构成完整的图像处理流程,一次流程执行过程中会依次执行流程中所编辑步骤,所有步骤执行完毕再开始执行下一次。
如此,在图像处理时间远大于图像采集时间的情况下,图像采集需等待图像处理完成后再进行下一次采图,降低了图像采集的节拍,进而会出现无法满足生产节拍的情况。
技术实现要素:
鉴于以上所述现有技术的缺点,本发明的目的在于提供双队列异步图像处理方法及装置,用于解决上述现有技术中因图像处理时间远大于图像采集时间导致无法满足生产需求的问题。
为实现上述目的及其他相关目的,本发明提供一种双队列异步图像处理方法,包括:相机采图模块进行图像采集,并将采集的图像数据放入图像缓存队列,随后执行下一次的图像采集步骤;其中,所述图像缓存队列在新增图像数据时,同时记录该图像数据的时间戳;图像处理模块以轮询的方式从所述图像缓存队列中获取一图像数据,对所述图像数据进行图像处理,并将图像处理结果放入图像结果队列,随后执行下一次的图像处理步骤;所述图像结果队列将各所述图像处理结果按照时间戳的先后顺序进行排序,并依次向外发送。
于本发明一实施例中,所述图像处理模块还包括:线程池管理子模块;所述线程池管理子模块中包括多个预先创建的可重复使用的工作线程;所述方法还包括:所述线程池管理子模块通过启用所述工作线程来加载图像处理算法,以供所述图像处理模块利用所述图像处理算法进行图像处理。
于本发明一实施例中,所述图像处理模块还包括:算法管理子模块;所述算法管理子模块中包括预先创建的适用于不同业务场景的多种图像处理算法;所述方法还包括:所述线程池管理子模块启用工作线程加载图像处理算法时,根据不同的业务场景来加载所述算法管理子模块中对应的图像处理算法。
于本发明一实施例中,所述图像结果队列默认采用快速排序算法对各所述图像处理结果进行排序。
于本发明一实施例中,所述方法还包括:报警提示模块监听所述图像缓存队列的数据增长情况,并发出相应的提示信息。
为实现上述目的及其他相关目的,本发明提供一种双队列异步图像处理装置,包括:相机采图模块,用于进行图像采集,并将采集的图像数据放入图像缓存队列,随后执行下一次的图像采集步骤;所述图像缓存队列,用于存储所述相机采图模块采集的图像数据,且在新增图像数据时,同时记录该图像数据的时间戳;图像处理模块,用于以轮询的方式从所述图像缓存队列中获取一图像数据,对所述图像数据进行图像处理,并将图像处理结果放入图像结果队列,随后执行下一次的图像处理步骤;所述图像结果队列,用于将各所述图像处理结果按照时间戳的先后顺序进行排序,并依次向外发送。
于本发明一实施例中,所述图像处理模块还包括:线程池管理子模块;所述线程池管理子模块中包括多个预先创建的可重复使用的工作线程;所述线程池管理子模块用于:通过启用所述工作线程来加载图像处理算法,以供所述图像处理模块利用所述图像处理算法进行图像处理。
于本发明一实施例中,所述图像处理模块还包括:算法管理子模块;所述算法管理子模块中包括预先创建的适用于不同业务场景的多种图像处理算法;所述线程池管理子模块还用于:在启用工作线程加载图像处理算法时,根据不同的业务场景来加载所述算法管理子模块中对应的图像处理算法。
于本发明一实施例中,所述图像结果队列默认采用快速排序算法对各所述图像处理结果进行排序。
于本发明一实施例中,所述装置还包括:报警提示模块,用于监听所述图像缓存队列的数据增长情况,并发出相应的提示信息。
如上所述,本发明的双队列异步图像处理方法及装置,具有功能可靠、成本低廉,能有效避免现有技术中因图像处理时间远大于图像采集时间导致无法满足生产需求的问题等诸多有益技术效果。
附图说明
图1显示为本发明一实施例中双队列异步图像处理装置的模块示意图。
图2显示为本发明一实施例中双队列异步图像处理方法的流程示意图。
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图示中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
鉴于现有技术中存在的问题,本申请基于合理的数据结构队列,结合多线程并行方式,以及合理的设计模式,设计出了简单实用的双队列异步并行图像处理方案,解决了因图像处理时间远大于图像采集时间导致无法满足生产需求的问题,以下将做详细介绍。
如图1所示,本申请提供一种双队列异步图像处理装置,主要包括以下部分:相机采图模块1、图像缓存队列2、图像处理模块3、图像结果队列4。在一实施例中,较佳的,图像处理模块3进一步包括线程池管理子模块301、算法管理子模块302。以下将对各个模块的功能做详细介绍。
相机采图模块1,用于进行图像采集,并将采集的图像数据放入图像缓存队列2,随后执行下一次的图像采集步骤。
需要说明的是,传统常见机器视觉处理流程由采图加图像处理算法构成,相机采图后直接执行图像处理算法,在图像处理期间相机不进行采图,直到图像处理算法返回图像处理结果,再开始采集下一张图片,效率十分低下。然而,在本申请中,相机采图模块1将当前采集得到的图像数据放入图像缓存队列2,随即继续进行采图工作,从而可增大采图频率。比如,相机采图模块1第一次采集到图像数据1,便将其存储至图像缓存队列2中,继续进行第二次采集,第二次采集得到图像数据2,便将其存储至图像缓存队列2中,依次类推。如此,即便相机采图频率大于图像处理频率,相机采图模块1也不需要阻塞等待,继续采图并通过图像缓存队列2这一中间层将图像数据传递至后续工作模块。
需要说明的是,由于不同厂家相机sdk采图的实现细节不同,但连接相机、断开相机、采集图片等一系列操作具有共通性,本领域技术人员在开发相机采图模块1时,可将这些操作抽象成抽象类,采用模板方法模式,不同厂家相机可重写方法进行实现,本发明对此不做限定。
图像缓存队列2,用于存储相机采图模块1采集的图像数据,且在新增图像数据时,同时记录该图像数据的时间戳。
需要说明的是,缓存队列的目的在于作为一个中间层将采图与图像处理进行解耦,java/c#等均有语言级别支持的线程安全队列可使用,图像缓存队列2为一被封装的模块,以和其它模块进行交互,具体的:
1)图像缓存队列2接收相机采图模块1的图像数据,并添加至队列中,队列在添加图像数据的同时记录时间戳,以便于后续图像结果队列进行处理;
2)图像缓存队列2控制队列数据先进先出以被图像处理模块2消费,并管理数据并发。
图像处理模块3,用于以轮询的方式从图像缓存队列中获取一图像数据,对图像数据进行图像处理,并将图像处理结果放入图像结果队列4,随后执行下一次的图像处理步骤。
在一实施例中,图像处理模块3又包括:线程池管理子模块301、算法管理子模块302。
线程池管理子模块301中包括多个预先创建的可重复使用的工作线程,线程池管理子模块301通过启用所述工作线程来加载图像处理算法,以供图像处理模块3利用所述图像处理算法进行图像处理。
需要说明的是,创建线程是一个昂贵的操作,为每个短暂的异步操作创建线程会产生显著的开销,为了解决该问题,本申请使用线程池,事先分配一定的资源,将资源放入池中,每次需要新的资源,从池中获取而不是重新创建,该资源不再使用时就返回到池中。所以使用线程池的优势有:
1)减少操作系统资源开销,每个工作线程都可重复使用,不用频繁创建线程及销毁线程;
2)提高程序响应速度,避免创建新线程导致程序运行产生阻塞;
3)可使用executor框架、任务并行库(taskparallellibrary,简称tpl)等已有成熟类库,更好地管理线程,提高开发效率,并使程序具有更好的维护性;java/c#均有executor框架封装线程池,本领域技术人员在开发线程池子模块301时可选择采用,从而有效提升开发效率,有利于提供统一接口,有利于维护更为清晰规范的程序结构;
4)根据实际硬件资源生产节拍等情况合理地设置线程池参数,有效贴合具体生产情况。
算法管理子模块302中包括预先创建的适用于不同业务场景的多种图像处理算法。线程池管理子模块301在启用工作线程加载图像处理算法时,根据不同的业务场景来加载算法管理子模块302中对应的图像处理算法。
需要说明的是,算法管理子模块302负责图像处理的具体算法逻辑,将输入的图像数据处理成结果数据。因不同的业务场景所需的图像处理算法不同,所以采用策略模式,以使程序具有更好的扩展性。
图像结果队列4,用于将各图像处理结果按照时间戳的先后顺序进行排序,并依次向外发送。
需要说明的是,因图像处理模块3的图像处理算法为异步多线程并行处理方式,故图像结果队列4需要使用图像数据先前加入图像缓存队列2时对应产生的时间戳进行结果排序,以维护图像数据与图像处理结果的对应关系。
详细而言,图像结果队列4接收并记录所有图像处理结果,根据时间戳由小到大依次排序,根据排序结果发送图像处理结果,从而使得图像数据和图像处理结果按原本的顺序对应起来。比如,图像处理模块3依次向图像结果队列4发送图像数据3的处理结果“图像结果3”、图像数据1的处理结果“图像结果1”、图像数据2的处理结果“图像结果2”,图像结果队列4会按照图像数据1~3的时间戳对图像结果1~3进行排序,先向外发送“图像结果1”、再发送“图像结果2”、后发送“图像结果3”。此外,这些图像结果以及前述的图像数据皆可以被发送至云端服务器,以供云端服务器进行分类、聚类、特征提取等机器学习数据处理或大数据存储、处理,从而更好地服务于智能制造。
较佳的,图像结果队列4的排序方法默认选用快速排序算法。快速排序算法平均时间复杂度为o(nlog2n),空间复杂度为o(nlog2n),可高效率地完成排序。此外,排序算法还可采用策略模式,内置直接插入排序等其它排序算法,以供图像结果队列4能根据具体业务场景来实现算法间的切换。
在一实施例中,本申请的双队列异步图像处理装置还包括:报警提示模块(未图示),用于监听图像缓存队列2的数据增长情况,并发出相应的提示信息。比如,通过自动邮件、企业微信、钉钉或硬件报警等方式将图像缓存队列2的数据增长情况展示给用户,又或者,本领域技术人员可设置所述报警提示模块的提醒条件,图像缓存队列2的数据增长在达到一定的阈值时,才会进行信息提示。
总结上述,本申请的双队列异步图像处理装置有以下有点:
1)从软件层面实现,不需采购及改动相关硬件设施,已有硬件装备无需进行改动便可采用本申请的双队列异步图像处理装置达到提高生产节拍的目的,因此具有功能可靠、结构简单、成本低廉等优点。
2)拥有简洁易扩展的良好接口设计,以支持产品化实现。异步视觉图像处理流程将各模块执行步骤可以总结抽象出来,整体采用模板方法模式,依次执行采图-图像缓存队列-多线程并行图像算法处理-图像结果处理。在实际业务场景中,只需继承重写具体相机品牌采图方法与图像处理算法,且可以内置常用工业相机品牌采图子类实现,使用者可通过配置选项指定已有实现的品牌,从而每次只重写图像处理算法即可。
3)双队列及线程池中线程并行处理机制构成本装置的核心,在此基础上,支持系统进行扩展功能,如图像缓存队列在本申请的双队列异步图像处理装置中不仅能支持相机采图进行图像数据入队、图像处理流程消费图像数据以出队、图像处理模块数据入队等,双队列数据还可以支持mes等系统进行数据读取、查看,图像结果队列还可支持消费数据的出队操作扩展实现等。
如图2所示,本申请还提供一种双队列异步图像处理方法,由于该方法的具体实施方式与前述装置实施例的具体实施方式相同,故于此不再对同样的技术细节做重复赘述。
本申请的双队列异步图像处理方法包括以下步骤:
s1:相机采图模块进行图像采集,并将采集的图像数据放入图像缓存队列,随后执行下一次的图像采集步骤;其中,所述图像缓存队列在新增图像数据时,同时记录该图像数据的时间戳。
s2:图像处理模块以轮询的方式从所述图像缓存队列中获取一图像数据,对所述图像数据进行图像处理,并将图像处理结果放入图像结果队列,随后执行下一次的图像处理步骤。
在一实施例中,所述图像处理模块还包括:线程池管理子模块;所述线程池管理子模块中包括多个预先创建的可重复使用的工作线程;所述线程池管理子模块通过启用所述工作线程来加载图像处理算法,以供所述图像处理模块利用所述图像处理算法进行图像处理。
在一实施例中,所述图像处理模块还包括:算法管理子模块;所述算法管理子模块中包括预先创建的适用于不同业务场景的多种图像处理算法;所述线程池管理子模块启用工作线程加载图像处理算法时,根据不同的业务场景来加载所述算法管理子模块中对应的图像处理算法。
s3:所述图像结果队列将各所述图像处理结果按照时间戳的先后顺序进行排序,并依次向外发送。
较佳的,所述图像结果队列默认采用快速排序算法对各所述图像处理结果进行排序。
在一实施例中,本申请的双队列异步图像处理方法还包括:报警提示模块监听所述图像缓存队列的数据增长情况,并发出相应的提示信息。
综上,本发明的双队列异步图像处理方法及装置,有效克服了现有技术中的种种缺点而具高度产业利用价值。
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
1.一种双队列异步图像处理方法,其特征在于,包括:
相机采图模块进行图像采集,并将采集的图像数据放入图像缓存队列,随后执行下一次的图像采集步骤;其中,所述图像缓存队列在新增图像数据时,同时记录该图像数据的时间戳;
图像处理模块以轮询的方式从所述图像缓存队列中获取一图像数据,对所述图像数据进行图像处理,并将图像处理结果放入图像结果队列,随后执行下一次的图像处理步骤;
所述图像结果队列将各所述图像处理结果按照时间戳的先后顺序进行排序,并依次向外发送。
2.根据权利要求1所述的方法,其特征在于,所述图像处理模块还包括:线程池管理子模块;所述线程池管理子模块中包括多个预先创建的可重复使用的工作线程;所述方法还包括:
所述线程池管理子模块通过启用所述工作线程来加载图像处理算法,以供所述图像处理模块利用所述图像处理算法进行图像处理。
3.根据权利要求2所述的方法,其特征在于,所述图像处理模块还包括:算法管理子模块;所述算法管理子模块中包括预先创建的适用于不同业务场景的多种图像处理算法;所述方法还包括:
所述线程池管理子模块启用工作线程加载图像处理算法时,根据不同的业务场景来加载所述算法管理子模块中对应的图像处理算法。
4.根据权利要求1所述的方法,其特征在于,所述图像结果队列默认采用快速排序算法对各所述图像处理结果进行排序。
5.根据权利要求1所述的方法,其特征在于,还包括:报警提示模块监听所述图像缓存队列的数据增长情况,并发出相应的提示信息。
6.一种双队列异步图像处理装置,其特征在于,包括:
相机采图模块,用于进行图像采集,并将采集的图像数据放入图像缓存队列,随后执行下一次的图像采集步骤;
所述图像缓存队列,用于存储所述相机采图模块采集的图像数据,且在新增图像数据时,同时记录该图像数据的时间戳;
图像处理模块,用于以轮询的方式从所述图像缓存队列中获取一图像数据,对所述图像数据进行图像处理,并将图像处理结果放入图像结果队列,随后执行下一次的图像处理步骤;
所述图像结果队列,用于将各所述图像处理结果按照时间戳的先后顺序进行排序,并依次向外发送。
7.根据权利要求6所述的装置,其特征在于,所述图像处理模块还包括:线程池管理子模块;所述线程池管理子模块中包括多个预先创建的可重复使用的工作线程;所述线程池管理子模块用于:通过启用所述工作线程来加载图像处理算法,以供所述图像处理模块利用所述图像处理算法进行图像处理。
8.根据权利要求7所述的装置,其特征在于,所述图像处理模块还包括:算法管理子模块;所述算法管理子模块中包括预先创建的适用于不同业务场景的多种图像处理算法;所述线程池管理子模块还用于:在启用工作线程加载图像处理算法时,根据不同的业务场景来加载所述算法管理子模块中对应的图像处理算法。
9.根据权利要求6所述的装置,其特征在于,所述图像结果队列默认采用快速排序算法对各所述图像处理结果进行排序。
10.根据权利要求6所述的装置,其特征在于,还包括:报警提示模块,用于监听所述图像缓存队列的数据增长情况,并发出相应的提示信息。
技术总结