95 lines
2.3 KiB
Markdown
95 lines
2.3 KiB
Markdown
# dotnet 调用算法方案
|
||
|
||
## 1. Python 开发算法内核
|
||
|
||
### 1.1 跨服务调用
|
||
|
||
#### 方案说明
|
||
|
||
将 Python 算法封装为服务,提供 HTTP 接口,dotnet 作为客户端调用服务。
|
||
|
||
#### 优点 & 缺点
|
||
|
||
优点
|
||
|
||
- 客户机不需要有较高的配置,也不需要安装 Python 环境,服务端可采用 Linux,配置 cuda 等 GPU 计算环境,服务端一直处于热部署状态,性能较好;
|
||
- 通过联网对客户有更好的控制;
|
||
- 软件架构分为客户端和服务端,开发成本低,各端定位问题比较简单;
|
||
- 保密性好
|
||
|
||
缺点
|
||
|
||
- 架构较复杂,需要客户端联网才能使用;
|
||
- 需要考虑服务端成本;
|
||
|
||
### 1.2 封装为动态链接库
|
||
|
||
#### 方案说明
|
||
|
||
将 Python 功能封装为 dll 提供给 C# 调用
|
||
|
||
#### 优点 & 缺点
|
||
|
||
优点
|
||
|
||
- 客户端不需要联网,使用比较方便
|
||
- Python 开发成本较低
|
||
|
||
缺点
|
||
|
||
- Python 自带包里的方法封装为 dll 是可行的,但对于依赖大量通过 pip 安装的包来说,是否可行需要调研,相较于上一个方案,开发成本较高;
|
||
- 客户端软件+硬件安装较复杂,需要安装 Python 环境,甚至需要安装 cuda 驱动、配置 GPU 计算环境;
|
||
|
||
### 1.3 不封装或者封装为可执行文件
|
||
|
||
#### 方案说明
|
||
|
||
使用 Python 开发算法内核,将源文件放在 C# 工程中,客户端配置好 Python(or Anaconda) 环境,直接调用 Python 解释器执行脚本,或者将脚本封装为 exe 调用,参考 https://github.com/Nuitka/Nuitka 将 Python 源码编译为 exe 文件。
|
||
|
||
#### 优点 & 缺点
|
||
|
||
优点
|
||
|
||
- 开发成本低
|
||
|
||
缺点
|
||
|
||
- 保密性不好,客户端有可能查看到算法源代码(待定,目前调研 Blender 是用 Nuitka 封装的)
|
||
|
||
## 2 C++/C# 开发算法内核
|
||
|
||
#### 方案说明
|
||
|
||
使用 C++/C# 开发算法内核,并封装为 dll 提供给 C# 调用。已知一个 C++ 可用的分类代码库:https://github.com/dsteinberg/libcluster
|
||
|
||
#### 优点 & 缺点
|
||
|
||
优点
|
||
|
||
- 运行效率高
|
||
- 难以被反编译
|
||
|
||
缺点
|
||
|
||
- 开发成本较高
|
||
- C++ GPU 编程需调研
|
||
|
||
## 3 Matlab 提供算法
|
||
|
||
#### 方案说明
|
||
|
||
使用 Matlab 开发算法内核,封装为 dll 提供给 C# 调用。
|
||
|
||
#### 优点 & 缺点
|
||
|
||
优点
|
||
|
||
- 运行效率高
|
||
- 难以被反编译
|
||
- 开发成本可控
|
||
|
||
缺点
|
||
|
||
- GPU 开发需要调研
|
||
- 使用 Matlab 可能需要授权
|