Python案例——利用接口实现【自动抠图+改色】
生活随笔
收集整理的这篇文章主要介绍了
Python案例——利用接口实现【自动抠图+改色】
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
目录
一、注册AI账号
二、代码实现
1.引入库
2.获取Access Token
3. 核心代码
4.图片底色填充
5.获取图图片大小
6.png格式转jpg
8.完整代码
三、使用前注意事项
💴哈喽,大家好丫,国庆节快乐丫,你们的小郭子又来啦 ~
今天给朋友们介绍一个小技巧,就是用Python实现【抠图+改底色】功能。
你会发现,有时候我们的证件照需要换底色,又来不及去照相馆拍照,用ps也不好抠图。 那么今天这个小技巧就用得上了。
话不多说,直接开干,嘿嘿嘿
一、注册AI账号
创建应用
创建完成在应用列表记录 API Key、Secret Key的值 ,稍后要用。
到这里,注册账号和创建应用的任务就完成了。 (开心不,嘻嘻)
二、代码实现
1.引入库
import os import requests import base64 import cv2 import numpy as np from PIL import Image from pathlib import Pathpath = os.getcwd() paths = list(Path(path).glob('*'))2.获取Access Token
def get_access_token():url = 'https://aip.baidubce.com/oauth/2.0/token'data = {'grant_type': 'client_credentials', # 固定值'client_id': '替换成你的API Key', # 在开放平台注册后所建应用的API Key'client_secret': '替换成你的Secret Key' # 所建应用的Secret Key}res = requests.post(url, data=data)res = res.json()access_token = res['access_token']return access_token3. 核心代码
def removebg():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_tokenheaders = {'content-type': 'application/x-www-form-urlencoded'}response = requests.post(request_url, data=params, headers=headers)if response:res = response.json()["foreground"]png_name=name.split('.')[0]+".png"with open(png_name,"wb") as f: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处理成功!")except Exception as e:pass4.图片底色填充
def fullwhite(png_name):im = Image.open(png_name)x,y = im.sizetry:p = Image.new('RGBA', im.size, (255,255,255)) # 使用白色来填充背景,视情况更改p.paste(im, (0, 0, x, y), im)p.save(png_name)except:pass5.获取图图片大小
def get_size():size = os.path.getsize(name)return size / 10246.png格式转jpg
def png_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()8.完整代码
#人像分割 import os import requests import base64 import cv2 import numpy as np from PIL import Image from pathlib import Pathpath = os.getcwd() paths = list(Path(path).glob('*'))def get_access_token():url = 'https://aip.baidubce.com/oauth/2.0/token'data = {'grant_type': 'client_credentials', # 固定值'client_id': '替换成你的API Key', # 在开放平台注册后所建应用的API Key'client_secret': '替换成你的Secret Key' # 所建应用的Secret Key}res = requests.post(url, data=data)res = res.json()access_token = res['access_token']return access_token def png_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:数值越小照片越模糊 def resize(compress_rate = 0.5):im = Image.open(name)w, h = im.sizeim_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()def get_size():size = os.path.getsize(name)return size / 1024def fullwhite(png_name):im = Image.open(png_name)x,y = im.sizetry:# 使用白色来填充背景# (alpha band as paste mask).p = Image.new('RGBA', im.size, (255,255,255))p.paste(im, (0, 0, x, y), im)p.save(png_name)except:passdef removebg():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_tokenheaders = {'content-type': 'application/x-www-form-urlencoded'}response = requests.post(request_url, data=params, headers=headers)if response:res = response.json()["foreground"]png_name=name.split('.')[0]+".png"with open(png_name,"wb") as f:data = base64.b64decode(res)f.write(data)fullwhite(png_name)png_jpg(png_name)os.remove(png_name)print(name+"\t处理成功!")except Exception as e:passif __name__ == '__main__':for i in paths:name = os.path.basename(i.name)if(name==os.path.basename(__file__)):continuesize = get_size()##照片压缩while size >=900:size = get_size()resize() removebg()print(" ")三、使用前注意事项
1. 该程序会覆盖原文件,使用前请备份文件,以免造成数据丢失
2. 将程序复制到和待处理的照片同目录下,双击程序即可运行
好啦,今天的分享到这里就结束啦 ~
觉得我分享的文章不错的话,可以关注一下哦,嘻嘻嘻
总结
以上是生活随笔为你收集整理的Python案例——利用接口实现【自动抠图+改色】的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 腾讯知名软件全线下架,网友一片唏嘘
- 下一篇: python保存为xlsb_如何使用Py