1.如何注册使用百度抠图api
首先要有百度账号,然后打开https://cloud.baidu.com/并登陆,打开 用户中心 然后在左上角选择 产品服务 - 人体分析 。如果没有领取过点击 免费领取资源 ,否则就点击 创建应用 。创建完成后可以得到三个参数: AppID,API Key,Secret Key。
2.在pycharm平台上新建koutu.py项目文件.
首先要安装依赖包:opencv-python,pillow,PyQt5,baidu-aip,requests;然后使用自己的AppID,API Key,Secret Key登陆。运行后效果如图:
3.代码如下:
import os
from cv2 import cv2# pip install opencv-python
import sys
import numpy as np
from PIL import Image# pip install pillow
from PyQt5.QtWidgets import *
from PyQt5 import QtGui, QtWidgets
# 在百度云中申请,每天各接口有 50000 次调用限制.
from aip import AipBodyAnalysis# pip install baidu-aip
import requests
import base64
""" 你的 APPID AK SK """
APP_ID = '25758349' #请使用你自己申请的ID
API_KEY = 'nAtDvM4u0KjG9rGMlVe98yzD' #请使用你自己申请的AK
SECRET_KEY = 'S9Ozy42smN2FAN2LVUm0fnXP5LRGGArE' #请使用你自己申请的SK
client = AipBodyAnalysis(APP_ID, API_KEY, SECRET_KEY)
fileName_choose=""
dir_choose=""
font = QtGui.QFont()
font.setFamily('微软雅黑')
font.setBold(True)
font.setPointSize(13)
font.setWeight(75)
# 获取 access_token,通行证
def get_access_token():
"""
获取 access_token
"""
# 注*意 SK 与 AK
# client_id 为官网获取的AK, client_secret 为官网获取的SK,其实就是API_KEY和SECRET_KEY
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=nAtDvM4u0KjG9rGMlVe98yzD&client_secret=S9Ozy42smN2FAN2LVUm0fnXP5LRGGArE'
response = requests.get(host)
if response:
return response.json()['access_token']
# 人像分割处理部分
def get_foreground(originalImagePath,outputpath):
"""
人像分割
"""
# 二进制方式打开图片文件
f = open(originalImagePath, 'rb')
img = base64.b64encode(f.read())
# 请求 百度 AI 开放平台
request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v1/body_seg?access_token=" + get_access_token()
headers = {'content-type': 'application/x-www-form-urlencoded'}
params = {"image": img}
response = requests.post(request_url, data=params, headers=headers)
# 保存照片
try:
foreground = response.json()['foreground']
img_data = base64.b64decode(foreground)
img_path = outputpath # 保存照片地址和名称,修改处
with open(img_path, 'wb') as f:
f.write(img_data)
except:
pass
def koutu():
# 图片路径
path = dir_choose
# 判断路径是否存在
if os.path.exists(path):
files = os.listdir(path)
for item in files:
get_foreground(path + "/"+item,str(fileName_choose)+"/"+item)
# 批量抠图
print("---- 程序结束 ----")
else:
print("输入的路径不存在!!!")
print("---- 程序结束 ----")
# 图片路径
path = fileName_choose
# 判断路径是否存在
if os.path.exists(path):
files = os.listdir(path)
#imgs = []
for item in files:
#img=cv2.imread(path + "/"+item,-1)
img=cv2.imdecode(np.fromfile(path + "/"+item,dtype=np.uint8),cv2.IMREAD_UNCHANGED)
print(item)
print("完成!!!")
class MainForm(QWidget):
def __init__(self, name = 'MainForm'):
super(MainForm,self).__init__()
self.setWindowTitle(name)
self.cwd = os.getcwd() # 获取当前程序文件位置
self.resize(700,400) # 设置窗体大小
# btn 1
self.btn_chooseDir = QPushButton(self)
self.btn_chooseDir.setObjectName("btn_chooseDir")
self.btn_chooseDir.setText("选择源文件夹")
self.btn_chooseDir.setFont(font)
# btn 2
self.btn_koutu = QPushButton(self)
self.btn_koutu.setObjectName("btn_chooseFile")
self.btn_koutu.setText("开始抠图")
self.btn_koutu.setFont(font)
# btn 4
self.btn_saveFile = QPushButton(self)
self.btn_saveFile.setObjectName("btn_saveFile")
self.btn_saveFile.setText("选择文件保存目录")
self.btn_saveFile.setFont(font)
# 设置布局
layout = QVBoxLayout()
layout.addWidget(self.btn_chooseDir)
layout.addWidget(self.btn_saveFile)
layout.addWidget(self.btn_koutu)
layout_h=QHBoxLayout()
layout.addLayout(layout_h)
self.setLayout(layout)
# 设置信号
self.btn_chooseDir.clicked.connect(self.slot_btn_chooseDir)
self.btn_koutu.clicked.connect(self.slot_btn_koutu)
#self.btn_chooseMutiFile.clicked.connect(self.slot_btn_chooseMutiFile)
self.btn_saveFile.clicked.connect(self.slot_btn_saveFile)
def slot_btn_chooseDir(self):
global dir_choose
dir_choose = QFileDialog.getExistingDirectory(self,
"选取文件夹",
self.cwd) # 起始路径
if dir_choose == "":
print("\n取消选择")
return
print("\n你选择的文件夹为:")
print(dir_choose)
def slot_btn_koutu(self):
try:
koutu()
except Exception as e:
print(e)
def slot_btn_saveFile(self):
global fileName_choose
fileName_choose= QFileDialog.getExistingDirectory(self,
"选取文件夹",
self.cwd) # 输出路径
if fileName_choose == "":
print("\n取消选择")
return
print("\n你选择的文件夹为:")
print(fileName_choose)
if __name__=="__main__":
app = QApplication(sys.argv)
mainForm = MainForm('自动批量抠图神器')
mainForm.show()
sys.exit(app.exec_())