ホームページ  >  記事  >  バックエンド開発  >  Python 呼び出しインターフェイスを介してカットアウトを実装し、背景色を変更する方法をステップバイステップでガイドします。

Python 呼び出しインターフェイスを介してカットアウトを実装し、背景色を変更する方法をステップバイステップでガイドします。

青灯夜游
青灯夜游転載
2022-10-21 20:03:594312ブラウズ

Python 呼び出しインターフェイスを介してカットアウトを実装し、背景色を変更する方法をステップバイステップでガイドします。

証明写真の背景色を変更する必要がある場合がありますが、写真スタジオに写真を撮りに行く時間がありません。 PS、今日は Python を使用して写真を切り抜き、背景色を変更する方法を紹介します

#1. Baidu AI アカウントを登録し、ポートレート セグメンテーション アプリケーションを作成します

    #Baidu ポートレート セグメンテーション ホームページ: 手順に従って登録してログインします。実名認証で十分です。
  • #コンソールのホーム ページで Human Analysis を検索します
#アプリケーションの作成

Python 呼び出しインターフェイスを介してカットアウトを実装し、背景色を変更する方法をステップバイステップでガイドします。

には好きなものを記述できます。新規ユーザーは無料のリソースを取得する必要があります。そうしないと、リソースを使用できなくなります。

Python 呼び出しインターフェイスを介してカットアウトを実装し、背景色を変更する方法をステップバイステップでガイドします。

#作成が完了したら、後で使用するアプリケーション リストに API キーとシークレット キーの値を記録します。

Python 呼び出しインターフェイスを介してカットアウトを実装し、背景色を変更する方法をステップバイステップでガイドします。

この時点で、アカウントの登録とアプリケーションの作成のタスクは完了です。

Python 呼び出しインターフェイスを介してカットアウトを実装し、背景色を変更する方法をステップバイステップでガイドします。

# 2. コードの実装

Python 呼び出しインターフェイスを介してカットアウトを実装し、背景色を変更する方法をステップバイステップでガイドします。

#1.ライブラリの導入#
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. アクセス トークンの取得

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

コア コード

記事についてご質問がある場合は、プライベート メッセージをお送りください。または、こちら 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. 画像の背景色の塗りつぶし

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. 画像圧縮

#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. 画像サイズ

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

7.png 形式を 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.メイン関数

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.完全なコード

記事についてご質問がある場合は、プライベートメッセージを送るか、こちらに来てください 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(" ")

【重要】使用前の注意事項

1. このプログラムは元のファイルを上書きします。使用する前にデータの損失を避けるためにファイルをバックアップしてください

2. プログラムを処理する写真と同じディレクトリにコピーし、プログラムをダブルクリックします実行する


最終レンダリング

Python 呼び出しインターフェイスを介してカットアウトを実装し、背景色を変更する方法をステップバイステップでガイドします。

元の画像: レンダリング

Python 呼び出しインターフェイスを介してカットアウトを実装し、背景色を変更する方法をステップバイステップでガイドします。##概要

コードは難しくありませんが、途中で小さな問題がたくさんあります。たとえば、画像サイズは 4MB を超えてはならず、写真やパスなどを圧縮する必要があるため、一言で言えば、この機能が実現されました。 Python 呼び出しインターフェイスを介してカットアウトを実装し、背景色を変更する方法をステップバイステップでガイドします。

さて、今日の共有はここで終わります ~

[関連する推奨事項:

Python3 ビデオ チュートリアル

]

以上がPython 呼び出しインターフェイスを介してカットアウトを実装し、背景色を変更する方法をステップバイステップでガイドします。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。