如何通过Python调用接口实现抠图并改底色


这篇文章主要介绍了如何通过Python调用接口实现抠图并改底色的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何通过Python调用接口实现抠图并改底色文章都会有所收获,下面我们一起来看看吧。百度人像分割主页:按步骤注册,登录,实名认证即可。在控制台主页找到人体分析创建应用里面的需要填写的内容可以随便写,新用户要去领取免费资源,不然使用不了。创建完成在应用列表记录 API Key、Secret Key的值 ,稍后要用。至此,注册账号和创建应用的任务就完成了。

importos
importrequests
importbase64
importcv2
importnumpyasnp
fromPILimportImage
frompathlibimportPath

path=os.getcwd()
paths=list(Path(path).glob('*'))

defget_access_token():
url='https://aip.baidubce.com/oauth/2.0/token'
data={
'grant_type':'client_credentials',#固定值
'client_id':'替换成你的APIKey',#在开放平台注册后所建应用的APIKey
'client_secret':'替换成你的SecretKey'#所建应用的SecretKey
}
res=requests.post(url,data=data)
res=res.json()
access_token=res['access_token']
returnaccess_token

defremovebg():
try:
request_url="https://aip.baidubce.com/rest/2.0/image-classify/v1/body_seg"
#二进制方式打开图片文件
f=open(name,'rb')
img=base64.b64encode(f.read())
params={"image":img}
access_token=get_access_token()
request_url=request_url+"?access_token="+access_token
headers={'content-type':'application/x-www-form-urlencoded'}
response=requests.post(request_url,data=params,headers=headers)
ifresponse:
res=response.json()["foreground"]
png_name=name.split('.')[0]+".png"
withopen(png_name,"wb")asf:
data=base64.b64decode(res)
f.write(data)
fullwhite(png_name)#png图片底色填充,视情况舍去
png_jpg(png_name)#png格式转jpg,视情况舍去
os.remove(png_name)#删除原png图片,视情况舍去
print(name+"t处理成功!")
exceptExceptionase:
pass

deffullwhite(png_name):
im=Image.open(png_name)
x,y=im.size
try:
p=Image.new('RGBA',im.size,(255,255,255))#使用白色来填充背景,视情况更改
p.paste(im,(0,0,x,y),im)
p.save(png_name)
except:
pass

#compress_rate:数值越小照片越模糊
defresize(compress_rate=0.5):
im=Image.open(name)
w,h=im.size
im_resize=im.resize((int(w*compress_rate),i免费云主机域名nt(h*compress_rate)))
resize_w,resieze_h=im_resize.size
#quality代表图片质量,值越低越模糊
im_resize.save(name)
im.close()

6.获取图图片大小

defget_size():
size=os.path.getsize(name)
returnsize/1024

6.获取图图片大小

defpng_jpg(png_name):
im=Image.open(png_name)
bg=Image.new('RGB',im.size,(255,255,255))
bg.paste(im)
jpg_name=png_name.split('.')[0]+".jpg"
#quality代表图片质量,值越低越模糊
bg.save(jpg_name,quality=70)
im.close()

if__name__=='__main__':
foriinpaths:
name=os.path.basename(i.name)
if(name==os.path.basename(__file__)):
continue
size=get_size()
##照片压缩
whilesize>=900:
size=get_size()
resize()
removebg()
print("")

#人像分割
importos
importrequests
importbase64
importcv2
importnumpyasnp
fromPILimportImage
frompathlibimportPath

path=os.getcwd()
paths=list(Path(path).glob('*'))

defget_access_token():
url='https://aip.baidubce.com/oauth/2.0/token'
data={
'grant_type':'client_credentials',#固定值
'client_id':'替换成你的APIKey',#在开放平台注册后所建应用的APIKey
'client_secret':'替换成你的SecretKey'#所建应用的SecretKey
}
res=requests.post(url,data=data)
res=res.json()
access_token=res['access_token']
returnaccess_token
defpng_jpg(png_name):
im=Image.open(png_name)
bg=Image.new('RGB',im.size,(255,255,255))
bg.paste(im)
jpg_name=png_name.split('.')[0]+".jpg"
#quality代表图片质量,值越低越模糊
bg.save(jpg_name,quality=70)
im.close()

#compress_rate:数值越小照片越模糊
defresize(compress_rate=0.5):
im=Image.open(name)
w,h=im.size
im_resize=im.resize((int(w*compress_rate),int(h*compress_rate)))
resize_w,resieze_h=im_resize.size
#quality代表图片质量,值越低越模糊
im_resize.save(name)
im.close()

defget_size():
size=os.path.getsize(name)
returnsize/1024

deffullwhite(png_name):
im=Image.open(png_name)
x,y=im.size
try:
#使用白色来填充背景
#(alphabandaspastemask).
p=Image.new('RGBA',im.size,(255,255,255))
p.paste(im,(0,0,x,y),im)
p.save(png_name)
except:
pass

defremovebg():
try:
request_url="https://aip.baidubce.com/rest/2.0/image-classify/v1/body_seg"
#二进制方式打开图片文件
f=open(name,'rb')
img=base64.b64encode(f.read())
params={"image":img}
access_token=get_access_token()
request_url=request_url+"?access_token="+access_token
headers={'content-type':'application/x-www-form-urlencoded'}
response=requests.post(request_url,data=params,headers=headers)
ifresponse:
res=response.json()["foreground"]
png_name=name.split('.')[0]+".png"
withopen(png_name,"wb")asf:
data=base64.b64decode(res)
f.write(data)
fullwhite(png_name)
png_jpg(png_name)
os.remove(png_name)
print(name+"t处理成功!")
exceptExceptionase:
pass

if__name__=='__main__':
foriinpaths:
name=os.path.basename(i.name)
if(name==os.path.basename(__file__)):
continue
size=get_size()
##照片压缩
whilesize>=900:
size=get_size()
resize()
removebg()
print("")

1. 该程序会覆盖原文件,使用前请备份文件,以免造成数据丢失
2. 将程序复制到和待处理的照片同目录下,双击程序即可运行
关于“如何通过Python调用接口实现抠图并改底色”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“如何通过Python调用接口实现抠图并改底色”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注百云主机行业资讯频道。

相关推荐: php ie乱码如何解决

这篇文章主要讲解了“php ie乱码如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php ie乱码如何解决”吧! php ie乱码的解决办法:1、在网页head标签中设置“”;2、在“.htaccess…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 02/16 15:43
下一篇 02/16 15:56

相关推荐