Parfois nous devons changer la couleur de fond de nos photos d'identité, et nous n'avons pas le temps d'aller au studio photo pour prendre des photos, et ce n'est pas facile de découper les photos avec PS, alors aujourd'hui je vais partagez avec vous comment utiliser Python pour découper les images et changer la couleur d'arrière-plan
Page d'accueil de segmentation de portraits Baidu : suivez les étapes pour vous inscrire, vous connecter et authentifier.
Trouvez l'analyse du corps humain sur la page d'accueil de la console
Créez une application
Vous pouvez y écrire ce que vous voulez, mais les nouveaux utilisateurs doivent obtenir des ressources gratuites, sinon ils ont gagné Je ne pourrai pas l'utiliser.
Une fois la création terminée, enregistrez les valeurs de la clé API et de la clé secrète dans la liste des applications, qui seront utilisées ultérieurement.
À ce stade, les tâches d'enregistrement d'un compte et de création d'une application sont terminées.
2 : Implémentation du code. 1. Présentez la bibliothèqueimport 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 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格式转jpg,视情况舍去 os.remove(png_name) #删除原png图片,视情况舍去 print(name+"\t处理成功!") except Exception as e: pass
5. Compression de l'imagedef 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: passCopier après la connexion
#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 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 代表图片质量,值越低越模糊 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(" ")
2. Copiez le programme sur et Dans le même répertoire que les photos à traiter, double-cliquez sur le programme pour lancer
Rendu final
Rendu
Résumé
Le code ne compte pas C'est difficile. Il y a beaucoup de petits problèmes en cours de route. Par exemple, la taille de l'image ne peut pas dépasser 4 Mo, il faut donc compresser la photo, et il y a des problèmes comme les chemins. pour implémenter cette fonction !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!