目录
- 1. 作者介绍
- 2. 万维易源API简介
- 2.1 易源数据
- 2.2 易源API管理
- 2.3 调用参数简介
- 3. 万维易源API调用过程
- 3.1 获取ID和代码
- 3.2 代码实现
- 3.3 完整代码
- 参考(可供参考的链接和引用文献)
1. 作者介绍
吴宇,男,西安工程大学电子信息学院,2022级研究生
研究方向:机器视觉与人工智能
电子邮件:1486263630@qq.com
路治东,男,西安工程大学电子信息学院,2022级研究生,张宏伟人工智能课题组
研究方向:机器视觉与人工智能
电子邮件:x2063079527@qq.com
2. 万维易源API简介
2.1 易源数据
易源数据是一家业内领先且以自营为主的优秀API数据交易平台。目前平台拥有十个大类近500个数据接口,日调用量5000万次,开发者5万名,合作企业3000家。
2.2 易源API管理
把易源平台比喻为自助餐厅在销售易源自己的菜品,这些菜品有自己的管理体系(API管理),很多用户觉得这套管理体系不错,也想把自己做的菜放到易源的自助餐厅来托管,有两个目的:易源餐厅可以对外销售第三方的菜品(服务商上架接口);易源餐厅可以很好地完成对您菜品的质量管理、监控、日志、计费等。
2.3 调用参数简介
1.输入选择
我们可以选择url或者base64作为输入,简介如下图(截至官网):
2.服装选择
Cloths_num参数是修改你需要变换的服装,分为童装、女装、男装,主要修改参数如男装类第一行第一个:m1就行,主要图像如下图所示(截至官网):
3.背景模板
code是背景模板编号。
4.背景颜色
背景颜色选择参考下图(截至官网):
3. 万维易源API调用过程
3.1 获取ID和代码
1.进入官网注册账号
2.搜索“人像特效处理”
3.进入点击购买
4.获取ID和密钥
5.代码获取
获取ShowapiRequest.py代码
这里我们可以选择另存为我们的一个文件夹中,如下图:
获取预览代码(preview.py)复制粘贴即可:
获取下载代码(download.py)复制粘贴即可:
在ShowapiRequest.py文件夹下创建两个复制粘贴的代码,创建后的文件夹py文件如下:
3.2 代码实现
1.安装所需要的库
我们可以新建一个环境
格式:conda create -n your_env_name python=x.x
我们按照要求输入指令:conda create -n AIwork python=3.6.5
(这里我们的环境名可以根据个人要求改变 your_env_name→你想要创建的环境名称)
装好环境后,我们激活环境
conda activate AIwork
(要和上面你所创建的环境名一致,大小写都要一致,否则无法识别)
接下来我们装requests包
pip install requests
如果安装不成功,我们可以选择华清源镜像
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
如果还是不行 检查是否科学上网,或者网络是否连接上。
2.修改参数并运行
需要修改的参数如下图箭头标识:
我们不用修改我们的ShowapiRequest.py 它相当于我们后面两个函数调用的函数。
这是preview.py文件
我们首先修改preview.py文件代码,将我们的ID和appsecret更换,然后选择是base64还是url进行输入(个人选择url),然后我们选择我们需要的背景颜色,我们需要转换的证件照样式,code可以不修改,想修改的同学可以到官网了解了解。我这里没有修改code,运行结果如下:
看见后面输出有个order数字串,我们复制数字串。(前面链接大家感兴趣可以复制到网站打开,是一个带水印的换装后的图片,我们的download.py文件就是去掉这个水印)
下图就是download.py文件:
我们按照箭头修改自己的id和密钥,然后将preview.py运行后,我们刚刚复制的哪个数字串输入到箭头所指的“order”后面。
输出的结果是一个链接,大家复制链接进入网站打开下载就行啦。
3.Url获取
这里我尝试了两种url获取情况:一是qq空间获取,二是网站上直接复制图片网址。均失败了。可能是个人原因,大伙也可以试试。失败返回信息如下:
这是情况1:
这是情况2:
无果后我找到一个转换url的网站:https://zixiaoyun.com/
亲测有效
4.实验结果
我做了两组对比实验,检测这个api调用情况。如下图所示,我用了自己正装和非正装的图片进行测试。测试结果如下:效果其实差不多,就是图片太小了,分辨率太低了。
后面我选了一张日常生活拍的照片,这张照片是我考研时拍的学信网上的照片,我先把其裁成了和证件照差不多的size,然后转码输入,输出结果如下图第一行所示,接下来我直接将拍的这张图片转码输入,的得到的结果和截图的结果相差甚微。
稍微总结一下:万维易源调用api进行换装相当便捷,我们可以使用平时非正装的图片在不进行裁剪的情况下进行换装,缺点还是有点,就是过程比较复杂,要经历两个步骤,最开始输出的图片是有码的,后面还要根据第一次输出的码进行去水印操作,并且输出的图片大小越来越小,分辨率太低。
3.3 完整代码
ShowapiRequest.py
import requests
from urllib import parse
#全局请求头
files = {}
headers = {}
body = {}
timeouts = {}
resHeader = {}
class ShowapiRequest:
def __init__(self, url, my_appId, my_appSecret):
self.url = url
self.my_appId = my_appId
self.my_appSecret = my_appSecret
body["showapi_appid"] = my_appId
body["showapi_sign"] = my_appSecret
headers["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2427.7 Safari/537.36"
def addFilePara(self, key, value_url):
files[key] = open(r"%s" % (value_url), 'rb')
return self
def addHeadPara(self, key, value):
headers[key] = value
return self
def addBodyPara(self, key, value):
body[key] = value
return self
#设置连接时间和读取时间
def setTimeout(self, connecttimout, readtimeout):
timeouts["connecttimout"] = connecttimout
timeouts["readtimeout"] = readtimeout
return self
def get(self):
get_url = self.url + "?" + parse.urlencode(body)
if not timeouts:
res = requests.get(get_url, headers=headers)
else:
timeout = (timeouts["connecttimout"], timeouts["readtimeout"])
res = requests.get(get_url, headers=headers, timeout=timeouts)
return res
def post(self):
if not timeouts:
res = requests.post(self.url, files=files, data=body, headers=headers)
else:
timeout = (timeouts["connecttimout"], timeouts["readtimeout"])
res = requests.post(self.url, files=files, data=body, headers=headers, timeout=timeout)
return res
preview.py
# python3.6.5
# 需要引入requests包 :运行终端->进入python/Scripts ->输入:pip install requests
from ShowapiRequest import ShowapiRequest
r = ShowapiRequest("http://route.showapi.com/2673-19"," id","密钥" )
r.addBodyPara("img_base64","")
r.addBodyPara("img_url","链接")
r.addBodyPara("color","white")
r.addBodyPara("clothes_num","m5")
r.addBodyPara("code","1350")
res = r.post()
print(res.text) # 返回信息
download.py
# python3.6.5
# 需要引入requests包 :运行终端->进入python/Scripts ->输入:pip install requests
from ShowapiRequest import ShowapiRequest
r = ShowapiRequest("http://route.showapi.com/2673-20","ID","密钥" )
r.addBodyPara("order","preview.py运行后生成的一串数字")
res = r.post()
print(res.text) # 返回信息
参考(可供参考的链接和引用文献)
1.https://zhuanlan.zhihu.com/p/96897514
2.https://zixiaoyun.com/