欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

Python案例——利用接口实现【自动抠图+改色】

发布时间:2024/3/26 python 54 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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_token

    3. 核心代码

    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:pass

    4.图片底色填充

    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:pass

    5.获取图图片大小

    def get_size():size = os.path.getsize(name)return size / 1024

    6.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案例——利用接口实现【自动抠图+改色】的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。