思路
百度接口的申请就不赘述了。
主要用到了百度人体分析api和PIL库,主要实现三个功能:
- 人像背景消除
- 生成证件照,并可随意设置底色
- 证件照图片格式转换
具体方法
- get_portrait():利用百度提供的人体分析模块将人像部分分离出来,以png格式保存备用
- get_background():生成合适大小的底色图,一般为红、蓝、白。
- main():将人像覆盖粘贴在底色图上,得到所需证件照。
- resize():按需调整证件照大小和底色。
- conversion():统一转换为jpg格式并适当压缩。
- 批量操作需要注意的便是命名规则,常用方法是根据时间戳命名,既能保证有序,也能避免重复。
具体实现
python3.8以上
from aip import AipBodyAnalysis
from PIL import Image
import base64
import requests
import os
import time
APP_ID = '****'
API_KEY = '****'
SECRET_KEY = '****'
client = AipBodyAnalysis(APP_ID, API_KEY, SECRET_KEY)
def create_dir(path):
if not os.path.exists(path):
os.mkdir(path)
class Zjz:
def __init__(self):
self.prefix_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/body_seg?access_token="
self.host = f'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={API_KEY}&client_secret={SECRET_KEY}'
self.save_path = r'C:\Users\Administrator\Pictures\Camera Roll'
self.pending_path = r'C:\Users\Administrator\Pictures\Temporary image'
self.access_token = None
self.original_image_path = None
self.response = None
self.foreground = None
self.original_size = None
self.bool_invalid = None
self.images = []
self.image_names = []
self.background_colors = ['white', 'blue', 'red', 'green', 'pink', 'yellow'