Python 호출 인터페이스를 통해 컷아웃을 구현하고 배경색을 변경하는 방법을 단계별로 안내합니다.

青灯夜游
풀어 주다: 2022-10-21 20:03:59
앞으로
4345명이 탐색했습니다.

Python 호출 인터페이스를 통해 컷아웃을 구현하고 배경색을 변경하는 방법을 단계별로 안내합니다.

때때로 증명사진 배경색을 바꿔야 할 때도 있고, 사진관에 가서 사진을 찍을 시간도 없고, PS로 사진을 오려내기도 쉽지 않아서 오늘은 Python을 사용하여 사진을 자르고 배경색을 변경하는 방법을 공유하세요

1. Baidu AI 계정을 등록하고 인물 분할 애플리케이션 만들기

  • Baidu 인물 분할 홈페이지: 등록, 로그 단계를 따르세요 에 들어가서 인증하세요.

  • 콘솔 홈페이지에서 인체 분석 찾기

Python 호출 인터페이스를 통해 컷아웃을 구현하고 배경색을 변경하는 방법을 단계별로 안내합니다.

애플리케이션 만들기

Python 호출 인터페이스를 통해 컷아웃을 구현하고 배경색을 변경하는 방법을 단계별로 안내합니다.

원하는 대로 작성할 수 있지만 신규 사용자는 무료 리소스를 받아야 합니다. 그렇지 않으면 승리합니다. 사용할 수는 없습니다.

Python 호출 인터페이스를 통해 컷아웃을 구현하고 배경색을 변경하는 방법을 단계별로 안내합니다.

생성 완료 후, 나중에 사용할 API Key와 Secret Key 값을 애플리케이션 목록에 기록해 두세요.

Python 호출 인터페이스를 통해 컷아웃을 구현하고 배경색을 변경하는 방법을 단계별로 안내합니다.

이제 계정 등록 및 애플리케이션 생성 작업이 완료되었습니다.

Python 호출 인터페이스를 통해 컷아웃을 구현하고 배경색을 변경하는 방법을 단계별로 안내합니다.

2: 코드 구현 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 호출 인터페이스를 통해 컷아웃을 구현하고 배경색을 변경하는 방법을 단계별로 안내합니다.
요약

Python 호출 인터페이스를 통해 컷아웃을 구현하고 배경색을 변경하는 방법을 단계별로 안내합니다.코드가 카운트가 안되네요..그 과정에서 자잘한 문제가 많습니다. 예를 들어 이미지 크기가 4MB를 초과할 수 없어서 사진을 압축해야 하고, 경로 등의 문제가 있다는 점은 아주 만족스럽습니다. 이 기능을 구현하려면!

자 오늘 나눔은 여기서 끝~

[관련 추천 :

Python3 영상 튜토리얼

]

위 내용은 Python 호출 인터페이스를 통해 컷아웃을 구현하고 배경색을 변경하는 방법을 단계별로 안내합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:csdn.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿