Python实现一键抠图的示例代码

 更新时间:2022年08月07日 08:51:31   作者:梦想橡皮擦  
在日常的工作和生活中,我们经常会遇到需要抠图的场景,即便是只有一张图片需要抠,也会抠得我们不耐烦。本文将为大家分享一个Python实现一键抠图的示例代码,需要的可以参考一下

需求来源

好友 A:橡皮擦,可否提供网页,上传带人像的图片,然后可以直接抠图,最好直接生成 PNG 图片下载。 橡皮擦:每天需要调用多少次? 好友 A:大概 100 次吧。 橡皮擦:妥了,给你写个免费的吧。

本案例的实战需求是对图片进行抠图,每日请求量为 100,来源依旧是好友求助,既然日请求量不大,那某智能云的人像分隔接口就可以使用了,申请之后,其赠送了 10000 次,每秒限制 2 次请求,足够使用。

实现方法

从官方下载 Python API SDK 之后,得到下图所示目录:

然后进入该目录执行下述命令安装 SDK

python setup.py build
python setup.py install

安装成功之后就可以通过 pip list 查看相关数据。

接下来需要创建一个 AipBodyAnalysis,该对象是后续处理人像分析的核心对象。

新建 show_people.py 文件,输入如下代码:

from aip import AipBodyAnalysis

""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'

client = AipBodyAnalysis(APP_ID, API_KEY, SECRET_KEY)

其中 App IDApi KeySecret Key 都需要提前在平台方申请使用。

接下来就可以使用人像分隔主体函数了,代码如下:

client = AipBodyAnalysis(APP_ID, API_KEY, SECRET_KEY)
""" 读取图片 """
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()

image = get_file_content('./demo.png')

""" 调用人像分割 """
ret = client.bodySeg(image)

print(ret)

代码用到的测试图为:

运行后提示 ModuleNotFoundError: No module named 'chardet',使用 pip install chardet 安装缺少模块。

上述 client.bodySeg(image) 函数的参数如下所示:

image:图像数据,base64 编码,要求 base64 编码后大小不超过 4M,最短边至少 15px,最长边最大 4096px,支持 jpg/png/bmp 格式;

type:可以通过设置 type 参数,自主设置返回哪些结果图,避免造成带宽的浪费

可选值说明:

  • labelmap - 二值图像,需二次处理方能查看分割效果
  • scoremap - 人像前景灰度图
  • foreground - 人像前景抠图,透明背景

type 参数值可以是可选值的组合,用逗号分隔;如果无此参数默认输出全部 3 类结果图

基于上述配置,在方法调用时添加参数,获取人像前景抠图。

""" 如果有可选参数 """
options = {}
options["type"] = "foreground"

""" 带参数调用人像分割 """
ret = client.bodySeg(image, options)
print(ret)

返回参数列表如下所示:

  • labelmap:分割结果图片,base64 编码之后的二值图像,需二次处理方能查看分割效果
  • scoremap :分割后人像前景的 scoremap,归一到 0-255,不用进行二次处理,直接解码保存图片即可。Base64 编码后的灰度图文件,图片中每个像素点的灰度值 = 置信度 * 255,置信度为原图对应像素点位于人体轮廓内的置信度,取值范围[0, 1]
  • foreground:分割后的人像前景抠图,透明背景,Base64 编码后的 png 格式图片,不用进行二次处理,直接解码保存图片即可。将置信度大于 0.5 的像素抠出来,并通过 image matting 技术消除锯齿
  • person_num:检测到的人体框数目
  • person_info:人体框信息

此时输出 person_num 就可以获得人像数量,测试代码如下所示。

ret = client.bodySeg(image, options)
print(ret["person_num"]) # 输出 1

接下来直接保存前景抠图,导入 base64 模块,直接解码保存即可。

""" 带参数调用人像分割 """
ret = client.bodySeg(image, options)
data = ret["foreground"]

data = base64.b64decode(data)
# 生成图片
with open("./fore.png",'wb') as f:
    f.write(data)

最后在使用一张复杂些的图片进行测试,背景去除的非常干净。

到此这篇关于Python实现一键抠图的示例代码的文章就介绍到这了,更多相关Python抠图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 手把手教你Python抓取数据并可视化

    手把手教你Python抓取数据并可视化

    很多小伙伴在提到python数据可视化的时候第一反应就是matplotlib库,但实际上python还有很多很好用的数据可视化的库,下面这篇文章主要给大家介绍了关于如何利用Python抓取数据并可视化的相关资料,需要的朋友可以参考下
    2022-05-05
  • Python编程matplotlib绘图挑钻石seaborn小提琴和箱线图

    Python编程matplotlib绘图挑钻石seaborn小提琴和箱线图

    这篇文章主要为大家介绍了Python编程如何使用matplotlib绘图来挑出完美的钻石以及seaborn小提琴和箱线图,有需要的朋友可以借鉴参考下,希望能够优速帮助
    2021-10-10
  • python pygame实现滚动横版射击游戏城市之战

    python pygame实现滚动横版射击游戏城市之战

    这篇文章主要为大家详细介绍了python pygame实现滚动横版射击游戏城市之战,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • Python人工智能之波士顿房价数据分析

    Python人工智能之波士顿房价数据分析

    买房应该是大多数都会要面临的一个选择,当前经济和政策背景下,未来房价会涨还是跌?这是很多人都关心的一个话题。今天分享的这篇文章,以波士顿的房地产市场为例,根据低收入人群比例、老师学生数量等特征,利用 Python 进行分析,不求买房但求技术
    2021-11-11
  • python使用yaml 管理selenium元素的示例

    python使用yaml 管理selenium元素的示例

    这篇文章主要介绍了python使用yaml 管理selenium元素的示例,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-12-12
  • selenium3.0+python之环境搭建的方法步骤

    selenium3.0+python之环境搭建的方法步骤

    这篇文章主要介绍了selenium3.0+python之环境搭建的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • Python asyncio异步编程常见问题小结

    Python asyncio异步编程常见问题小结

    本文主要介绍了Python asyncio异步编程常见问题小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Python中yield关键字的理解与使用

    Python中yield关键字的理解与使用

    yield关键字用于创建生成器函数,一种高效利用内存的函数类型,可以像迭代器对象一样使用,本文主要介绍了Python中的yield关键字的应用,需要的可以参考下
    2023-08-08
  • Python获取"3年前的今天"的日期时间问题

    Python获取"3年前的今天"的日期时间问题

    在Python中,如何获取" 3年前的今天"的datetime对象,本文通过实例代码给大家详细讲解,代码简单易懂对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-01-01
  • Python中getattr函数详解

    Python中getattr函数详解

    getattr是Python中的内置函数,用于获取一个对象的属性值,下面这篇文章主要给大家介绍了关于Python中getattr函数的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11

最新评论