本发明涉及控制领域,尤其涉及一种工业视觉算法部署方法、系统及存储介质。
背景技术:
现有视觉控制系统越来越复杂、功能越来越多、各个功能之间的耦合性逐步增加和一个功能多场景复用等,这为工业视觉算法的部署带来了很大的挑战。工业视觉算法部署是整个视觉系统开发的最后一个阶段,算法如何部署对视觉系统能否正常工作有着关键性的作用。
常用的算法部署方案为:将开发的算法编译打包为库文件或直接调用算法源码。在部署时,将库文件或源码移动到部署机器上,配置完成环境之后直接运行算法。这样能简化一定的工作量,但是每个部署机器的运行环境可能不太一样,很难做到完全和算法开发机器的环境一样。
现有工业视觉算法部署的模式为源码编译、环境配置和程序运行。在新机器上运行工业视觉算法时,会遇到部署环境和开发环境不一致、一些源码编译错误或运行失败的问题。
技术实现要素:
本发明的主要目的在于克服上述现有技术的缺陷,提供一种工业视觉算法部署方法、装置及存储介质,以解决现有技术中工业视觉算法部署时部署环境和开发环境不一致导致出现源码编译错误或运行失败的问题。
本发明一方面提供了一种工业视觉算法部署方法,包括:在算法开发设备中,将封装有工业视觉算法和相应运行环境的docker镜像推送至docker仓库中;在算法部署设备中,从所述docker仓库中拉取所述封装有工业视觉算法和相应运行环境的docker镜像,以进行工业视觉算法部署。
可选地,所述工业视觉算法包括一个以上功能模块,每个所述功能模块和相应运行环境封装成一个docker镜像。
可选地,每个所述功能模块封装成的所述docker镜像与中间消息组件相连;每个所述功能模块封装成的所述docker镜像具有唯一的ip端口号。
可选地,将工业视觉算法和相应运行环境封装为docker镜像,包括:利用docker容器,使用dockerpull命令载入ubuntu镜像;在所述ubuntu镜像中配置工业视觉算法编译运行所需的运行环境;将所述工业视觉算法复制到所述ubuntu镜像中进行编译运行;清理docker容器内与所述工业视觉算法无关的配置及环境。
本发明另一方面提供了一种工业视觉算法部署系统,包括:开发单元,用于在算法开发设备中,将封装有工业视觉算法和相应运行环境的docker镜像推送至docker仓库中;部署单元,用于在算法部署设备中,从所述docker仓库中拉取所述封装有工业视觉算法和相应运行环境的docker镜像,以进行工业视觉算法部署。
可选地,所述工业视觉算法包括一个以上功能模块,每个所述功能模块和相应运行环境封装成一个docker镜像。
可选地,每个所述功能模块封装成的所述docker镜像与中间消息组件相连;每个所述功能模块封装成的所述docker镜像具有唯一的ip端口号。
可选地,将工业视觉算法和相应运行环境封装为docker镜像,包括:利用docker容器,使用dockerpull命令载入ubuntu镜像;在所述ubuntu镜像中配置工业视觉算法编译运行所需的运行环境;将所述工业视觉算法复制到所述ubuntu镜像中进行编译运行;清理docker容器内与所述工业视觉算法无关的配置及环境。
本发明又一方面提供了一种存储介质,其上存储有计算机程序,所述程序被处理器执行时实现前述任一所述方法的步骤。
根据本发明的技术方案,利用docker容器虚拟化的特性,将工业视觉算法模块化,各个模块和运行环境封装为一个docker容器,减少因算法运行环境不同而出现的问题,同时还能实现工业算法的快速部署。
采用分布式策略,加入中间消息组件,将封装的各个模块连接到中间消息组件上,不仅能够降低各个模块之间的耦合性,还能增加系统的扩展性和可移植性,需要扩展某个功能时,将该功能模块连接到消息组件即可。
采用本方法部署工业视觉算法,不仅避免因开发环境和部署环境不同而导致算法运行失败的情况,而且增加了整个系统的扩展性,相对于传统的算法部署方式,有效地减少了部署的时间成本和人力成本。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是本发明提供的工业视觉算法部署方法的一实施例的方法示意图;
图2是根据本发明一具体实施方式的将工业视觉算法和相应运行环境封装为docker镜像的具体实现流程;
图3是本发明提供的工业视觉算法部署方法的一实施例的总体流程示意图;
图4是根据本发明的算法部署示意图;
图5是本发明提供的工业视觉算法部署系统的一实施例的结构框图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明具体实施例及相应的附图对本发明技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
现有工业视觉算法部署的模式为源码编译、环境配置和程序运行。在新机器上运行工业视觉算法时,会遇到部署环境和开发环境不一致、一些源码编译错误或运行失败的问题。传统工业视觉算法部署扩展性较差,开发周期较长,扩展某个功能时,需要将扩展功能源码加入工业视觉算法源码,重新编译、重新配置环境和部署。
本发明提供一种工业视觉算法部署方法及系统,采用docker工具封装的特性(把算法与运行环境打包),将此工具使用在工业视觉领域,用于增加算法的稳定性和扩展性。docker是一种封装工具,可以把算法和运行算法的环境封装在一起,如果想运行算法,启动docker容器即可。移动到其他设备,可以快速运行。
图1是本发明提供的工业视觉算法部署方法的一实施例的方法示意图。
如图1所示,根据本发明的一个实施例,所述方法至少包括步骤s110和步骤s120。
步骤s110,在算法开发设备中,将封装有工业视觉算法和相应运行环境的docker镜像推送至docker仓库中。
具体地,在算法开发部分,在算法开发设备中,完成工业视觉算法的开发(例如开发工业视觉算法某个功能)后,使用docker封装工具,将工业视觉算法和相应运行环境封装为一个docker镜像,之后使用dockerpush命令将docker镜像推送到docker仓库中。所述算法开发设备具体可以为计算机(电脑)。
图2是根据本发明一具体实施方式的将工业视觉算法和相应运行环境封装为docker镜像的具体实现流程。如图2所示,将工业视觉算法和相应运行环境封装为docker镜像具体可以包括利用docker容器,使用dockerpull命令载入ubuntu镜像;在所述ubuntu镜像中配置工业视觉算法编译运行所需的运行环境;将所述工业视觉算法复制到所述ubuntu镜像中进行编译运行;清理docker容器内与所述工业视觉算法无关的配置及环境;将所述工业视觉算法编译运行的结果暴露出来供其他模块使用。
利用docker封装,启动docekr后,该功能的docker镜像会在中间组件上读取输入,经过运算后,将输出经过ip端口号放到中间组件上。输入和输出都是放在中间组件上,通过ip端口号确定唯一的身份。如输入时该功能docker镜像会读取ip端口号为65001镜像放在中间消息组件上的数据,经过处理后,该功能docker镜像将输出数据通过自己的ip端口号66001,将数据放在中间消息组件上,等待其他镜像读取66001端口号的数据。
步骤s120,在算法部署设备中,从所述docker仓库中拉取所述封装有工业视觉算法和相应运行环境的docker镜像,以进行工业视觉算法部署。
具体地,在算法部署部分,在算法部署设备上安装有docker软件和docker-compose部署工具,使用dockerpull命令从docker仓库中拉取docker镜像,最后在算法部署设备中配置docker-compose.yml文件和其他算法参数。利用docker-compose部署工具将各个docker容器配置连接在一起,一起运行在算法部署设备上,通过docker-compose.yml文件实现。所述算法部署设备具体可以为计算机(电脑)。
本发明的总体实现流程可参考图3所示。图3是本发明提供的工业视觉算法部署方法的一实施例的总体流程示意图。其中1、2为算法开发设备,3、4为算法部署设备。
在一些具体实施方式中,所述工业视觉算法包括一个以上功能模块,每个所述功能模块和相应运行环境封装成一个docker镜像。也就是说,将工业视觉算法的各个功能模块和相应运行环境分别封装成docker镜像。
进一步地,将每个所述功能模块封装成的所述docker镜像与中间消息组件相连。即,各个docker容器之间需要通信,传递信息,使用中间消息组件将各个docker镜像连接起来。中间消息组件作为传输信息的通道,把发送的信息和目的地放在消息总线上即可,将各个模块隔离开。各个模块之间的通信只能通过消息总线传输。加入中间消息组件,能够将各个功能模块解耦,降低它们之间的耦合性,若一个模块发生故障,其他模块可以继续运行,不会影响到其他模块。具体可参考图4所示,图4是根据本发明的算法部署示意图。如图4所示,每个所述功能模块封装成的所述docker镜像通过docker网卡与中间消息组件相连,每个所述功能模块封装成的所述docker镜像具有唯一的ip端口号,以此来区分各个模块的不同,docker容器与总线通信配对的方式为veth对,如果veth对一样,则可以通信。
如图4所示,采集模块和分析模块的端口号分别以65xxx和66xxx。若需要扩展算法功能或使用多个相同的模块,将扩展的算法功能模块与中间消息组件相连并分配唯一的ip端口号用于标识该功能模块,如果需要增加一种算法,不用改变其他算法,将新增算法打包为docker镜像,把传输的消息放在中间组件即可。如图4所示,示例视觉系统具有多个采集模块和分析模块,并分配不同的ip端口号。
图5是本发明提供的工业视觉算法部署系统的一实施例的结构框图。如图5所示,所述系统100包括开发单元110和部署单元120。
开发单元110用于在算法开发设备中,将封装有工业视觉算法和相应运行环境的docker镜像推送至docker仓库中。
具体地,在算法开发部分,在算法开发设备中,完成工业视觉算法的开发(例如开发工业视觉算法某个功能)后,开发单元110使用docker封装工具,将工业视觉算法和相应运行环境封装为一个docker镜像,之后使用dockerpush命令将docker镜像推送到docker仓库中。所述算法开发设备具体可以为计算机(电脑)。
图2是根据本发明一具体实施方式的将工业视觉算法和相应运行环境封装为docker镜像的具体实现流程。如图2所示,将工业视觉算法和相应运行环境封装为docker镜像具体可以包括利用docker容器,使用dockerpull命令载入ubuntu镜像;在所述ubuntu镜像中配置工业视觉算法编译运行所需的运行环境;将所述工业视觉算法复制到所述ubuntu镜像中进行编译运行;清理docker容器内与所述工业视觉算法无关的配置及环境;将所述工业视觉算法编译运行的结果暴露出来供其他模块使用。
利用docker封装,启动docekr后,该功能的docker镜像会在中间组件上读取输入,经过运算后,将输出经过ip端口号放到中间组件上。输入和输出都是放在中间组件上,通过ip端口号确定唯一的身份。如输入时该功能docker镜像会读取ip端口号为65001镜像放在中间消息组件上的数据,经过处理后,该功能docker镜像将输出数据通过自己的ip端口号66001,将数据放在中间消息组件上,等待其他镜像读取66001端口号的数据。
部署单元120用于在算法部署设备中,从所述docker仓库中拉取所述封装有工业视觉算法和相应运行环境的docker镜像,以进行工业视觉算法部署。
具体地,在算法部署部分,首先在算法部署设备上安装有docker软件和docker-compose部署工具,部署单元120使用dockerpull命令从docker仓库中拉取docker镜像,最后在算法部署设备中配置docker-compose.yml文件和其他算法参数。利用docker-compose部署工具将各个docker容器配置连接在一起,一起运行在算法部署设备上,通过docker-compose.yml文件实现。所述算法部署设备具体可以为计算机(电脑)。
本发明的总体实现流程可参考图3所示。图3是本发明提供的工业视觉算法部署方法的一实施例的总体流程示意图。其中1、2为算法开发设备,3、4为算法部署设备。
在一些具体实施方式中,所述工业视觉算法包括一个以上功能模块,每个所述功能模块和相应运行环境封装成一个docker镜像。也就是说,将工业视觉算法的各个功能模块和相应运行环境分别封装成docker镜像。
进一步地,将每个所述功能模块封装成的所述docker镜像与中间消息组件相连。即,各个docker容器之间需要通信,传递信息,使用中间消息组件将各个docker镜像连接起来。中间消息组件作为传输信息的通道,把发送的信息和目的地放在消息总线上即可,将各个模块隔离开。各个模块之间的通信只能通过消息总线传输。加入中间消息组件,能够将各个功能模块解耦,降低它们之间的耦合性,若一个模块发生故障,其他模块可以继续运行,不会影响到其他模块。具体可参考图4所示,图4是根据本发明的算法部署示意图。如图4所示,每个所述功能模块封装成的所述docker镜像通过docker网卡与中间消息组件相连,每个所述功能模块封装成的所述docker镜像具有唯一的ip端口号,以此来区分各个模块的不同,docker容器与总线通信配对的方式为veth对,如果veth对一样,则可以通信。
如图4所示,采集模块和分析模块的端口号分别以65xxx和66xxx。若需要扩展算法功能或使用多个相同的模块,将扩展的算法功能模块与中间消息组件相连并分配唯一的ip端口号用于标识该功能模块,如果需要增加一种算法,不用改变其他算法,将新增算法打包为docker镜像,把传输的消息放在中间组件即可。如图4所示,示例视觉系统具有多个采集模块和分析模块,并分配不同的ip端口号。
本发明还提供对应于所述工业视觉算法部署方法的一种存储介质,其上存储有计算机程序,所述程序被处理器执行时实现前述任一所述方法的步骤。
据此,本发明提供的方案,利用docker容器虚拟化的特性,将工业视觉算法模块化,各个模块和运行环境封装为一个docker容器,减少因算法运行环境不同而出现的问题,同时还能实现工业算法的快速部署。
采用分布式策略,加入中间消息组件,将封装的各个模块连接到中间消息组件上,不仅能够降低各个模块之间的耦合性,还能增加系统的扩展性和可移植性,需要扩展某个功能时,将该功能模块连接到消息组件即可。
采用本方法部署工业视觉算法,不仅避免因开发环境和部署环境不同而导致算法运行失败的情况,而且增加了整个系统的扩展性,相对于传统的算法部署方式,有效地减少了部署的时间成本和人力成本。
本文中所描述的功能可在硬件、由处理器执行的软件、固件或其任何组合中实施。如果在由处理器执行的软件中实施,那么可将功能作为一或多个指令或代码存储于计算机可读媒体上或经由计算机可读媒体予以传输。其它实例及实施方案在本发明及所附权利要求书的范围及精神内。举例来说,归因于软件的性质,上文所描述的功能可使用由处理器、硬件、固件、硬连线或这些中的任何者的组合执行的软件实施。此外,各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为控制装置的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。
1.一种工业视觉算法部署方法,其特征在于,包括:
在算法开发设备中,将封装有工业视觉算法和相应运行环境的docker镜像推送至docker仓库中;
在算法部署设备中,从所述docker仓库中拉取所述封装有工业视觉算法和相应运行环境的docker镜像,以进行工业视觉算法部署。
2.根据权利要求1所述的方法,其特征在于,
所述工业视觉算法包括一个以上功能模块,每个所述功能模块和相应运行环境封装成一个docker镜像。
3.根据权利要求2所述的方法,其特征在于,
每个所述功能模块封装成的所述docker镜像与中间消息组件相连;
每个所述功能模块封装成的所述docker镜像具有唯一的ip端口号。
4.根据权利要求1-3任一项所述的方法,其特征在于,将工业视觉算法和相应运行环境封装为docker镜像,包括:
利用docker容器,使用dockerpull命令载入ubuntu镜像;
在所述ubuntu镜像中配置工业视觉算法编译运行所需的运行环境;
将所述工业视觉算法复制到所述ubuntu镜像中进行编译运行;
清理docker容器内与所述工业视觉算法无关的配置及环境。
5.一种工业视觉算法部署系统,其特征在于,包括:
开发单元,用于在算法开发设备中,将封装有工业视觉算法和相应运行环境的docker镜像推送至docker仓库中;
部署单元,用于在算法部署设备中,从所述docker仓库中拉取所述封装有工业视觉算法和相应运行环境的docker镜像,以进行工业视觉算法部署。
6.根据权利要求5所述的系统,其特征在于,
所述工业视觉算法包括一个以上功能模块,每个所述功能模块和相应运行环境封装成一个docker镜像。
7.根据权利要求6所述的系统,其特征在于,
每个所述功能模块封装成的所述docker镜像与中间消息组件相连;
每个所述功能模块封装成的所述docker镜像具有唯一的ip端口号。
8.根据权利要求5-7任一项所述的系统,其特征在于,将工业视觉算法和相应运行环境封装为docker镜像,包括:
利用docker容器,使用dockerpull命令载入ubuntu镜像;
在所述ubuntu镜像中配置工业视觉算法编译运行所需的运行环境;
将所述工业视觉算法复制到所述ubuntu镜像中进行编译运行;
清理docker容器内与所述工业视觉算法无关的配置及环境。
9.一种存储介质,其特征在于,其上存储有计算机程序,所述程序被处理器执行时实现权利要求1-4任一所述方法的步骤。
技术总结