Python 几行代码实现一键抠图,收费应用 BYEBYE_python 人像抠图_梦想橡皮擦的博客-程序员秘密

技术标签: python  精彩技术文  人工智能  前端  后端  开发语言  

️ 需求来源

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

本案例的实战需求是对图片进行抠图,每日请求量为 100,来源依旧是好友求助,既然日请求量不大,那某智能云的人像分隔接口就可以使用了,申请之后,其赠送了 10000 次,每秒限制 2 次请求,足够使用。
Python 几行代码实现一键抠图,收费应用 BYEBYE
从官方下载 Python API SDK 之后,得到下图所示目录:
Python 几行代码实现一键抠图,收费应用 BYEBYE
然后进入该目录执行下述命令安装 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)

代码用到的测试图为:
Python 几行代码实现一键抠图,收费应用 BYEBYE
运行后提示 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 几行代码实现一键抠图,收费应用 BYEBYE
最后在使用一张复杂些的图片进行测试,背景去除的非常干净。
Python 几行代码实现一键抠图,收费应用 BYEBYE


你正在阅读 【梦想橡皮擦】 的博客
阅读完毕,可以点点小手赞一下
发现错误,直接评论区中指正吧
橡皮擦的第 713 篇原创博客

从订购之日起,案例 5 年内保证更新

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hihell/article/details/126183088

智能推荐

【转】Objective-C 2.0 新特性一览 – 属性。_shappy1978的博客-程序员秘密

http://blog.codingmylife.com/?p=40属性是一种定义类所提供的数据的通常方法。在Movie这个类里,诸如“标题”,“工作室”和“发布年份”等等都算是属性。这里是用Objective-C 1.x语法定义的Movie类: 123456789101112131415161718...

xgboost使用调参_weixin_33758863的博客-程序员秘密

  欢迎关注博主主页,学习python视频资源https://blog.csdn.net/q383700092/article/details/53763328调参后结果非常理想from sklearn.model_selection import GridSearchCVfrom sklearn.datasets import load_breast_cancerfrom x...

读取一个文本文档,例如有1~10行,要求按10~1行的顺序输出.并保存予原文件_a11111111的博客-程序员秘密

 Java代码package test49;//package com.color.io; /*  * Main.java  *  * Created on 2000年9月29日, 下午5:17  *  * To change this template, choose Tools | Template Manager  * and open the template in the edito

黑马程序员_Java基础[29]_线程间通讯、解决问题、lock_Hnotify的博客-程序员秘密

---------- android培训 、java培训、期待与您交流! ---------- ---------- android培训、 java培训、期待与您交流!----------黑马官网: http://edu.csdn.net/heima

QCC304x系列开发教程(实战篇) 之 9.13-QCC3040之语音助手调用_高通qcc3040开发_心跳包的博客-程序员秘密

查看全部教程开发请点击:高通蓝牙耳机QCC304x开发详解汇总(持续更新中)1、什么是语音助手?这里的语音助手主要指的是手机自带的语音助手功能(例如hi siri,或者小爱同学等)。通过语音助手可以实现拨打电话,查询天气等等,是一个解放双手非常方便的功能。2、调用蓝牙耳机的语音助手功能首先手机支持语音助手功能并且打开了语音助手功能。(1)高通这个系列蓝牙耳机的语音助手UI是ui_input_voice_dial(2)语音助手实现的逻辑通过ui_input_v...

随便推点

央视再批“手机游戏”;秒拍恢复上架;谷歌 BERT 模型狂破纪录 | 极客头条_CSDN资讯的博客-程序员秘密

「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道。风里雨里,我们将每天为朋友们,播报最新鲜有料的新闻资讯,让所有技术人,时...

ExportUtil导出、导入工具类_excelexportutil导入_ttxs_hc的博客-程序员秘密

1,基本介绍Restful接口的调用,前端一般使用ajax调用,后端可以使用的方法比较多,  本次介绍三种:    1.HttpURLConnection实现    2.HttpClient实现    3.Spring的RestTemplate     2,HttpURLConnection实现[java] view plain copy [email protected]  public c

Tensorflow-gpu 2.4.0+cuda11.1缺失cusolver64_10.dll‘_naiyang12138的博客-程序员秘密

硬件及环境:2070s+win10+py3.6+tensorflow-gpu 2.4.0+cuda11.1问题:检查tf-gpu版本以及可用性时出现缺失cusolver64_10.dll的情况import tensorflow as tf# 打印当前版本print(tf.__version__)# 打印gpu是否可用print(tf.test.is_gpu_available())2021-03-04 10:12:07.170133: I tensorflow/stream_

三方登录(QQ)_Chen_Xx 的博客-程序员秘密

首先导入依赖api 'com.umeng.sdk:common:latest.integration'api 'com.umeng.sdk:analytics:latest.integration'在根gradle , repositories 和 allprojects中加入maven { url ‘https://dl.bintray.com/umsdk/release’ }...

html 向下的气泡弹出框,纯CSS打造Bubble气泡提示框实现代码_方杜若的博客-程序员秘密

那有没有办法弄一个既方便又兼容又友爱的Bubble气泡提示框呢?答案是可以的,而且就用纯CSS来来实现,当然在没出效果之前你有权去怀疑这件事情,但出了效果后,你必须坚定的认识:楼主是老实人,出家人是不打诳语的。其实呢这个方法是我以前收藏在另一个博客中的,现在为了能让更多的朋友方便地使用,就分享到博客园吧。无论你是否用得到,我都感谢你抽空来临幸我这篇文章。首先我们来定义一组CSS样式,用来描述bub...

vscode使用prettier格式化代码不起作用、配置不生效的解决方法_vscode格式化代码没反应_云帆Plan的博客-程序员秘密

问题描述在某一次更新prettier插件后,发现格式化不起作用了,在vscode用户配置中怎么设置都没有效果解决方法由于prettier插件优先使用项目根目录下的editorconfig配置文件,所以在vscode中怎么配置有没有用,如下图进入插件配置界面取消Use Editor Config的复选框,这样就不会优先使用editorconfig配置文件了你可以在项目根目录创建一个.prettierrc.js配置文件,prettier会自动检测到,也可以手动配置也可以使用vscode

推荐文章

热门文章

相关标签