Engine API学习笔记汇总.docx

上传人:b****5 文档编号:8024375 上传时间:2023-01-28 格式:DOCX 页数:36 大小:287.55KB
下载 相关 举报
Engine API学习笔记汇总.docx_第1页
第1页 / 共36页
Engine API学习笔记汇总.docx_第2页
第2页 / 共36页
Engine API学习笔记汇总.docx_第3页
第3页 / 共36页
Engine API学习笔记汇总.docx_第4页
第4页 / 共36页
Engine API学习笔记汇总.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

Engine API学习笔记汇总.docx

《Engine API学习笔记汇总.docx》由会员分享,可在线阅读,更多相关《Engine API学习笔记汇总.docx(36页珍藏版)》请在冰豆网上搜索。

Engine API学习笔记汇总.docx

EngineAPI学习笔记汇总

EngineAPI学习笔记

软件概述

EngineAPI(应用程序接口)是Definiens软件开发工具包的一个组件。

EngineAPI可以通过插件来扩大DefiniensAnalysisEngineSoftware的容量。

一个Engine插件是有一个或者多个插件组件组成的。

一个插件组件也可以是实现一个算法或者功能,但二者不能同时实现。

此外EngineAPI用户指南提供使用EngineAPI的一般说明。

相关参考资料

在相关的EngineAPI参考帮助文档中,您将发现关于组成Engine插件程序的类和功能方面的详细信息,同时包括一些指导说明。

转到DefiniensDeveloper安装目录下的SDK文件夹。

默认路径C:

\ProgramFiles\DefiniensDeveloperVersionnumber\SDK\Engine\Help\

 

系统要求

通过DeiiniensEngineAPI开始编程的最低要求如下:

∙DefiniensDeveloper许可的版本.

∙MicrosoftVisualStudio.NET2003版本7.1

∙TheDefiniensDataIO应用程序编程接口(DIOAPI)头文件和.lib文件。

 

为了能够运行DefiniensDeveloper,在Windows系统上安装Definiens企业形象智能套件安装过程包括四个基本部分:

1.Definiens允许服务软件通过网络环境为Definiens软件提供许可证明,我们建议将它安装在DefinienseCognition网格的主节点上。

此外,你可以在一个网络环境中将它安装在另一台机器上。

这台机器需要在一个持续有效的网络段上。

2.在DefinienseCognition网格的主节点上安装DefinienseCognition网格基础结构软件。

DefinienseCognition网格为图像分析提供可升级服务的硬件和软件环境。

3.DefinienseCognitionEngine软件能够安装在DefinienseCognition网格中的主要点一个或者多个进程节点中。

4.一个或者多个Definiens企业形象智能客户端,它们代表了不同的基于角色的Definiens企业形象智能套件的用户界面。

注意

 

Definiens企业形象智能客户端不仅能被用在Windows操作系统上,一些组件在不同的版本例如Windows操作系统和Linux操作系统中也是可以适用的。

支持64位操作系统,尽管Definiens软件是一个本机32为应用程序,但是它兼容64位的软件和硬件。

这些系统表现出更优秀的操作系统内存管理,因此64位是DefinienseCognitionServer软件组件推荐的平台。

每个AnalysisEngineSoftware的安装需要2GB的RAM以及增加2GB的RAM给操作系统。

 

   

 

系统需求

  

CPU     

  

RAM

 

  

显示

 

可以运行的平台   

  许可  

   最低

   奔腾3

   512M

   

Windows2000

Windowsxp.professionalSp4

WindowsxpprofessionalSp2

Windowsvista

WindowsServer2003

X86platforms

X86_64platforms

ForlinuxplatformsseethelinuxInstallationGruide

  

组件

 

 系统需求    

   

CPU

 RAM   

 有效HD空间  

  显示 

 可以运行的平台  

  工作调度

部署服务器

管理控制台 

   最低/建议

  

inter奔4(3GHz,800FSB)或兼容

 

  200M 

   1G/2G

    1280*

1024

windows2000

WindowsxpprofessionalSp4

WindowsxpprofessionalSp2

Windowsvista

WindowsServer2003

X86platforms

X86_64platforms

ForlinuxplatformsseethelinuxInstallationGruide

 

 

组件

  

  系统需求 

  

CPU

 

 

RAM

  

   

有效HD空间

 可以运行的平台  

   

AnalysisEngine软件

控制服务

配置服务

   最低

   inter奔4(3GHz,800FSB)或兼容  

    1G

   20G

Windows2000

Windowsxp.professionalSp4

WindowsxpprofessionalSp2

Windowsvista

WindowsServer2003

X86platforms

X86_64platforms

ForlinuxplatformsseethelinuxInstallationGruide   

 

组件

系统需求

CPU

RAM

有效HD空间

可以运行的平台

Definiens视图

Definiens分析

Definiens设计

Definiens开发

最低

inter奔4(3GHz,800FSB)或兼容

1G

10G

windows2000

WindowsxpprofessionalSp4

WindowsxpprofessionalSp2

Windowsvista

WindowsServer2003

X86platforms

X86_64platforms

ForlinuxplatformsseethelinuxInstallationGruide

安装和配置

 

API是DefiniensDeveloper软件开发包(SDK)的一个组件,在安装DefiniensDeveloper时,SDK的安装是可选的。

 

如果你的电脑还没有安装SDK的话,需要跳转到DefiniensDeveloper的安装过程去。

在按照安装的顺序进行时,会遇到一个对话框选择组件,你不得不再SDK的复选框画上挑。

 

 

文件和安装目录结构

下面列出了包含DefiniensDeveloper安装信息的一些文件,并且与使用DataIOAPI有关。

 

跳转到SDK文件下面,即DefiniensDeveloper的安装目录,默认路径是:

C:

\ProgramFiles\DefiniensDeveloperVersionnumber\SDK\

 

帮助文件路径

\DataIO\Help\DataIOAPI_Help.chm

 

API头文件

.\Engine\Include\*.h

.\Engine\Include\AddinMngr\*.h

.\Engine\Include\DataIO\*.h

.\Engine\Include\Dbase\*.h

 

API库文件

.\Engine\Lib\DataIO.lib

.\Engine\Lib\Engine.lib

.\Engine\Lib\AddinMngr.lib

 

示例

.\Engine\Samples\SampleEPIAlgrSet

.\Engine\Samples\SampleEPIFeatureSet

DefiniensSoftware的theEnginePlug-ins的一体化

 

应用程序使用几个服务器同时读写文件和数据库,并且操作这些数据。

他们是在启动的时候进行加载。

他们以DLL's形式运行,能够被大致分为两类:

驱动器和插件。

 

加载项:

驱动和插件

 

我们有两种方式的加载项:

驱动和插件。

这两个概念性区别是驱动器主要处理硬件操作,比如文件访问(打开,关闭,读,写)和使用格式,反之,插件提供了功能函数,例如应用程序中的属性和可用的Engine算法,执行图像的操作是通过加载驱动程序来实现了。

 

载入添加模块

 

当应用程序启动时,首先加载驱动程序,然后加载插件。

四组驱动器(RDI,VDI,ADI,BDI)中的每一个都由一个单独的驱动器目录被载入的,Engine插件来自插件的目录。

每一个位置都包含一个已经被读取的xml配置文件和指定的被加载插件,这个搜索目录(bin/drivers或插件)在加载时被深入搜索。

如果通过配置发现被发现文件并没有被载入,他们就判断是否有效,有效的话,就载入。

以这种方式,如果没有按照载入顺序或者特殊的要求出现的话,插件能够被放在一个合适的目录来使用。

但是,如果加载项必须按照一定顺序的话,或者必须在初始化函数时通过一些可能的要求,或者一个可能被使用过的加载路径,被加载的应该在配置文件上面有所体现。

 

如果没有驱动器加载某一特定组,将会显示一个警告:

 

 

此主题相关图片如下:

图片1.png

载入插件模块

 

插件式Definiens软件的重要组成,他们根据提供的数据来进行转换,得到我们所需要的结果。

他们使用多种算法应用于图像分析和转换。

插件通过EnginePluginMngr被载入,载入的默认插件通过配置插件信息罗列出来。

他用xml文件来描述的插件载入顺序。

由于有一些插件在其他插件上面是独立的(创建好的Definiens)我们用一个特殊的顺序来定义一个插件列表。

例如:

    DIAProcAlgr

    DIAProcAlgrIntrn

    DIAProcAlgrThmIntrn

    DIAPropDscr

    DIAPropDscrIntrn

    DIAPropDscrIntrnVctr

 

这个文件的存储路径是bin/plugins。

如果某一个插件不能被载入,就会弹出这样一个消息对话框:

此主题相关图片如下:

图片2.png

 

按照配置列表加载插件以后,应用程序尝试在插件目录中载入一些其他的.Dll,这时发生错误的话,不会弹出任何对话框。

成功加载插件取决于拥有一个特殊的导出插件的功能,如果这些功能中的任何一个都无效的话,插件就不会被加载,被载入的驱动和插件能够在帮助里面看到->SystemInfoDialogbox。

所有的插件必须导出以下三种功能:

 

EPI_PLUGINintEPIGetVersionMinor()

EPI_PLUGINintEPIGetVersionMajor()

EPI_PLUGINEPIPlugin*EPIGetPlugin()

 

一个具有初始化功能的插件也可以导出成一个EnginePlug-in。

EPI_PLUGINboolEPIInit(),如果当前这个功能返回一个错误的返回值,这个插件是不能被加载的。

 

 

配置

 

负载载入的顺序按照xml配置文件规定的来进行。

也就是说,第一个标注将会被加载进来,最后一个标注则最后被加载。

这里有两个属性标记,是可选的。

use_path这个属性的特点是增加的应该从被给出use_path的文本里面来加载。

这是一个绝对路径,或者相对路径本身。

如果没有use_path,增加的就是从增加的路径里面来加载。

Init_args这个属性的特点是字符串问题,即应当通过加载项的初始化函数(DataIO驱动器的XDI_Driver_Init)驱动器,和Engine插件的EPInit。

解析一个EnginePlug-in

 

创建一个EngineAPI让开发变得更容易,可以快速访问信息和所需资源,以此来创建一个DefiniensEnginePlug-in。

一个EnginePlug-in是由一个或多个组件组成。

一个组件既能运行一条属性或者一个算法,但不能同时运行二者。

 

当你在你的Engine插件里面设计完你的第一个算法之后,你所启动的位置就是执行导出接口函数和基本的EPIPlug-in接口类。

 OptionalDLLExports

 EPI_PLUGINboolEPIInit();

 EPI_PLUGINvoidEPIFinalize(); 

 

 MandatoryDLLExports

 EPI_PLUGINintEPIGetVersionMinor();

 EPI_PLUGINintEPIGetVersionMajor(); 

 EPI_PLUGINEPIPlugin*EPIGetPlugin();

 

 

 classENGINE_APIEPIPlugin

 {

  public:

 

   virtualEPIComponentInfo**GetComponentList()const=0;

   virtualconstchar*GetPlugInLicenceId()const{ 

   return"";}

   virtualconstchar*GetPlugInLicenceVer()const{ 

   return"";}

   virtualconstchar*GetName()const=0;

   virtualconstchar**GetLegacyGUIDList()const{ 

   returnNULL;}

 };

 

首先,如果非强制功能函数boolEPIInit()被导出,即调用。

如果返回值错误,并且没有在插件上做进一步的查询,EnginePluginMngr试图去载入下一个插件。

如果EPIInit函数并没有存在,只有这个强制性导出功能被检测。

 

如果插件是有意义的,Definiens软件将会调用你的插件导出功能函数来找到相关插件信息,以及如何去使用它。

然后会调用EPIGetPlugin()函数,这个EPIGetPlugin()函数将会返回一个实例化你的类的指针,该类运行虚函数类EPIPlugin。

 

当DefiniensSoftware获得一个该类指针,他就会找到更多关于执行你的插件的有用信息(包括许可信息)。

如果所有都执行顺利,他将调用功能EPIPlugin:

GetComponentList()和类EPIComponentInfo指针的数组。

这些EPIComponentInfo指针指向实例对象,包括了一些关于算法的信息,并且和组件类型也有关联。

以这种方式你的插件能运行多种功能(通过EPICComponentInfo*list),EPIComponentInfo**GetComponentList()const你的EPIComponentInfo类的执行必须覆盖纯虚函数:

EPIComponent*EPIComponentInfo:

:

CreateComponent(DMIProject*project);

这个功能将会返回一个实际的EnginePlug-inComponents(类EPIComponent)运行过程,或者是一个属性组件,或者是一个算法过程组件。

  

属性组件和算法组件

 

你可以创建两种类型的插件:

属性组件和算法组件。

 

AnalysisEngineSoftware允许我们进行两种操作,通过这两类组件。

 

属性组件是属性对象和场景的一个接口,这些接口允许应用程序检索关于图像的详细信息,或者图像段。

 

一个示例执行的功能范围可能会被限制在x,y范围内,但是这个例子很简单或者没有处理。

通常功能组件也为复杂的检索提供了接口,这可能需要一些处理,例如取平均值,或者某些图像对象,形状信息,相对于其他物体的距离。

 

算法组件允许我们运行图像和对象的功能,这些可能的运行是有条件的,可能受到属性控制。

算法的执行部分可能会软化或者锐化图像算法,或者在Definiens软件中常见见的一个算分割,他在一些threshold的基础上将图像分割。

一个非常简单的例子,是利用分割算法来浏览一个图像,使分割部分加入具有相同红/蓝/绿像素值的像素块,当然这是一个非常简单的分割像素图,在实际图像中将会没有一点用处,然而,这一点是十分明确的。

 

Definiens软件中的算法组件是技术的核心,利用他们可以做强大的事情,使用EngineAPI来实现你的Definiens软件的算法组件一体化。

 

 执行一个算法组件

 

  要创建一个算法有以下几步:

1.必须告诉DefiniensApplication我们正在运行哪一种组件。

2.在我们推导EPIComponentInfoECompType的算法时,需要我们去运行纯虚函数EPIComponentInfo:

:

GetComponentType()const。

3.从这个功能上,我们返回EPIComponentInfo:

:

CompID_ProcAlgr的类型。

也就是说Definiens软件就是我们正在运行的一款软件。

4.提供Definiens软件一种处理这个组件的运行过程,也就是说我们必须要:

     写一个运行函数抽象类EPIProcAlgr

     在我们推导EPIComponentInfo算法时,需要我们去运行纯虚函数EPIComponentInfo:

:

CreateComponent(DMIProject*project

     从功能上来讲,运行类EPIProcAlgr的一个实例,返回一个EPIProcAlgr的指针。

 

类EPIProcAlgr是一个抽象类,他包含一个或多个纯虚函数,纯虚函数必须被覆盖,否则派生类不能实例化。

 

其他的在抽象类中纯虚函数是不能被运行的。

这是一个boolEPIProcAlgr:

:

AlgrExecBgn(DMIProcessContext*cntxt)功能的例子。

 

一个具有最少的运行程序来运行:

 

 

 EPIComponent:

:

Delete

 EPIComponent:

:

GetInfo

 

 

 EPIParamContainer:

:

GetParam

 EPIParamContainer:

:

SetParam

 

 

 EPIProcAlgr:

:

AlgrInit

 EPIProcAlgr:

:

AcceptChildProcess

 EPIProcAlgr:

:

SupportsDomain

 EPIProcAlgr:

:

GetAutoName

 EPIProcAlgr:

:

AlgrExecBgn

 EPIProcAlgr:

:

AlgrExec

 EPIProcAlgr:

:

AlgrExecEnd

 EPIProcAlgr:

:

AlgrDone   

 

HelloWorld插件的开发

 

插件和组件,这是两个独立的的概念。

基本上,一个插件可以包含一个或多个相关的组成部分。

每个部分实现了功能的原子化,可以选择Definiens软件中独立窗口下的进程树。

 

执行插件

我们创建了最高级别的从EPIPlugin类继承的Engine接口类,我们需要实现纯虚函数的功能GetComponentList和GetName,其他默认的直接就可以使用。

 

classEPI_PLUGINMyFirstPlugin:

publicEPIPlugin

{

public:

 //!

getnull-terminatedlistofcomponents

 EPIComponentInfo**GetComponentList()const;

 //!

getthenameoftheplug-in,fordisplaypurposesonly

 constchar*GetName()const{return"MyFirstPlugin";}

};

 

下面我们创建一个文件:

MyFirstPlugin.Cpp

这里我们运行基本的EnginePlug-in的功能,并在头文件中声明MyFirstPlugin:

:

GetComponentList功能

在这个MyFirstPlugin:

:

GetComponentList()功能里,我们提供了一个空的终止条件列表的一个静态实例。

在我们的案例中,列表只有一个组件成为了我们的插件。

过后,我们的组件列表可能增加到包括了许多东西。

然后,通常的一个单纯的插件将会仅仅包含一些相关的组件。

如你所见,GetComponentList函数返回的列表中包括了类UpdateProcVar的使用。

这个类包括了我们新的插件组件的运行方式。

这个新类我们将在每一个组件的头文件中声明UpdateProcVar.H。

大多数的创建一个插件的工作都在组件开发中实现。

//!

getthemajorversionnumberofthisplug-in

intEPIGetVersionMajor()

{

return1;

}

 

 

//!

gettheminorversionnumberofthisplug-in

intEPIGetVersionMinor()

{

return0;

}

 

 

//!

returnstheinstanceofthestaticallyinstancitateddll-plug-in

EPIPlugin*EPIGetPlugin()

{

 staticMyFirstPluginplugin;

 return&plugin;

}

 

 

EPIComponentInfo**MyFirstPlugin:

:

GetComponentList()const

{

 

 //----------------------------------------

 //Listofallimplementedcomponents

 //----------------------------------------

 staticEPIComponentInfo*list[]=

 {

 UpdateProcVar:

:

GetInfoStatic(),

 N

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 从业资格考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1