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)用
里面的需要填寫(xiě)的內(nèi)容可以隨便寫(xiě),新用戶要去領(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', # 在開(kāi)放平臺(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)制方式打開(kāi)圖片文件 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
4.圖片底色填充
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', # 在開(kāi)放平臺(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)制方式打開(kāi)圖片文件 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-04PYQT5實(shí)現(xiàn)控制臺(tái)顯示功能的方法
今天小編大家分享一篇PYQT5實(shí)現(xiàn)控制臺(tái)顯示功能的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06python使用xlrd實(shí)現(xiàn)檢索excel中某列含有指定字符串記錄的方法
這篇文章主要介紹了python使用xlrd實(shí)現(xiàn)檢索excel中某列含有指定字符串記錄的方法,涉及Python使用xlrd模塊檢索Excel的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-05-05Python實(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-11Python實(shí)現(xiàn)獲取磁盤剩余空間的2種方法
這篇文章主要介紹了Python實(shí)現(xiàn)獲取磁盤剩余空間的2種方法,結(jié)合具體實(shí)例形式分析了Python操作計(jì)算機(jī)硬件的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-06-06Django中使用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-06Python迅速掌握語(yǔ)音識(shí)別之知識(shí)儲(chǔ)備篇
語(yǔ)音識(shí)別是一門交叉學(xué)科。近二十年來(lái),語(yǔ)音識(shí)別技術(shù)取得顯著進(jìn)步,開(kāi)始從實(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