CN109491718A - 一种插件加载方法及设备 - Google Patents
一种插件加载方法及设备 Download PDFInfo
- Publication number
- CN109491718A CN109491718A CN201811070613.7A CN201811070613A CN109491718A CN 109491718 A CN109491718 A CN 109491718A CN 201811070613 A CN201811070613 A CN 201811070613A CN 109491718 A CN109491718 A CN 109491718A
- Authority
- CN
- China
- Prior art keywords
- plug
- unit
- loaded
- branch
- load
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000011068 loading method Methods 0.000 title claims abstract description 58
- 238000012163 sequencing technique Methods 0.000 claims abstract description 38
- 238000000034 method Methods 0.000 claims description 29
- 239000003550 marker Substances 0.000 claims description 12
- 238000004590 computer program Methods 0.000 claims description 4
- 230000001360 synchronised effect Effects 0.000 claims 1
- 238000011161 development Methods 0.000 abstract description 8
- 230000006870 function Effects 0.000 description 10
- 238000013135 deep learning Methods 0.000 description 6
- 238000001514 detection method Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 230000015654 memory Effects 0.000 description 6
- 238000012544 monitoring process Methods 0.000 description 4
- 238000012545 processing Methods 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000007717 exclusion Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 239000002131 composite material Substances 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种插件加载方法及设备,获取待加载插件的配置文件,所述配置文件根据统一预设的插件加载语法生成,且包含所述待加载插件的插件名以及插件属性,根据所述插件名以及与所述插件加载语法构建所述待加载插件的加载接口,根据所述插件属性确定所述待加载插件的排序信息,所述排序信息用于指示是否使用所述待加载插件以及所述待加载插件的执行顺序,基于所述加载接口加载所述待加载插件,并将加载后的插件按照所述排序信息进行排列。从而实现了接口的任意扩展,增加了插件加载的灵活性,减少了算法工程师在应用开发上的工作量。
Description
技术领域
本发明涉及通信技术领域,特别涉及一种插件加载方法,本发明同时还涉及一种插件加载设备。
背景技术
GStreamer是一种插件化的流处理框架,用于将不同的功能封装成单个的插件,并由应用将这些不同功能的插件按照想要的顺序组装成为特定功能的应用程序。
随着GStreamer应用的不断广泛,目前衍生了在Gstreamer框架内将不同的算法封装成为不同的插件,并将这些插件组装为特性功能的应用。该应用基于Gstreamer框架,其思想是将不同的功能独立封装成插件,然后由应用通过配置文件将一系列插件组装成特定功能集的pipeline(线性通信模型),即由一个或者多个插件组成的流数据处理流程。通过这种方法,应用将每个算法封装成为一个独立的插件,然后由应用通过配置文件加载不同的算法组成一个拥有特定功能的pipeline。
目前,上述技术方案较多应用在深度学习算法的视频监控中,深度学习算法的视频监控在不同的场景中监控对象也会不同;例如:在实际的应用场景中有些可能被用来监控车辆,有的用来监控行人,也有的用于货物运送或者产品缺陷方面的检测等。对于一个高性能的硬件来说,可能会被用来处理同路视频多种对象的监控;或者多路视频监控不同区域的同一种对象;或者多路视频监控不同区域的不同对象,对此这些应用场景的组合业界会有不同的方案。
为了适应使用需求,现有的技术方案由配置文件读取器、插件加载器、插件组合器三个部分组成;其中配置文件读取器负责将配置文件读取到内存中,插件加载器负责将配置文件中使能的算法插件加载到内存中,插件组合器负责将内存中的插件按照顺序进行加载;应用流程如图1所示,在将算法构建成为一个插件的同时,需要在应用中创建该插件的接口,应用运行时通过这些接口将对应的加载到内存中,从而生成pipeline,如图2所示。
发明人在实现本发明的过程中,发现现有技术中上述框架设计存在如下缺点:
(1)固化程度严重
由于这些插件的加载顺序是在代码中固化的,所以加载时只能按照既定的顺序进行,要想添加新的算法需要的重构代码才能实现。
(2)灵活性差
由于原有的技术框架是在代码中直接定义好了用于加载的算法,所以没有办法灵活为单路视频提供新的算法。在应用处理多路视频时只能按既定的方式同时加载或者不加载某个算法插件,不能够灵活为单路视频指定新算法插件。
以上问题不仅给技术人员在开发过程中带来了额外的开发负担(例如在添加新的算法插件时需要重构应用),而且技术人员必须把所有可能用上的插件都进行加载,无法实现插件的灵活使用,造成硬件资源的极大浪费。
发明内容
本发明提供一种插件加载方法,用以解决现有Gstreamer框架固化程度严重,加载插件灵活性差的问题,该方法包括:
获取待加载插件的配置文件,所述配置文件根据统一预设的插件加载语法生成,且包含所述待加载插件的插件名以及插件属性;
根据所述插件名以及与所述插件加载语法构建所述待加载插件的加载接口:
根据所述插件属性确定所述待加载插件的排序信息,所述排序信息用于指示是否使用所述待加载插件以及所述待加载插件的执行顺序;
基于所述加载接口加载所述待加载插件,并将加载后的插件按照所述排序信息进行排列。
优选地,在根据所述插件名以及与所述插件加载语法构建所述待加载插件的加载接口之后,还包括:
将类型为应用属性的插件属性传递至插件管理应用,以使所述插件管理应用确定需要使用的待加载插件以及各所述待加载插件的执行顺序。
优选地,所述排序信息包含所述插件的使能标识位、加载顺序以及分支类型,将加载后的插件按照所述排序信息进行排列,具体为:
依次根据所述使能标识位判断所述插件是否被使能;
所有的插件均已判断完毕,将被使能的插件按照所述加载顺序在插件队列中排列,并查找位于最后一个主干分支的插件。
优选地,依次根据所述使能标识位判断所述插件是否被使能,具体为:
若所述插件被使能,且所述插件位于执行线路的主干分支,在数组队列中与所述插件对应的主干分支进行存储;
若所述插件被使能,且所述插件位于执行线路的叶分支,在数组队列中与所述插件对应的叶分支分别进行存储;
若所述插件未被使能,继续判断所述插件的下一个插件是否被使能。
优选地,在将加载后的插件按照所述排序信息进行排列之后,还包括:
判断所述插件在所述插件队列中的下一个插件是否属于同一分支;
若所述插件与所述下一个插件属于同一分支,将所述下一个插件加入所述同一分支中,并将所述插件与所述下一个插件链接;
若所述插件为主干分支,所述下一个插件为叶分支,创建分支插件,并将所述插件与所述分支插件链接;
若所述插件为叶分支,所述下一个插件为主干分支,将所述插件与所述下一个插件的业务流合并,并将所述插件与所述插件所在分支的上一个插件链接。
相应的,本申请还提出了一种插件加载设备,包括:
获取模块,获取待加载插件的配置文件,所述配置文件根据统一预设的插件加载语法生成,且包含所述待加载插件的插件名以及插件属性;
构建模块,根据所述插件名以及与所述插件加载语法构建所述待加载插件的加载接口;
确定模块,根据所述插件属性确定所述待加载插件的排序信息,所述排序信息用于指示是否使用所述待加载插件以及所述待加载插件的执行顺序;
排序模块,基于所述加载接口加载所述待加载插件,并将加载后的插件按照所述排序信息进行排列。
相应的,本发明还提出了一种计算机可读存储介质,所述机算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备执行如上所述的插件加载方法。
相应的,本发明还提出了一种计算机程序产品,其特征在于,所述计算机程序产品在终端设备上运行时,使得所述终端设备执行如上所述的插件加载方法。
通过应用本申请的技术方案,对基于Gstreamer框架的深度学习算法应用架构(deepstream)进行了改进,通过定义一套用于加载插件的语法将插件的加载合并为统一的接口,在获取待加载插件配置文件的基础上,根据配置文件对待加载插件排序。实现了接口的任意扩展,增加了插件加载的灵活性,减少了算法工程师在应用开发上的工作量。
附图说明
图1为现有技术生成pipeline流程图;
图2为现有技术生成pipeline架构示意图;
图3为改进后的生成pipeline架构示意图;
图4为改进后生成pipeline流程图;
图5为本申请提出的一种插件加载方法的流程示意图;
图6为本申请提出的一种插件加载设备的结构示意图。
具体实施方式
如背景技术所述,现有技术中的pipeline加载插件时只能按照既定的顺序进行,要想添加新的算法需要的重构代码才能实现,同时,在应用处理多路视频时只能按既定的方式同时加载或者不加载某个算法插件,不能够灵活为单路视频指定新算法插件。
为解决上述问题,本申请实施例提供了一种插件加载方法。该方法通过定义一套用于加载插件的语法将插件的加载合并为统一的接口,在获取待加载插件配置文件的基础上,根据配置文件对待加载插件排序。实现了接口的任意扩展,增加了插件加载的灵活性,减少了算法工程师在应用开发上的工作量。
在针对具体方案进行介绍之前,对下文所涉及的概念进行介绍:
Gstreamer的基本动作:将输入source(源)和解码器链接,然后和sink(库)链接。上述动作类似于拼积木,首先找到需要的积木,然后按照积木上的插槽放在已经拼好的积木上面,上述source和sink就像是积木上的凸凹的链接块。
Funnel:N路合成1路的合路器,与视频流合并相关。
如图5所示,为上述插件加载方法的流程示意图,该方法包括如下步骤:
步骤S501,获取待加载插件的配置文件,所述配置文件根据统一预设的插件加载语法生成,且包含所述待加载插件的插件名以及插件属性。
如上所述,该步骤中先获取待加载插件的配置文件,获取过程包括对配置文件的读取和检测,具体为,检测该配置文件中的配置项是否符合统一预设的插件加载语法规则。
举例来说,检测该配置文件中的配置项是否有域,域名下面是否有对应的插件配置项。上述检测过程只进行合法性的检测,比如是否包含域名\属性。
在此需要说明的是,以上优选实施例的方案仅为本申请所提出的一种具体实现方案,其他实现获取待加载插件的配置文件的方式均属于本申请的保护范围。
步骤S502,根据所述插件名以及与所述插件加载语法构建所述待加载插件的加载接口。
如上所述,基于步骤S501,利用所述配置文件中的插件名和预设的插件加载语法规则构建出待加载插件的加载接口。
在本申请的具体应用场景中,将域名作为插件名称的一部分,通过代码将其组合成插件名称,如″mvdetect″,并通过该插件名称构建插件的加载函数接口,以供加载插件时使用。
在此需要说明的是,以上优选实施例的方案仅为本申请所提出的一种具体实现方案,其他实现利用所述配置文件中的插件名和预设的插件加载语法规则构建出待加载插件的加载接口的方式均属于本申请的保护范围。
在本申请的优选实施例中,经过上述步骤S502之后,还包括:将类型为应用属性的插件属性传递至插件管理应用,以使所述插件管理应用确定需要使用的待加载插件以及各所述待加载插件的执行顺序。
在本申请的具体应用场景中,将以″app.″开头的配置项传递给应用。上述插件属性包括想要加载插件的顺序,以及是否需要将该插件加载到某一个支路上,用来指定该插件的加载顺序以及处理哪一路视频流,并在排序和组合插件时作为主要的依据。
在此需要说明的是,以上优选实施例的方案仅为本申请所提出的一种具体实现方案,其他实现使所述插件管理应用确定需要使用的待加载插件以及各所述待加载插件的执行顺序的方式均属于本申请的保护范围。
步骤S503,根据所述插件属性确定所述待加载插件的排序信息,所述排序信息用于指示是否使用所述待加载插件以及所述待加载插件的执行顺序。
在本申请的具体应用场景中,上述插件属性包括想要加载插件的顺序,以及是否需要将该插件加载到某一个支路上,用来指定该插件的加载顺序以及处理哪一路视频流。
在此需要说明的是,以上优选实施例的方案仅为本申请所提出的一种具体实现方案,其他实现根据所述插件属性确定所述待加载插件的排序信息的方式均属于本申请的保护范围。
步骤S504,基于所述加载接口加载所述待加载插件,并将加载后的插件按照所述排序信息进行排列。
如上所述,将待加载插件根据步骤S502中构建出待加载插件的加载接口加载,并根据步骤S503中的排序信息进行排列。
在本申请的具体应用场景中,由于只是代码实现的逻辑问题,可以先进行插件排序再进行插件加载,并且执行效果不会改变。
在此需要说明的是,以上优选实施例的方案仅为本申请所提出的一种具体实现方案,其他实现基于所述加载接口加载所述待加载插件,并将加载后的插件按照所述排序信息进行排列的方式均属于本申请的保护范围。
在本申请的优选实施例中,基于步骤S504,所述排序信息包含所述插件的使能标识位、加载顺序以及分支类型,将加载后的插件按照所述排序信息进行排列,具体为:
依次根据所述使能标识位判断所述插件是否被使能;
所有的插件均已判断完毕,将被使能的插件按照所述加载顺序在插件队列中排列,并查找位于最后一个主干分支的插件。
如上所述,将加载后的插件按照排序信息排列,该排序信息包含插件的使能标识、加载顺序以及分支类型。具体为判断插件是否被使能,若被使能,将该插件按加载顺序排列在所属分支。
在本申请的具体应用场景中,上述加载顺序是指在处理特定视频时使用的算法的基本顺序,例如,需要将视频解码放在第一位,然后才能识别视频中的人或物体,之后才对识别到的任何物体进行其他处理。
在此需要说明的是,以上优选实施例的方案仅为本申请所提出的一种具体实现方案,其他实现将加载后的插件按照所述排序信息进行排列的方式均属于本申请的保护范围。
在本申请的优选实施例中,依次根据所述使能标识位判断所述插件是否被使能,具体为:
a)、若所述插件被使能,且所述插件位于执行线路的主干分支,在数组队列中与所述插件对应的主干分支进行存储;
b)、若所述插件被使能,且所述插件位于执行线路的叶分支,在数组队列中与所述插件对应的叶分支分别进行存储;
c)、若所述插件未被使能,继续判断所述插件的下一个插件是否被使能。
在本申请的具体应用场景中,上述判断插件是否被使能是指在特定视频上是否需要使用此插件,利用传递给应用的参数进行判断,当此插件的配置中enable(使能)设置为1时,则需要在该视频上使用这个插件。
在此需要说明的是,以上优选实施例的方案仅为本申请所提出的一种具体实现方案,其他实现根据所述使能标识位判断所述插件是否被使能的方式均属于本申请的保护范围。
在本申请的优选实施例中,在步骤S504中将加载后的插件按照所述排序信息进行排列之后还包括:
a)、判断所述插件在所述插件队列中的下一个插件是否属于同一分支;
b)、若所述插件与所述下一个插件属于同一分支,将所述下一个插件加入所述同一分支中,并将所述插件与所述下一个插件链接;
c)、若所述插件为主干分支,所述下一个插件为叶分支,创建分支插件,并将所述插件与所述分支插件链接;
d)、若所述插件为叶分支,所述下一个插件为主干分支,将所述插件与所述下一个插件的业务流合并,并将所述插件与所述插件所在分支的上一个插件链接。
如上所述,将加载后的插件按照排序信息进行排序之后,根据插件与下一个插件是否属于同一分支对插件进行相关组合。
在本申请的具体应用场景中,进行插件组合的具体步骤如下:
1)如果排序后的插件队列为空,说明没有算法插件需要加载,直接将输入source和解码器链接,然后和sink链接;
2)如果排序后的插件队列不为空,判断当前插件和下一个插件是否在同一分支,若在同一分支则直接将该下一个插件加入该分支,并将该下一个插件和当前插件链接起来;
3)如果当前插件为主干分支,下一个插件为叶分支,则需要创建视频流分支插件,将视频分成多路,同时将当前分支和视频流分支插件链接起来;
4)如果当前插件为叶分支,下一个插件为主干分支,则需要创建一个funnel,将视频流合并到一起,并将当前插件和当前插件所在的分支的前面的插件链接在一起最终形成整个pipeline。
在此需要说明的是,以上优选实施例的方案仅为本申请所提出的一种具体实现方案,其他实现将加载后的插件按照排序信息进行排序之后对插件进行相关组合的方式均属于本申请的保护范围。
通过应用本申请的技术方案,对基于Gstreamer框架的深度学习算法应用架构(deepstream)进行了改进,通过定义一套用于加载插件的语法将插件的加载合并为统一的接口,并在改进配置文件加载器、插件组合器的基础上新增加配置文件解释器和插件排序器。由于先构建出统一的接口,再经添加配置文件,实现了接口的任意扩展,增加了插件加载的灵活性,减少了算法工程师在应用开发上的工作量,并且使得开发的算法可以灵活组合,与此同时减少系统资源的消耗,使得算法在嵌入式设备终端上更加容易实现。
为了进一步阐述本发明的技术思想,现结合具体的应用场景,对本发明的技术方案进行说明。
本发明实施例提供了一种多路视频和多种算法加载改进方法,通过定义一套用于加载插件的语法书写配置文件,将插件的加载合并为统一的接口。本发明实施例通过先构建出统一的接口,再经过添加配置文件,实现接口的任意扩展。改进后的生成pipeline架构如图3所示。
在改进配置文件加载器、插件组合器的基础上新增加配置文件解释器和插件排序器,以满足新功能的需求。改进后生成pipeline流程如图4所示,需要说明的是,图4中所述顺序只是代码实现的逻辑问题,可以先进行插件排序再进行插件加载,并且执行效果不会改变。
具体操作流程如图4所示,以下对本方法操作流程作进一步说明。
本实施例操作流程分为五个步骤:
(1)配置文件读取器对配置文件读取,具体过程如下:
配置文件读取器读取配置文件,检测该配置文件中的配置项是否符合插件的配置的语法规则,并检测是否有域,域名下面是否有对应的插件配置项,以及配置项是否以″this.″或则″app.″开头。
上述检测过程只进行合法性的检测,比如是否包含域名\属性。
(2)配置文件解释器对配置文件解释,具体过程如下:
将域名作为插件名称的一部分,通过代码将其组合成插件名称,如″mvdetect″,并通过该插件名称构建插件的加载函数接口,以供加载插件时使用同时将以this开头的配置项作为插件的属性参数传递给插件将以″app.″开头的配置项传递给应用。
上述域名可理解为就是插件名称,是根据插件名称加载插件的。
上述加载函数接口即统一的接口经过添加配置文件后构建出的具体接口。
上述属性参数包括想要加载插件的顺序,以及是否需要将该插件加载到某一个支路上,用来指定该插件的加载顺序以及处理哪一路视频流,并在排序和组合插件时作为主要的依据。
上述配置项是插件使用的参数,可根据具体的插件配置需要的参数。
上述应用即图3中描述的应用,用来加载管理插件。
(3)插件加载器进行插件加载,具体过程如下:
插件加载器根据配置文件解释器传入的插件名称以及插件配置项加载插件。
(4)插件排序器进行插件排序,具体为以下五个步骤:
a)判断插件是否被使能,如果没有被使能则跳过该插件;
b)如果该插件被使能,检查插件是否在pipeline的主干分支;
c)如果该插件在pipeline的主干分支则将该插件放入主干分支的存储空间,如果不在pipeline的主干分支而是在pipeline的叶分支,将该插件放入用到该插件的叶分支分别保存该插件;
d)重复上述a-c的步骤直至处理完最后一个主干分支上的插件;
e)检查完所有的插件后,按照加载的顺序排列所有插件,为组合pipeline做准备。
上述判断插件是否被使能是指在特定视频上是否需要使用此插件,利用传递给应用的参数进行判断,当此插件的配置中enable设置为1时,则需要在该视频上使用这个插件。
上述顺序是指在处理特定视频时使用的算法的基本顺序,例如,需要将视频解码放在第一位,然后才能识别视频中的人或物体,之后才对识别到的任何物体进行其他处理。
(5)插件组合器进行插件组合,具体操作步骤如下:
1)如果排序后的插件队列为空,说明没有算法插件需要加载,直接将输入source和解码器链接,然后和sink链接;
2)如果排序后的插件队列不为空,判断当前插件和下一个插件是否在同一分支,若在同一分支则直接将该下一个插件加入该分支,并将该下一个插件和当前插件链接起来;
3)如果当前插件为主干分支,下一个插件为叶分支,则需要创建视频流分支插件,将视频分成多路,同时将当前分支和视频流分支插件链接起来;
4)如果当前插件为叶分支,下一个插件为主干分支,则需要创建一个funnel,将视频流合并到一起,并将当前插件和当前插件所在的分支的前面的插件链接在一起最终形成整个pipeline。
上述步骤3)-4)的操作与视频流合并相关,视频的合并是将多路视频某一时刻的当前帧按照排队的方式(一横队变成一纵队)组合成一个视频流,并给每一帧贴上标签,表明该帧来自那个一路视频;分成多路时通过每一帧的标签将每一帧挑拣出来回归到原来的支路上(一纵队变成一横队)。
本实施例的具体应用场景还可以在同时监控生产车间的生产线,厂房的禁入区域,以及厂房门口是否有未穿工作服的人员想要禁入车间。在处理时可以直接用多个解码器多路视频解码,但是一般硬件提供的解码器的资源是有限的,所以需要将多路视频流合并成为一路统一进行解码。同样的几路场景解码后使用的算法可以共同使用一个人体检测的算法,门口区域可能需要检测人员是否穿工作服的算法,车间区域可能需要检测工人有没有违规操作的算法,禁入区域可能需要检测人员在禁入区内是否有逗留的算法,经过这些算法之后可能需要一个统一的插件将每一路的消息及时发给监控者。
另外对于一些场景可能多个摄像头都是在监控是否有人闯入禁入的区域,那么这几路场景可以公用同一个算法即可,不需要为每一路场景都加载一个算法。
通过应用本申请的技术方案,对基于Gstreamer框架的深度学习算法应用架构(deepstream)进行了改进,通过定义一套用于加载插件的语法将插件的加载合并为统一的接口,并在改进配置文件加载器、插件组合器的基础上新增加配置文件解释器和插件排序器。由于先构建出统一的接口,再经添加配置文件,实现了接口的任意扩展,增加了插件加载的灵活性,减少了算法工程师在应用开发上的工作量,并且使得开发的算法可以灵活组合,与此同时减少系统资源的消耗,使得算法在嵌入式设备终端上更加容易实现。
为了达到以上技术目的,本申请提出了一种插件加载设备,如图6所示,包括:
获取模块601,获取待加载插件的配置文件,所述配置文件根据统一预设的插件加载语法生成,且包含所述待加载插件的插件名以及插件属性;
构建模块602,根据所述插件名以及与所述插件加载语法构建所述待加载插件的加载接口;
确定模块603,根据所述插件属性确定所述待加载插件的排序信息,所述排序信息用于指示是否使用所述待加载插件以及所述待加载插件的执行顺序;
排序模块604,基于所述加载接口加载所述待加载插件,并将加载后的插件按照所述排序信息进行排列。
在具体的应用场景中,所述构建模块602在根据所述插件名以及与所述插件加载语法构建所述待加载插件的加载接口之后,还包括:
将类型为应用属性的插件属性传递至插件管理应用,以使所述插件管理应用确定需要使用的待加载插件以及各所述待加载插件的执行顺序。
在具体的应用场景中,所述排序模块604中排序信息包含所述插件的使能标识位、加载顺序以及分支类型,将加载后的插件按照所述排序信息进行排列,具体为:
依次根据所述使能标识位判断所述插件是否被使能;
所有的插件均已判断完毕,将被使能的插件按照所述加载顺序在插件队列中排列,并查找位于最后一个主干分支的插件。
在具体的应用场景中,所述排序模块604依次根据所述使能标识位判断所述插件是否被使能,具体为:
若所述插件被使能,且所述插件位于执行线路的主干分支,在数组队列中与所述插件对应的主干分支进行存储;
若所述插件被使能,且所述插件位于执行线路的叶分支,在数组队列中与所述插件对应的叶分支分别进行存储;
若所述插件未被使能,继续判断所述插件的下一个插件是否被使能。
在具体的应用场景中,还包括组合模块605,用于:
判断所述插件在所述插件队列中的下一个插件是否属于同一分支;
若所述插件与所述下一个插件属于同一分支,将所述下一个插件加入所述同一分支中,并将所述插件与所述下一个插件链接;
若所述插件为主干分支,所述下一个插件为叶分支,创建分支插件,并将所述插件与所述分支插件链接;
若所述插件为叶分支,所述下一个插件为主干分支,将所述插件与所述下一个插件的业务流合并,并将所述插件与所述插件所在分支的上一个插件链接。
通过应用本申请的技术方案,对基于Gstreamer框架的深度学习算法应用架构(deepstream)进行了改进,通过定义一套用于加载插件的语法将插件的加载合并为统一的接口,并在改进配置文件加载器、插件组合器的基础上新增加配置文件解释器和插件排序器。由于先构建出统一的接口,再经添加配置文件,实现了接口的任意扩展,增加了插件加载的灵活性,减少了算法工程师在应用开发上的工作量,并且使得开发的算法可以灵活组合,与此同时减少系统资源的消耗,使得算法在嵌入式设备终端上更加容易实现。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施场景所述的方法。
本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明序号仅仅为了描述,不代表实施场景的优劣。
以上公开的仅为本发明的几个具体实施场景,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。
Claims (8)
1.一种插件加载方法,其特征在于,包括:
获取待加载插件的配置文件,所述配置文件根据统一预设的插件加载语法生成,且包含所述待加载插件的插件名以及插件属性;
根据所述插件名以及与所述插件加载语法构建所述待加载插件的加载接口;
根据所述插件属性确定所述待加载插件的排序信息,所述排序信息用于指示是否使用所述待加载插件以及所述待加载插件的执行顺序;
基于所述加载接口加载所述待加载插件,并将加载后的插件按照所述排序信息进行排列。
2.如权利要求1所述的方法,其特征在于,在根据所述插件名以及与所述插件加载语法构建所述待加载插件的加载接口之后,还包括:
将类型为应用属性的插件属性传递至插件管理应用,以使所述插件管理应用确定需要使用的待加载插件以及各所述待加载插件的执行顺序。
3.如权利要求2所述的方法,其特征在于,所述排序信息包含所述插件的使能标识位、加载顺序以及分支类型,将加载后的插件按照所述排序信息进行排列,具体为:
依次根据所述使能标识位判断所述插件是否被使能;
所有的插件均已判断完毕,将被使能的插件按照所述加载顺序在插件队列中排列,并查找位于最后一个主干分支的插件。
4.如权利要求3所述的方法,其特征在于,依次根据所述使能标识位判断所述插件是否被使能,具体为:
若所述插件被使能,且所述插件位于执行线路的主干分支,在数组队列中与所述插件对应的主干分支进行存储;
若所述插件被使能,且所述插件位于执行线路的叶分支,在数组队列中与所述插件对应的叶分支分别进行存储;
若所述插件未被使能,继续判断所述插件的下一个插件是否被使能。
5.如权利要求4所述的方法,其特征在于,在将加载后的插件按照所述排序信息进行排列之后,还包括:
判断所述插件在所述插件队列中的下一个插件是否属于同一分支;
若所述插件与所述下一个插件属于同一分支,将所述下一个插件加入所述同一分支中,并将所述插件与所述下一个插件链接;
若所述插件为主干分支,所述下一个插件为叶分支,创建分支插件,并将所述插件与所述分支插件链接;
若所述插件为叶分支,所述下一个插件为主干分支,将所述插件与所述下一个插件的业务流合并,并将所述插件与所述插件所在分支的上一个插件链接。
6.一种插件加载设备,包括:
获取模块,获取待加载插件的配置文件,所述配置文件根据统一预设的插件加载语法生成,且包含所述待加载插件的插件名以及插件属性;
构建模块,根据所述插件名以及与所述插件加载语法构建所述待加载插件的加载接口;
确定模块,根据所述插件属性确定所述待加载插件的排序信息,所述排序信息用于指示是否使用所述待加载插件以及所述待加载插件的执行顺序;
排序模块,基于所述加载接口加载所述待加载插件,并将加载后的插件按照所述排序信息进行排列。
7.一种计算机可读存储介质,其特征在于,所述机算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备执行权利要求1-5任一项所述的配置文件数据同步方法。
8.一种计算机程序产品,其特征在于,所述计算机程序产品在终端设备上运行时,使得所述终端设备执行权利要求1-5任一项所述的配置文件数据同步方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811070613.7A CN109491718A (zh) | 2018-09-13 | 2018-09-13 | 一种插件加载方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811070613.7A CN109491718A (zh) | 2018-09-13 | 2018-09-13 | 一种插件加载方法及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109491718A true CN109491718A (zh) | 2019-03-19 |
Family
ID=65689253
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811070613.7A Pending CN109491718A (zh) | 2018-09-13 | 2018-09-13 | 一种插件加载方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109491718A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110825453A (zh) * | 2019-10-25 | 2020-02-21 | 中盈优创资讯科技有限公司 | 基于大数据平台的数据处理方法及装置 |
CN111063432A (zh) * | 2019-12-13 | 2020-04-24 | 深圳开立生物医疗科技股份有限公司 | 一种超声数据处理方法、装置及超声设备和存储介质 |
CN112486470A (zh) * | 2020-12-15 | 2021-03-12 | 恩亿科(北京)数据科技有限公司 | 基于文件依赖关系自动调整文件窗口顺序的方法及系统 |
CN112839239A (zh) * | 2020-12-30 | 2021-05-25 | 广州虎牙科技有限公司 | 一种音视频加工的方法、装置及服务器 |
CN112866814A (zh) * | 2020-12-30 | 2021-05-28 | 广州虎牙科技有限公司 | 一种音视频加工的方法及装置 |
CN112905254A (zh) * | 2019-11-15 | 2021-06-04 | 北京百度网讯科技有限公司 | 用于发送请求的方法和装置 |
CN116382813A (zh) * | 2023-03-16 | 2023-07-04 | 成都考拉悠然科技有限公司 | 用于智慧城市管理的视频实时处理ai引擎系统 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6505228B1 (en) * | 1998-07-22 | 2003-01-07 | Cisco Technology, Inc. | Dynamic determination of execution sequence |
CN101236503A (zh) * | 2008-02-27 | 2008-08-06 | 鞠京佳 | 一种热部署实体类组件 |
CN103166787A (zh) * | 2011-12-15 | 2013-06-19 | 中国移动通信集团浙江有限公司 | 信息分析方法及其设备 |
CN103810008A (zh) * | 2014-02-19 | 2014-05-21 | 迈普通信技术股份有限公司 | 插件加载方法及系统 |
US20160092246A1 (en) * | 2014-09-26 | 2016-03-31 | Oracle International Corporation | Reverse dependency injection in a system with dynamic code loading |
CN105893094A (zh) * | 2016-03-31 | 2016-08-24 | 百度在线网络技术(北京)有限公司 | 应用程序插件化的实现方法和装置 |
CN105912362A (zh) * | 2016-04-11 | 2016-08-31 | 北京金山安全软件有限公司 | 一种加载插件的方法、装置及电子设备 |
CN106371864A (zh) * | 2016-08-23 | 2017-02-01 | 上海创景计算机系统有限公司 | 快速部署插件架构方法 |
CN106897158A (zh) * | 2017-01-20 | 2017-06-27 | 深圳兆日科技股份有限公司 | 数据加载方法和装置 |
CN107544886A (zh) * | 2016-06-27 | 2018-01-05 | 上海中兴软件有限责任公司 | 一种模块流程化调度方法及装置 |
-
2018
- 2018-09-13 CN CN201811070613.7A patent/CN109491718A/zh active Pending
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6505228B1 (en) * | 1998-07-22 | 2003-01-07 | Cisco Technology, Inc. | Dynamic determination of execution sequence |
CN101236503A (zh) * | 2008-02-27 | 2008-08-06 | 鞠京佳 | 一种热部署实体类组件 |
CN103166787A (zh) * | 2011-12-15 | 2013-06-19 | 中国移动通信集团浙江有限公司 | 信息分析方法及其设备 |
CN103810008A (zh) * | 2014-02-19 | 2014-05-21 | 迈普通信技术股份有限公司 | 插件加载方法及系统 |
US20160092246A1 (en) * | 2014-09-26 | 2016-03-31 | Oracle International Corporation | Reverse dependency injection in a system with dynamic code loading |
CN105893094A (zh) * | 2016-03-31 | 2016-08-24 | 百度在线网络技术(北京)有限公司 | 应用程序插件化的实现方法和装置 |
CN105912362A (zh) * | 2016-04-11 | 2016-08-31 | 北京金山安全软件有限公司 | 一种加载插件的方法、装置及电子设备 |
CN107544886A (zh) * | 2016-06-27 | 2018-01-05 | 上海中兴软件有限责任公司 | 一种模块流程化调度方法及装置 |
CN106371864A (zh) * | 2016-08-23 | 2017-02-01 | 上海创景计算机系统有限公司 | 快速部署插件架构方法 |
CN106897158A (zh) * | 2017-01-20 | 2017-06-27 | 深圳兆日科技股份有限公司 | 数据加载方法和装置 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110825453A (zh) * | 2019-10-25 | 2020-02-21 | 中盈优创资讯科技有限公司 | 基于大数据平台的数据处理方法及装置 |
CN110825453B (zh) * | 2019-10-25 | 2023-12-05 | 中盈优创资讯科技有限公司 | 基于大数据平台的数据处理方法及装置 |
CN112905254A (zh) * | 2019-11-15 | 2021-06-04 | 北京百度网讯科技有限公司 | 用于发送请求的方法和装置 |
CN112905254B (zh) * | 2019-11-15 | 2023-10-31 | 北京百度网讯科技有限公司 | 用于发送请求的方法和装置 |
CN111063432A (zh) * | 2019-12-13 | 2020-04-24 | 深圳开立生物医疗科技股份有限公司 | 一种超声数据处理方法、装置及超声设备和存储介质 |
CN111063432B (zh) * | 2019-12-13 | 2024-04-16 | 深圳开立生物医疗科技股份有限公司 | 一种超声数据处理方法、装置及超声设备和存储介质 |
CN112486470A (zh) * | 2020-12-15 | 2021-03-12 | 恩亿科(北京)数据科技有限公司 | 基于文件依赖关系自动调整文件窗口顺序的方法及系统 |
CN112839239A (zh) * | 2020-12-30 | 2021-05-25 | 广州虎牙科技有限公司 | 一种音视频加工的方法、装置及服务器 |
CN112866814A (zh) * | 2020-12-30 | 2021-05-28 | 广州虎牙科技有限公司 | 一种音视频加工的方法及装置 |
CN116382813A (zh) * | 2023-03-16 | 2023-07-04 | 成都考拉悠然科技有限公司 | 用于智慧城市管理的视频实时处理ai引擎系统 |
CN116382813B (zh) * | 2023-03-16 | 2024-04-19 | 成都考拉悠然科技有限公司 | 用于智慧城市管理的视频实时处理ai引擎系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109491718A (zh) | 一种插件加载方法及设备 | |
TWI476608B (zh) | A distributed computing data merging method, system and device thereof | |
CN107196900A (zh) | 一种共识校验的方法及装置 | |
CN101305348B (zh) | 分布式系统 | |
CN108132838A (zh) | 一种图数据处理的方法、装置及系统 | |
CN103136094A (zh) | 一种页面测试方法及装置 | |
CN104462352B (zh) | 数据打包方法及装置 | |
CN103856548B (zh) | 动态资源调度方法和动态资源调度器 | |
CN106980571A (zh) | 一种测试用例集的构建方法和设备 | |
CN110389998A (zh) | 建筑计价程序中项目快速组价方法、系统和计算机可读存储介质 | |
CN108415912A (zh) | 基于MapReduce模型的数据处理方法和设备 | |
CN109754072A (zh) | 网络离线模型的处理方法、人工智能处理装置及相关产品 | |
CN104580194A (zh) | 面向视频应用的虚拟化资源管理方法及装置 | |
CN111240656A (zh) | 一种高效的深度学习模型部署框架 | |
CN108418752B (zh) | 一种聚合组的创建方法和装置 | |
CN114841323A (zh) | 神经网络计算图的处理方法及处理装置 | |
CN109992372A (zh) | 一种基于映射归约的数据处理方法及装置 | |
CN105373450A (zh) | 数据备份的方法及装置 | |
CN107562478A (zh) | 一种基于Web技术的移动软件开发系统及方法 | |
CN106294530A (zh) | 规则匹配的方法和系统 | |
CN110532236A (zh) | 压缩文件的增量更新方法、系统和介质 | |
CN109508791A (zh) | 车辆损伤管理方法 | |
CN109829078A (zh) | 一种栅格数据的数据处理方法和装置 | |
Anderl | Industrie 4.0–Digital transformation in product engineering and production | |
CN102193777A (zh) | 循环控制流转移 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |