ITPub博客

首页 > IT职业 > IT生活 > 【Python案例】用某度AI接口实现抠图并改图片底色

【Python案例】用某度AI接口实现抠图并改图片底色

IT生活 作者:专注的阿熊 时间:2022-09-22 17:16:15 0 删除 编辑

# 人像分割

import os

import requests

import base64

import cv2

import numpy as np

from PIL import Image

from pathlib import Path

path = 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 =跟单网gendan5.com 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.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()     

def get_size():

     size = os.path.getsize(name)

     return size / 1024     

def fullwhite(png_name):

     im = Image.open(png_name)

     x,y = im.size

     try:

         # 使用白色来填充背景

         # (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:

         pass  

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_token

         headers = {'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:

         pass

if __name__ == '__main__':

     for i in paths:

         name = os.path.basename(i.name)

         if(name==os.path.basename(__file__)):

             continue

         size = get_size()

         ## 照片压缩

         while size >=900:

             size = get_size()

             resize()   

         removebg()

         print(" ")

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946337/viewspace-2915840/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-08-23

  • 博文量
    410
  • 访问量
    276761