★★★ 本文源自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/

此文章为搬运
原项目链接

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐