Directorio de artículos
prefacio
Hola, hola a todos, mi nombre es Xiao Yuan. A veces necesitamos cambiar el color de fondo de nuestras fotos de identificación, y es demasiado tarde para ir al estudio fotográfico a tomar fotos, y no es fácil recortar la imagen con ps, así que hoy les compartiré cómo use python para recortar la imagen y cambiar el color de fondo
texto
1. Registre una cuenta Baidu AI y cree una aplicación de segmentación de retratos
Si tiene alguna pregunta sobre el artículo, puede enviarme un mensaje privado o venir aquí https://jq.qq.com/?_wv=1027&k=s5bZE0K3
- Página de inicio de segmentación de retratos de Baidu: siga los pasos para registrarse, iniciar sesión y autenticación de nombre real.
- Busque Human Analysis en la página de inicio de la consola
crear una aplicación
El contenido que debe completarse puede escribirse de manera informal. Los nuevos usuarios deben recibir recursos gratuitos, de lo contrario no podrán usarlos.
Después de la creación, registre los valores de API Key y Secret Key en la lista de aplicaciones, que se usarán más adelante.
En este punto, se completan las tareas de registrar una cuenta y crear una aplicación.
En segundo lugar, la implementación del código.
1. Importar la biblioteca
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. Obtener token de acceso
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
código central
Si tiene alguna pregunta sobre el artículo, puede enviarme un mensaje privado o venir aquí https://jq.qq.com/?_wv=1027&k=s5bZE0K3
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
4. Relleno de color de fondo de la imagen
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
5. Compresión de imágenes
#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()
6. Obtenga el tamaño de la imagen
def get_size():
size = os.path.getsize(name)
return size / 1024
7. Convertir formato png a 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 代表图片质量,值越低越模糊
bg.save(jpg_name,quality=70)
im.close()
8. Función principal
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. Código completo
Si tiene alguna pregunta sobre el artículo, puede enviarme un mensaje privado o venir aquí https://jq.qq.com/?_wv=1027&k=s5bZE0K3
#人像分割
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', # 在开放平台注册后所建应用的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 = 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(" ")
[Importante] Precauciones antes del uso
1. El programa sobrescribirá el archivo original, haga una copia de seguridad del archivo antes de usarlo para evitar la pérdida de datos
2. Copie el programa en el mismo directorio que la foto que se procesará y haga doble clic en el programa para ejecutar
representaciones finales
Imagen original:
representaciones
Resumir
Si tiene alguna pregunta sobre el artículo, puede enviarme un mensaje privado o venir aquí https://jq.qq.com/?_wv=1027&k=s5bZE0K3
El código no es difícil, pero hay muchos pequeños problemas en el medio. Por ejemplo, el tamaño de la imagen no puede exceder los 4 MB, hay que comprimir fotos, rutas y otros problemas. En resumen, ¡estoy muy feliz de realizar esta función!
Bueno, el intercambio de hoy está aquí ~ Si
tiene alguna pregunta sobre el artículo, o tiene otras preguntas sobre python, puede dejar un mensaje en el área de comentarios o enviarme un mensaje privado . Si
cree que el artículo que compartí es bueno, puede sígueme, o dale al artículo como (/≧▽≦)/