
PaddleSeg的.Net项目部署PaddleSegSharp
本项目是一个基于百度飞桨PaddleSeg项目的人像分割模块而开发的.NET的工具类库。
★★★ 本文源自AlStudio社区精品项目,【点击此处】查看更多精品内容 >>>
本项目是net版本,无法在此运行看到结果,请前往项目地址查看
介绍
本项目是一个基于百度飞桨PaddleSeg项目的人像分割模块而开发的.NET的工具类库。
本项目中PaddleSeg.dll文件是基于开源项目最新发布版本PaddleSeg 2.7PaddleSeg的版本修改而成的C++动态库,基于opencv的x64编译而成的。
PaddleSeg是基于飞桨PaddlePaddle的端到端图像分割套件,内置45+模型算法及140+预训练模型,支持配置化驱动和API调用开发方式,打通数据标注、模型开发、训练、压缩、部署的全流程,提供语义分割、交互式分割、Matting、全景分割四大分割能力,助力算法在医疗、工业、遥感、娱乐等场景落地应用。
本项目只能在X64的CPU上编译和使用,只能在avx指令集上的CPU上使用。
本项目支持飞桨人像抠图的所有模型。PP-MattingV2-512、PP-Matting-512、PP-Matting-1024、PP-HumanMatting、MODNet-MobileNetV2。
默认使用MODNet-MobileNetV2模型。
原图
分离前后背景图
替换蓝色背景结果
本项目目前支持以下.NET框架:
net35;net40;net45;net451;net452;net46;net461;net462;net47;net471;net472;net48;net481;
netstandard2.0;netcoreapp3.1;
net5.0;net6.0;net7.0;
使用与部署
1. 在.NET中使用PaddleSegSharp
打开VS,新建一个Windows窗体应用.NET framework项目,
右键点击项目,选择【管理Nuget程序包】,搜索PaddleSegSharp,下载安装最新版。
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";
if (ofd.ShowDialog() != DialogResult.OK) return;
string modelPath = null;
//参数
MattingParameter parameter = new MattingParameter();
//初始化引擎
PaddleSegMattingEngine engine = new PaddleSegMattingEngine();
engine.Init(modelPath, parameter);
//设置背景颜色
engine.Setbackground(45, 145, 255);
//分割后的文件
string outfile = "C:\\" + Guid.NewGuid().ToString() + ".bmp";
engine.Seg(ofd.FileName, outfile,"mask图路径");
运行后便可去输出目录下查看分割后的结果。
由于PaddleSegSharp程序集在nuget安装时,自动部署一个分割模型MODNet-MobileNetV2,所以,本项目部署默认情况下不用额外下载模型,如果想更换其他模型或者自己训练的模型,只需要传递模型路径文件夹即可。
分割参数对象也均有默认值,也可以自行修改MattingParameter对象的参数值,首先调用引擎的Init方法进行初始化分割,该方法如果模型与参数没有改动,调用一次即可,后面就可以重复的调用分割方法Seg了。
参数对象定义如下:
/// <summary>
/// OCR识别参数
/// </summary>
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public class MattingParameter
{
/// <summary>
/// 是否使用GPU;默认false
/// </summary>
[field: MarshalAs(UnmanagedType.I1)]
public bool use_gpu { get; set; } = false;
/// <summary>
/// GPU id,使用GPU时有效;默认0;
/// </summary>
public int gpu_id { get; set; } = 0;
/// <summary>
/// 申请的GPU内存;默认4000
/// </summary>
public int gpu_mem { get; set; } = 4000;
/// <summary>
/// CPU预测时的线程数,在机器核数充足的情况下,该值越大,预测速度越快;默认10
/// </summary>
public int numThread { get; set; } = 10;
/// <summary>
/// 是否使用mkldnn库;默认true
/// </summary>
[field:MarshalAs(UnmanagedType.I1)]
public bool Enable_mkldnn { get; set; } =true;
/// <summary>
/// 是否输出背景mask图;默认false
/// </summary>
[field: MarshalAs(UnmanagedType.I1)]
public bool outbgfile { get; set; } = false;
/// <summary>
/// 结果是否背景透明;默认false
/// </summary>
[field: MarshalAs(UnmanagedType.I1)]
public bool bgtransparent { get; set; } = false;
}
技术交流方式
QQ技术交流群:818391797。
微信公众号:明月心技术学堂。
个人博客地址: https://www.cnblogs.com/raoyutian/
此文章为搬运
原项目链接
更多推荐
所有评论(0)