[Caso de Python] Uso de una determinada interfaz de IA para lograr el efecto mate de la imagen y cambiar el color de fondo de la imagen

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

Por favor agregue la descripción de la imagen

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

  1. 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.
  2. Busque Human Analysis en la página de inicio de la consola

inserte la descripción de la imagen aquí

crear una aplicación

inserte la descripción de la imagen aquí

El contenido que debe completarse puede escribirse de manera informal. Los nuevos usuarios deben recibir recursos gratuitos, de lo contrario no podrán usarlos.

inserte la descripción de la imagen aquí

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.

inserte la descripción de la imagen aquí

En este punto, se completan las tareas de registrar una cuenta y crear una aplicación.

Por favor agregue la descripción de la imagen

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

Por favor agregue la descripción de la imagen

representaciones finales

Imagen original:

inserte la descripción de la imagen aquí
representaciones

inserte la descripción de la imagen aquí

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 (/≧▽≦)/

Por favor agregue la descripción de la imagen

Supongo que te gusta

Origin blog.csdn.net/aliYz/article/details/126932847
Recomendado
Clasificación