当前位置: 移动技术网 > IT编程>开发语言>c# > 从图片中把人物抠出来

从图片中把人物抠出来

2019年08月09日  | 移动技术网IT编程  | 我要评论
图片中物体(人物,动物或其它特定物品)的精确识别与提取是人工智能领域重要的一个方面,通过机器学习,最终能达到不需要人工干预准确的进行识别。 以云服务的方式提供 由于这些算法依赖于大量的训练或基础数据,所以,对于一些成果,以静态的算法,每个应用独立去完成漫漫的训练不是个好办法。因此,很多类似的成果会以 ...

图片中物体(人物,动物或其它特定物品)的精确识别与提取是人工智能领域重要的一个方面,通过机器学习,最终能达到不需要人工干预准确的进行识别。

以云服务的方式提供

由于这些算法依赖于大量的训练或基础数据,所以,对于一些成果,以静态的算法,每个应用独立去完成漫漫的训练不是个好办法。因此,很多类似的成果会以一种 api 服务接口方式提供,当然服务可能需要付费,但一般有一定的免费量。

使用 removebg

removebg 就是这样一种服务,其详细的 api 接口详见 ,它使用简单,就一个 api 并且提供了多种语言的调用示例。api 免费使用量的限制为每月50次调用

c# 使用示例

(1)获取 api 密钥

注册登录后,在 my account 中可以查看到 apikey,实现的方法中需要用到。

(2)根据示例代码形成易调用方法

这里,需求定义为,传入图片 url,返回提取结果的 url。
则方法实现如下:

private string cutout(string picurl)
{
    if (string.isnullorempty(picurl)) throw new exception("空空如也");

    using (var client = new httpclient())
    using (var formdata = new multipartformdatacontent())
    {
        // 申请的 apikey 可考虑动态的调整
        string key = "myremovebgapikey";  // apikey

        formdata.headers.add("x-api-key", key);
        formdata.add(new stringcontent(picurl), "image_url");
        formdata.add(new stringcontent("auto"), "size");
        var response = client.postasync("https://api.remove.bg/v1.0/removebg", formdata).result;

        if (response.issuccessstatuscode)
        {
            string imgname = datetime.now.tostring("yyyymmddhhmmss");
            filestream filestream = new filestream(httpcontext.current.server.mappath(string.format("~/images/{0}.png", imgname)), filemode.create, fileaccess.write, fileshare.none);
            response.content.copytoasync(filestream).continuewith((copytask) => { filestream.close(); });

            string imgurl = string.format("http://mydomain/images/{0}.png", imgname);
            return imgurl;
        }
        else
        { 
            throw new exception(response.content.readasstringasync().result); 
        }
    }
}

示例体验

如下图,左边的图片,去除背景,抠出的人物效果如右图。图片会是背景透明的 png 文件,很方便自已添加背景。

操作方式

关注公众号“时间维度”:

发送带有人物的图片即可。有使用量限制,哈哈!

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网