Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bimbing anda langkah demi langkah untuk melaksanakan potongan dan menukar warna latar belakang melalui antara muka panggilan Python

Bimbing anda langkah demi langkah untuk melaksanakan potongan dan menukar warna latar belakang melalui antara muka panggilan Python

青灯夜游
青灯夜游ke hadapan
2022-10-21 20:03:594333semak imbas

Bimbing anda langkah demi langkah untuk melaksanakan potongan dan menukar warna latar belakang melalui antara muka panggilan Python

Kadangkala kita perlu menukar warna latar belakang foto ID kita, dan kita tidak mempunyai masa untuk pergi ke studio foto untuk mengambil gambar, dan bukan mudah untuk memotong gambar dengan PS, jadi hari ini saya akan berkongsi dengan anda cara menggunakan python untuk memotong gambar , dan menukar warna latar belakang

1 Daftar akaun Baidu AI dan buat aplikasi pembahagian potret

  • Laman utama segmentasi potret Baidu: ikut langkah untuk mendaftar dan log masuk , pengesahan nama sebenar sudah memadai.

  • Cari Analisis Manusia pada halaman utama konsol

Bimbing anda langkah demi langkah untuk melaksanakan potongan dan menukar warna latar belakang melalui antara muka panggilan Python

Buat aplikasi

Bimbing anda langkah demi langkah untuk melaksanakan potongan dan menukar warna latar belakang melalui antara muka panggilan Python

Anda boleh menulis apa sahaja yang anda mahukan di dalam, tetapi pengguna baharu perlu mendapatkan sumber percuma, jika tidak, mereka tidak akan dapat menggunakannya.

Bimbing anda langkah demi langkah untuk melaksanakan potongan dan menukar warna latar belakang melalui antara muka panggilan Python

Selepas penciptaan, rekodkan nilai Kunci API dan Kunci Rahsia dalam senarai aplikasi, yang akan digunakan kemudian.

Bimbing anda langkah demi langkah untuk melaksanakan potongan dan menukar warna latar belakang melalui antara muka panggilan Python

Pada ketika ini, tugasan untuk mendaftar akaun dan membuat aplikasi selesai.

Bimbing anda langkah demi langkah untuk melaksanakan potongan dan menukar warna latar belakang melalui antara muka panggilan Python

2. Pelaksanaan kod

1 2. Dapatkan Token Akses

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('*'))

Kod Teras

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

Jika anda mempunyai sebarang soalan tentang artikel, anda boleh menghantar saya mesej peribadi atau datang ke sini https: //jq.qq.com/?_wv=1027&k=s5bZE0K3

Isi warna latar belakang gambar
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. Pemampatan imej

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

6. Dapatkan saiz imej

#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()

7.png format ke jpg

def get_size():
    size = os.path.getsize(name)
    return size / 1024

8 Fungsi utama

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()

Kod lengkap

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(" ")

Ada masalah dengan artikel Anda boleh menghantar mesej peribadi kepada saya atau datang ke sini https://jq.qq.com/?_wv=1027&k=s5bZE0K3

[Penting] Langkah berjaga-jaga sebelum digunakan
#人像分割
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(" ")

1 Program ini akan menimpa fail asal, sila sandarkan fail sebelum digunakan untuk mengelakkan kehilangan data 2. Salin program ke direktori yang sama seperti foto yang akan diproses, klik dua kali pada program untuk dijalankan


Bimbing anda langkah demi langkah untuk melaksanakan potongan dan menukar warna latar belakang melalui antara muka panggilan PythonPerenderan akhir

Imej asal:

Rendering

Bimbing anda langkah demi langkah untuk melaksanakan potongan dan menukar warna latar belakang melalui antara muka panggilan Python

Ringkasan Bimbing anda langkah demi langkah untuk melaksanakan potongan dan menukar warna latar belakang melalui antara muka panggilan Python

Kod tidak sukar, tetapi terdapat banyak masalah kecil di sepanjang jalan, seperti saiz imej tidak boleh melebihi 4MB, anda perlu memampatkan foto, laluan dan isu-isu lain Secara ringkasnya, saya sangat gembira untuk melaksanakan fungsi ini! Baiklah, perkongsian hari ini berakhir di sini ~

[Cadangan berkaitan:

Tutorial video Python3
]

Atas ialah kandungan terperinci Bimbing anda langkah demi langkah untuk melaksanakan potongan dan menukar warna latar belakang melalui antara muka panggilan Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:csdn.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam