2.3 KiB
2.3 KiB
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 可能需要授权