Python调用百度AI接口实现自动抠图与背景替换

江岸
江岸
发布时间:2026-10-16| 8人浏览过
原创

本文详细介绍如何使用Python调用百度AI的人像分割接口,实现证件照等图片的自动抠图与背景色更换。内容涵盖百度AI开放平台的账号注册、应用创建及API Key获取步骤,并提供完整的Python代码示例,包括获取Access Token、图片二进制处理、透明背景填充、格式转换及批量压缩功能,帮助用户快速完成图片处理任务。

前言

大家好,我是小圆。在处理证件照时,经常遇到需要更换背景颜色的需求,而前往照相馆耗时且不便,使用Photoshop进行抠图又对技术要求较高。为此,本文将分享一种利用Python调用AI接口自动抠图并更换图片背景色的方法。

一、注册百度AI账号

创建人像分割应用

访问百度AI开放平台主页,按照指引完成注册、登录及实名认证流程。

在控制台主页导航中找到“人体分析”相关服务入口。

创建应用

在创建应用界面填写相关信息,内容可随意填写。需要注意的是,新用户必须领取免费资源额度,否则无法调用该接口服务。

应用创建完成后,请在应用列表中记录生成的API Key和Secret Key,后续代码中将使用这两个参数进行身份验证。

至此,账号注册与应用创建的全部准备工作即告完成。

二、代码实现

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.获取Access Token

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

3.核心代码

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.完整代码

#人像分割
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利用AI接口实现抠图并改图片底色的文章就介绍到这了,更多相关Python 抠图内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。