Python利用AI接口實(shí)現(xiàn)摳圖并改圖片底色
前言
嗨嗨,大家好呀 ,我是小圓。有時(shí)候我們的證件照需要換底色,又來(lái)不及去照相館拍照,用ps也不好摳圖,所以今天給你們分享一下如何用python來(lái)?yè)笀D,并換底色

一、注冊(cè)百度AI賬號(hào)
創(chuàng)建人像分割應(yīng)用
百度人像分割主頁(yè):按步驟注冊(cè),登錄,實(shí)名認(rèn)證即可。
在控制臺(tái)主頁(yè)找到人體分析

創(chuàng)建應(yīng)用

里面的需要填寫的內(nèi)容可以隨便寫,新用戶要去領(lǐng)取免費(fèi)資源,不然使用不了。

創(chuàng)建完成在應(yīng)用列表記錄 API Key、Secret Key的值 ,稍后要用。

至此,注冊(cè)賬號(hào)和創(chuàng)建應(yīng)用的任務(wù)就完成了。
二、代碼實(shí)現(xiàn)
1.引入庫(kù)
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('*'))
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', # 在開放平臺(tái)注冊(cè)后所建應(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
3.核心代碼
def removebg():
try:
request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/body_seg"
# 二進(jìn)制方式打開圖片文件
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:
pass4.圖片底色填充
def fullwhite(png_name):
im = Image.open(png_name)
x,y = im.size
try:
p = Image.new('RGBA', im.size, (255,255,255)) # 使用白色來(lái)填充背景,視情況更改
p.paste(im, (0, 0, x, y), im)
p.save(png_name)
except:
pass
5.圖片壓縮
#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()
6.獲取圖圖片大小
def get_size():
size = os.path.getsize(name)
return size / 1024
7.png格式轉(zhuǎn)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 代表圖片質(zhì)量,值越低越模糊
bg.save(jpg_name,quality=70)
im.close()
8.主函數(shù)
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(" ")9.完整代碼
#人像分割
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', # 在開放平臺(tái)注冊(cè)后所建應(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:
# 使用白色來(lái)填充背景
# (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"
# 二進(jìn)制方式打開圖片文件
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(" ")[重要]使用前注意事項(xiàng)
1. 該程序會(huì)覆蓋原文件,使用前請(qǐng)備份文件,以免造成數(shù)據(jù)丟失
2. 將程序復(fù)制到和待處理的照片同目錄下,雙擊程序即可運(yùn)行
到此這篇關(guān)于Python利用AI接口實(shí)現(xiàn)摳圖并改圖片底色的文章就介紹到這了,更多相關(guān)Python 摳圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中Tkinter實(shí)現(xiàn)分頁(yè)標(biāo)簽的示例代碼
這篇文章主要介紹了python中Tkinter實(shí)現(xiàn)分頁(yè)標(biāo)簽的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
PYQT5實(shí)現(xiàn)控制臺(tái)顯示功能的方法
今天小編大家分享一篇PYQT5實(shí)現(xiàn)控制臺(tái)顯示功能的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
python使用xlrd實(shí)現(xiàn)檢索excel中某列含有指定字符串記錄的方法
這篇文章主要介紹了python使用xlrd實(shí)現(xiàn)檢索excel中某列含有指定字符串記錄的方法,涉及Python使用xlrd模塊檢索Excel的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-05-05
Python實(shí)現(xiàn)url長(zhǎng)短鏈接的轉(zhuǎn)換
短鏈接,通俗來(lái)說(shuō),就是將長(zhǎng)的URL網(wǎng)址,通過(guò)程序計(jì)算等方式,轉(zhuǎn)換為簡(jiǎn)短的網(wǎng)址字符串。本文將用Python語(yǔ)言實(shí)現(xiàn)這一效果,需要的可以參考一下2022-11-11
Python實(shí)現(xiàn)獲取磁盤剩余空間的2種方法
這篇文章主要介紹了Python實(shí)現(xiàn)獲取磁盤剩余空間的2種方法,結(jié)合具體實(shí)例形式分析了Python操作計(jì)算機(jī)硬件的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-06-06
Django中使用Json返回?cái)?shù)據(jù)的實(shí)現(xiàn)方法
這篇文章主要介紹了Django中使用Json返回?cái)?shù)據(jù)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Python迅速掌握語(yǔ)音識(shí)別之知識(shí)儲(chǔ)備篇
語(yǔ)音識(shí)別是一門交叉學(xué)科。近二十年來(lái),語(yǔ)音識(shí)別技術(shù)取得顯著進(jìn)步,開始從實(shí)驗(yàn)室走向市場(chǎng)。人們預(yù)計(jì),未來(lái)10年內(nèi),語(yǔ)音識(shí)別技術(shù)將進(jìn)入工業(yè)、家電、通信、汽車電子、醫(yī)療、家庭服務(wù)、消費(fèi)電子產(chǎn)品等各個(gè)領(lǐng)域2021-11-11

