【Python案例】用某度AI介面實現摳圖並改圖片底色

專注的阿熊發表於2022-09-22

# 人像分割

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 = '

     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部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2915840/,如需轉載,請註明出處,否則將追究法律責任。

相關文章