CN111651149B - 一种便于部署的机器学习模型系统及其调用方法 - Google Patents
一种便于部署的机器学习模型系统及其调用方法 Download PDFInfo
- Publication number
- CN111651149B CN111651149B CN202010632077.6A CN202010632077A CN111651149B CN 111651149 B CN111651149 B CN 111651149B CN 202010632077 A CN202010632077 A CN 202010632077A CN 111651149 B CN111651149 B CN 111651149B
- Authority
- CN
- China
- Prior art keywords
- module
- interface
- predictor
- calling
- python
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/24—Object-oriented
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Evolutionary Computation (AREA)
- Medical Informatics (AREA)
- Data Mining & Analysis (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Mathematical Physics (AREA)
- Artificial Intelligence (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供一种便于部署的机器学习模型系统及其调用方法。系统包括:python模块,其具有能够被调用的对外接口,且所述python模块内部的机器学习模型的核心算法由python语言编译得到;接口封装模块,其基于C/C++语言对所述python模块的对外接口进行封装,使所述python模块能够直接被外部C/C++调用。本系统主要算法基于python语言,对外提供C/C++接口。从实验到部署不需要改变编程语言,降低了部署难度,并且易于被其他程序调用。
Description
技术领域
本发明涉及算法模型部署,具体而言,尤其涉及一种便于部署的机器学习模型系统及其调用方法。
背景技术
软件行业中进行算法部署时,对外提供C/C++接口是最优选择,C/C++的接口明确且靠近底层,方便沟通和使用。对传统机器学习模型部署,常用方法是在目标终端上,使用现有或自己编写的机器学习框架进行部署。针对深度学习模型,则使用对应模型框架的C/C++接口。由于在模型实验阶段,python语言最为常用,当同时使用传统机器学习模型和深度学习模型时,如果进行部署,将试验阶段python代码转换成C/C++比较困难,而且有的python库没有对应的C/C++库。
发明内容
根据上述提出的模型部署时将python代码转换成C/C++困难的技术问题,而提供一种便于部署的机器学习模型系统。本发明通过用C/C++对python的接口进行封装来实现外部的C/C++调用,降低了机器学习模型部署所需的时间和难度,并且使训练好的机器学习模型算法可以灵活地被其他程序调用。
本发明采用的技术手段如下:
一种便于部署的机器学习模型系统,包括:
python模块,所述python模块内部的机器学习模型的核心算法由python语言编译得到,且具有能够被调用的对外接口;
接口封装模块,所述接口封装模块基于C/C++语言对所述python模块的对外接口进行封装,使所述python模块能够直接被外部C/C++调用。
进一步地,所述python模块包括整体流程模块以及预测器模块;
所述整体流程模块用于向接口封装模块提供初始化接口、预测接口以及资源释放接口;
所述预测器模块包括预测器基类、若干预测器子类以及多预测器类,其中,所述预测器基类用于提供共通的数据预处理功能和预测接口的函数声明,所述预测器子类用于提供模型初始化的函数定义和预测接口的函数定义,所述多预测器类用于综合多个预测器子类的结果输出最终预测结果。
进一步地,基于所述预测器基类建立新的预测期子类,通过实现所述预测器基类的预测接口,将新的预测器子类组入预测器模块。
进一步地,所述python模块还包括注册模块,所述注册模块用于生成机器码;
系统开发端获取所述机器码后对其进行加密生成注册码文件,然后利用所述注册码文件进行注册,所述注册模块对该注册码文件是否已经注册过以及是否在有效期内做出判断后,保存该注册状态。
进一步地,所述python模块还包括可视化模块;
相应地,所述整体流程模块还用于向接口封装模块提供可视化接口。
一种机器学习模型的调用方法,将上述的机器学习模型系统编译为动态库,利用主程序调用所述动态库。
进一步地,所述利用主程序调用所述动态库,包括:
调用所述接口封装模块的初始化接口,在该初始化接口中调用整体流程模块的初始化接口;
调用接口封装模块的预测接口,将待处理文件包装成python格式后,作为参数传入整体流程模块,由整体流程模块调用预测器模块的预测接口获取预测的类别并返回;
调用接口封装模块的资源释放接口,该接口调用python整体流程模块的资源释放接口,结束动态库调用。
进一步地,所述利用主程序调用所述接口封装模块的初始化接口,在该初始化接口中调用整体流程模块的初始化接口,包括:
创建预测器实例;
调用注册模块并在所述注册模块中生成机器码,系统开发端获取所述机器码后对其进行加密生成注册码文件,然后利用所述注册码文件进行注册,所述注册模块对该注册码文件是否已经注册过以及是否在有效期内做出判断后,保存该注册状态;
整体流程模块创建用于保存当前运行时间的线程;
相应地,所述调用接口封装模块的资源释放接口,该接口调用python整体流程模块的资源释放接口,包括:
在资源释放接口中,向用于保存当前运行时间的线程发出结束信号,然后等待线程结束并返回。
进一步地,所述接口封装模块的预测接口,将待处理文件包装成python格式后,作为参数传入整体流程模块,由整体流程模块调用预测器模块的预测接口获取预测的类别并返回,包括:多次接口封装模块的预测接口,进行多组数据的预测。
进一步地,所述利用主程序调用所述动态库,还包括:调用接口封装模块的可视化接口,将待处理文件包装成python格式后,作为参数传入整体流程模块,由整体流程模块调用可视化模块的可视化接口获取可视化信息。
较现有技术相比,本发明具有以下优点:
1、本发明系统主要算法基于python语言,而对外提供C/C++接口,实现了从实验到部署不需要改变编程语言,并易于被其他程序调用,降低了系统的部署难度。
2、本发明系统中预测器子类基于基类创建,重载预测接口,实现了共通功能固定以及调用方式固定,修改预测器子类不会影响其他模块代码。
3、本发明系统部署时,整体功能以动态库形式提供,功能独立封装,提供对外接口,可以方便地被不同程序使用。
4、本发明系统部署时,结合RSA注册方法,防止算法库在任意多个终端机器上无限期地被使用。
基于上述理由本发明可在机器学习等领域广泛推广。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做以简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明机器学习模型系统模块图。
图2为实施例中外部调用动态库流程示意图。
图3为实施例中注册流程示意图。
图4为实施例中新增预测器子类流程示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
本发明提供了一种便于部署的机器学习模型系统,主要包括python模块和接口封装模块。其中python模块具有能够被调用的对外接口,且其内部的机器学习模型的核心算法由python语言编译得到。接口封装模块基于C/C++语言对python模块的对外接口进行封装,使python模块能够直接被外部C/C++调用。具体来说,接口封装模块主要是将python模块对外提供的接口用C语言进行封装,比如用Cython将python模块封装成无法反编译的库(*.pyd),在接口封装模块中通过python环境下的Python.h提供的接口,对python模块封装的库中的接口进行调用。这样,不需要将核心算法的python代码进行编程语言转换,而是通过用C/C++对python的接口进行封装,即可实现外部的C/C++对系统的调用。
进一步地,python模块包括整体流程模块以及预测器模块。其中整体流程模块用于向接口封装模块提供初始化接口、预测接口、可视化接口以及资源释放接口。预测器模块包括预测器基类、若干预测器子类以及多预测器类。预测器基类用于提供共通的数据预处理功能和预测接口的函数声明。预测器子类用于提供模型初始化的函数定义和预测接口的函数定义。多预测器类用于综合多个预测器子类的结果输出最终预测结果。更进一步地,如果要添加预测器,应该基于Predictor基类建立子类,并对基类的预测接口进行实现,最终组入到预测器模块。具体操作时,将新建子类代码加入到整个代码工程,同时将子预测器类加入到多预测器类中。需要时,根据系统功能需求,还要修改对多预测器类中多个预测器结果的处理方式。
优选地,python模块还包括注册模块,其主要用于生成机器码,系统开发端获取所述机器码后对其进行加密生成注册码文件,然后利用所述注册码文件进行注册。注册模块对该注册码文件是否已经注册过以及是否在有效期内做出判断后,保存该注册状态。注册模块工作时,外部C/C++调用接口封装模块的初始化接口,在接口封装模块的初始化接口中,调用整体流程模块的初始化接口。
优选地,python模块还包括可视化模块。可视化模块工作时,外部C/C++调用接口封装模块的初始化接口,在接口封装模块的初始化接口中,创建可视化实例。
如图1所示,给出了本发明一个较佳的实施方式,该实施方式中系统包括接口封装模块、python模块。python模块细分为整体流程模块、预测器模块、可视化模块、注册模块。其中,整体流程模块为接口封装模块提供初始化、资源释放、预测和可视化接口。在初始化接口中,会生成机器码并尝试利用已有的序列号进行注册,同时通过预测器模块和可视化模块中的类创建对象,以便进行之后的预测和可视化。在资源释放接口中,会将所用到的资源进行释放。预测器模块包含预测器基类、预测器子类和多预测器类,其中多预测类包含多个预测器子类,而各预测器子类均继承自预测器基类。
本发明还提供了一种机器学习模型的调用方法,将上述的机器学习模型系统编译为动态库,利用主程序调用所述动态库,所述主程序基于C/C++、java、python等语言编译,对动态库对外接口进行处理后,均可以进行调用。其中,所述利用主程序调用所述动态库,主要包括初始化步骤,预测步骤,可视化步骤和资源释放步骤。
初始化步骤,即调用所述接口封装模块的初始化接口,在该初始化接口中调用整体流程模块的初始化接口。
具体包括:创建预测器实例。调用注册模块并在所述注册模块中生成机器码,系统开发端获取所述机器码后对其进行加密生成注册码文件,然后利用所述注册码文件进行注册,所述注册模块对该注册码文件是否已经注册过以及是否在有效期内做出判断后,保存该注册状态。注册状态保存以后,整体流程模块创建用于保存当前运行时间的线程,每隔一段时间,记录下当前系统时间,并进行保存,防止通过修改系统时间来绕过有效期限制。
预测步骤,即调用接口封装模块的预测接口,将要处理的文件(图片文件、表格文件、音频文件等)路径或内容作为参数传入。接口封装模块将参数包装成python格式,传入整体流程模块,整体流程模块调用预测器模块的预测接口获取预测的类别并返回。必要时,可以多次接口封装模块的预测接口,进行多组数据的预测。
进一步地,执行预测步骤之时,还可以根据实际需求执行可视化步骤,即调用接口封装模块的可视化接口,生成相应的可视化数据。执行该步骤之前,相应的,在初始化步骤,还包括主程序调用接口封装模块的初始化接口,将待处理文件包装成python格式后,作为参数传入整体流程模块,由整体流程模块调用可视化模块的可视化接口创建可视化实例,从而获取可视化信息。当系统多次接口封装模块的预测接口,进行多组数据预测时,也可以多次调用可视化接口,生成相应的可视化数据。
资源释放步骤,主程序退出前需要调用接口封装模块的资源释放接口,该接口调用python整体流程模块的资源释放接口,在资源释放接口中,会向用于保存当前运行时间的线程发出结束信号,然后等待线程结束并返回。
下面通过具体的应用实例,对本发明机器学习模型系统及其调用方法的方案和效果做进一步说明。
本实例中通过仪器对人脑进行信号采集,利用采集到的信号对人脑可能出现的问题进行分类。对于该分类问题,可以综合全连接神经网络(FCN)、循环神经网络(RNN)、随机森林(RF)三种预测器的预测结果,对信号进行预测。
全连接神经网络基于pytorch的深度学习框架,RNN神经网络基于Tensorflow的深度学习框架,随机森林基于sklearn库。三个预测器都基于python进行训练和测试。在将预测器训练到比较好的效果以后,基于Predictor基类建立PredictorFCN、PredictorRNN、PredictorRF三个子类,并重载基类中的Predict接口,然后在多预测器类(MultiPredictor)中,添加三个子类的成员变量,并修改Predict接口,使之能够正确综合多个子预测器的预测结果。最后,对python模块和接口封装模块代码进行编译,得到动态库。
如果在上述流程结束后,需要加入新的深度学习预测器或者修改深度学习框架,只需要添加或修改相应的预测器子类,并在多预测器类中添加子类成员变量(如果修改深度学习框架,则不需要此步骤),然后编译python模块生成python的动态库即可。
如果需要添加传统机器学习预测器,只需要基于相应的python库(如sklearn)添加一个子分类器即可。由于在实验阶段都是用python语言来进行的,所以从实验到部署,不需要语言转换,不需要查找其他语言对应的相应开发包,节省了大量的精力和时间。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (9)
1.一种便于部署的机器学习模型系统,其特征在于,包括:
python模块,所述python模块内部的机器学习模型的核心算法由python语言编译得到,且具有能够被调用的对外接口,所述python模块包括整体流程模块以及预测器模块,
所述整体流程模块用于向接口封装模块提供初始化接口、预测接口以及资源释放接口,
所述预测器模块包括预测器基类、若干预测器子类以及多预测器类,其中,所述预测器基类用于提供共通的数据预处理功能和预测接口的函数声明,所述预测器子类用于提供模型初始化的函数定义和预测接口的函数定义,所述多预测器类用于综合多个预测器子类的结果输出最终预测结果;
接口封装模块,所述接口封装模块基于C/C++语言对所述python模块的对外接口进行封装,使所述python模块能够直接被外部C/C++调用。
2.根据权利要求1所述的便于部署的机器学习模型系统,其特征在于,基于所述预测器基类建立新的预测期子类,通过实现所述预测器基类的预测接口,将新的预测器子类组入预测器模块。
3.根据权利要求1所述的便于部署的机器学习模型系统,其特征在于,所述python模块还包括注册模块,所述注册模块用于生成机器码;
系统开发端获取所述机器码后对其进行加密生成注册码文件,然后利用所述注册码文件进行注册,所述注册模块对该注册码文件是否已经注册过以及是否在有效期内做出判断后,保存注册状态。
4.根据权利要求1所述的便于部署的机器学习模型系统,其特征在于,所述python模块还包括可视化模块;
相应地,所述整体流程模块还用于向接口封装模块提供可视化接口。
5.一种机器学习模型的调用方法,其特征在于,将权利要求1-4中任意一项所述的机器学习模型系统编译为动态库,利用主程序调用所述动态库。
6.根据权利要求5所述的机器学习模型的调用方法,其特征在于,所述利用主程序调用所述动态库,包括:
调用所述接口封装模块的初始化接口,在该初始化接口中调用整体流程模块的初始化接口;
调用接口封装模块的预测接口,将待处理文件包装成python格式后,作为参数传入整体流程模块,由整体流程模块调用预测器模块的预测接口获取预测的类别并返回;
调用接口封装模块的资源释放接口,该接口调用python整体流程模块的资源释放接口,结束动态库调用。
7.根据权利要求6所述的机器学习模型的调用方法,其特征在于,所述利用主程序调用所述接口封装模块的初始化接口,在该初始化接口中调用整体流程模块的初始化接口,包括:
创建预测器实例;
调用注册模块并在所述注册模块中生成机器码,系统开发端获取所述机器码后对其进行加密生成注册码文件,然后利用所述注册码文件进行注册,所述注册模块对该注册码文件是否已经注册过以及是否在有效期内做出判断后,保存注册状态;
整体流程模块创建用于保存当前运行时间的线程;
相应地,所述调用接口封装模块的资源释放接口,该接口调用python整体流程模块的资源释放接口,包括:
在资源释放接口中,向用于保存当前运行时间的线程发出结束信号,然后等待线程结束并返回。
8.根据权利要求6所述的机器学习模型的调用方法,其特征在于,所述接口封装模块的预测接口,将待处理文件包装成python格式后,作为参数传入整体流程模块,由整体流程模块调用预测器模块的预测接口获取预测的类别并返回,包括:多次接口封装模块的预测接口,进行多组数据的预测。
9.根据权利要求6所述的机器学习模型的调用方法,其特征在于,所述利用主程序调用所述动态库,还包括:调用接口封装模块的可视化接口,将待处理文件包装成python格式后,作为参数传入整体流程模块,由整体流程模块调用可视化模块的可视化接口获取可视化信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010632077.6A CN111651149B (zh) | 2020-07-03 | 2020-07-03 | 一种便于部署的机器学习模型系统及其调用方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010632077.6A CN111651149B (zh) | 2020-07-03 | 2020-07-03 | 一种便于部署的机器学习模型系统及其调用方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111651149A CN111651149A (zh) | 2020-09-11 |
CN111651149B true CN111651149B (zh) | 2022-11-22 |
Family
ID=72346203
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010632077.6A Active CN111651149B (zh) | 2020-07-03 | 2020-07-03 | 一种便于部署的机器学习模型系统及其调用方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111651149B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113190877B (zh) * | 2021-04-29 | 2022-10-04 | 网易(杭州)网络有限公司 | 一种模型加载方法、装置、可读存储介质及电子设备 |
CN113448545B (zh) * | 2021-06-23 | 2023-08-08 | 北京百度网讯科技有限公司 | 机器学习模型服务化的方法、设备、存储介质及程序产品 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106095601A (zh) * | 2016-06-16 | 2016-11-09 | 广东工业大学 | 一种多进程并发解算差分服务器系统及其实现方法 |
CN108460790A (zh) * | 2018-03-29 | 2018-08-28 | 西南科技大学 | 一种基于一致性预测器模型的视觉跟踪方法 |
CN108829382A (zh) * | 2018-06-05 | 2018-11-16 | 北京中电华大电子设计有限责任公司 | 一种用Python建立参考模型提高自动化验证平台效率的方法 |
CN111163057A (zh) * | 2019-12-09 | 2020-05-15 | 中国科学院信息工程研究所 | 一种基于异构信息网络嵌入算法的用户识别系统及方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9710238B2 (en) * | 2015-03-26 | 2017-07-18 | IfWizard Corporation | Automatically optimizing analytics database server |
-
2020
- 2020-07-03 CN CN202010632077.6A patent/CN111651149B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106095601A (zh) * | 2016-06-16 | 2016-11-09 | 广东工业大学 | 一种多进程并发解算差分服务器系统及其实现方法 |
CN108460790A (zh) * | 2018-03-29 | 2018-08-28 | 西南科技大学 | 一种基于一致性预测器模型的视觉跟踪方法 |
CN108829382A (zh) * | 2018-06-05 | 2018-11-16 | 北京中电华大电子设计有限责任公司 | 一种用Python建立参考模型提高自动化验证平台效率的方法 |
CN111163057A (zh) * | 2019-12-09 | 2020-05-15 | 中国科学院信息工程研究所 | 一种基于异构信息网络嵌入算法的用户识别系统及方法 |
Non-Patent Citations (1)
Title |
---|
如何入门Python与机器学习;csdn_csdn__AI;《CSDN https://blog.csdn.net/heyc861221/article/details/80131325》;20170904;第1-7页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111651149A (zh) | 2020-09-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111651149B (zh) | 一种便于部署的机器学习模型系统及其调用方法 | |
CN102096631B (zh) | 接口测试方法及装置 | |
CN110134386B (zh) | 一种程序编辑方法和装置 | |
US6523169B1 (en) | Method for testing system components of an object-oriented program | |
CN112101529B (zh) | 一种用于神经网络模型推理跨平台的部署方法及架构 | |
CN110633076B (zh) | 一种自动生成Solidity智能合约Java客户端程序的方法 | |
CN107179951A (zh) | 远程过程调用方法和装置 | |
CN112019609A (zh) | 基于物联网的设备监控方法、装置、设备及计算机介质 | |
EP2088506A1 (en) | Method and system for calling services from a remote client | |
US20080098377A1 (en) | Compiler neutral linking solution for c++ code | |
CN112114896A (zh) | 一种插件框架及业务功能扩展的方法 | |
CN114895935A (zh) | 刷写车辆ecu的方法、装置、电子设备及存储介质 | |
CN112835583A (zh) | 深度学习模型打包方法、装置、设备和介质 | |
CN113760736A (zh) | 一种测试方法、装置和系统 | |
EP0888695B1 (en) | Service logic portability based on interface definition of execution environment in an intelligent network | |
US7757205B2 (en) | System for preparing a standard framework for automation appliances | |
FI106988B (fi) | Palveluriippumattomien rakenneosien toteutus | |
CN115348148A (zh) | 一种复合条件的告警压缩处理方法 | |
CN104569650B (zh) | 一种基于信号的仪器驱动实现方法 | |
CN113254027A (zh) | 一种半导体设备控制程序转换方法、系统、设备和存储介质 | |
CN106506209B (zh) | 服务的管理方法及系统 | |
CN111309319A (zh) | 可继承的局数据动态页面配置方法和装置 | |
CN111198679B (zh) | 一种多语言健康管理模型的融合方法、装置 | |
CN110232027B (zh) | 一种基于可编辑数据进行系统测试的方法及系统 | |
CN116996551B (zh) | 一种基于soa化中央网络控制器的车载服务控制系统及方法 |
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 | ||
CB02 | Change of applicant information |
Address after: 116000 room 206, no.8-9, software garden road, Ganjingzi District, Dalian City, Liaoning Province Applicant after: Neusoft Education Technology Group Co.,Ltd. Address before: 116000 room 206, no.8-9, software garden road, Ganjingzi District, Dalian City, Liaoning Province Applicant before: Dalian Neusoft Education Technology Group Co.,Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |