基于百度智能云的图像风格转换
如标题所示,你可以看到这是毫无含金量的一篇文章(大佬勿喷)。但鉴于目前未发现相关文章,因此,记录下所做的一些事情,顺便如果能够给别人一些有益的启发,那就非常nice了。话不多说,先上代码。
# encoding:utf-8
'''
Time :2022.2.27
Author:hfutcser
Email :qq123rw@gmail.com
Name :imageTrans.py
'''
import requests
import base64
import urllib
import json
type = eval(input('选择需要转换的图片风格(输入数字1-9进行选择):\n1、卡通画\n2、铅笔画\n3、彩色铅笔画\n4、彩色糖块油画\n5、神奈川冲浪里油画'
'\n6、薰衣草油画\n7、奇异油画\n8、呐喊油画\n9、哥特油画\n'))
option = {1:"cartoon",
2:"pencil",
3:"color_pencil",
4:"warm",
5:"wave",
6:"lavender",
7:"mononoke",
8:"scream",
9:"gothic"
}
s_option = option.get(type,None)
#print(s_option)
def save_base_image(img_str,filename):
img_data = base64.b64decode(img_str)
with open(filename, 'wb') as f:
f.write(img_data)
'''
图像风格转换
'''
def image_trans(filename,trans_filename):
request_url = "https://aip.baidubce.com/rest/2.0/image-process/v1/style_trans"
f = open(filename, 'rb')
img = base64.b64encode(f.read())
params = {"image":img,"option":s_option}
params = urllib.parse.urlencode(params).encode("utf-8")
#获取自己的access_token,详情见百度智能云官网教程
access_token = '【此处填写您自己获取到的access_token】'
request_url = request_url + "?access_token=" + access_token
request = urllib.request.Request(url=request_url, data=params)
request.add_header('Content-Type', 'application/x-www-form-urlencoded')
response = urllib.request.urlopen(request)
content = response.read()
if content:
content = content.decode('utf-8')
data = json.loads(content)
img_str = data['image']
save_base_image(img_str, trans_filename)
trans_filename = 'transXinyiWang_1' + repr(type) + '.png'
image_trans('XinyiWang_1.jpg',trans_filename)
上面代码需要自己修改的地方总共有两处:
- 需要获取到access_token ,这个很简单,教程有许多且不复杂;
- 需要修改最后一行代码的名称信息 。
较为有趣的是,百度智能云提供了包括卡通画在内的九种图像风格的转化,具体实现算法不得而知。虽然已经用于商用,但调用后发现效果并不是很好,可改进的点还算比较多。以后有时间自己用GAN跑一跑应该效果会更好些。
最后,简单看一下效果(女神别打我,纯属学术,侵删。)
原图1:
卡通画:
彩色铅笔画:
哥特油画:
原图2:
卡通画:
彩色铅笔画:
奇异油画:
可以看到API处理的效果差强人意,但依然有进步空间。有问题欢迎私信留言或加我联系方式。