您好,登錄后才能下訂單哦!
這篇文章主要介紹了如何通過Python調(diào)用接口實現(xiàn)摳圖并改底色的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇如何通過Python調(diào)用接口實現(xiàn)摳圖并改底色文章都會有所收獲,下面我們一起來看看吧。
百度人像分割主頁:按步驟注冊,登錄,實名認(rèn)證即可。
在控制臺主頁找到人體分析
創(chuàng)建應(yīng)用
里面的需要填寫的內(nèi)容可以隨便寫,新用戶要去領(lǐng)取免費資源,不然使用不了。
創(chuàng)建完成在應(yīng)用列表記錄 API Key、Secret Key的值 ,稍后要用。
至此,注冊賬號和創(chuàng)建應(yīng)用的任務(wù)就完成了。
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', # 在開放平臺注冊后所建應(yīng)用的API Key
'client_secret': '替換成你的Secret Key' # 所建應(yīng)用的Secret Key
}
res = requests.post(url, data=data)
res = res.json()
access_token = res['access_token']
return access_token
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圖片底色填充,視情況舍去
png_jpg(png_name) #png格式轉(zhuǎn)jpg,視情況舍去
os.remove(png_name) #刪除原png圖片,視情況舍去
print(name+"\t處理成功!")
except Exception as e:
pass
def fullwhite(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
6.獲取圖圖片大小#compress_rate:數(shù)值越小照片越模糊
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 代表圖片質(zhì)量,值越低越模糊
im_resize.save(name)
im.close()
def get_size():
size = os.path.getsize(name)
return size / 1024
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 代表圖片質(zhì)量,值越低越模糊
bg.save(jpg_name,quality=70)
im.close()
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(" ")
#人像分割
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', # 在開放平臺注冊后所建應(yīng)用的API Key
'client_secret': '替換成你的Secret Key' # 所建應(yīng)用的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 代表圖片質(zhì)量,值越低越模糊
bg.save(jpg_name,quality=70)
im.close()
#compress_rate:數(shù)值越小照片越模糊
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 代表圖片質(zhì)量,值越低越模糊
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(" ")
1. 該程序會覆蓋原文件,使用前請備份文件,以免造成數(shù)據(jù)丟失
2. 將程序復(fù)制到和待處理的照片同目錄下,雙擊程序即可運行
關(guān)于“如何通過Python調(diào)用接口實現(xiàn)摳圖并改底色”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“如何通過Python調(diào)用接口實現(xiàn)摳圖并改底色”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。