算法说明
本接口为将证件照制作流程移植为GPU服务器上所做,相对于之前的证件照制作带缓存 算法接口略有改变,与证件照制作+换装+精修(CPU)相似.
此算法为纯GPU算法,若只是想精修部分使用GPU,请使用此算法证件照制作+换装+精修(CPU)
关于自定义参数的返回,原版本是使用custom_char参数,此版本使用custom_data参数
返回值中原result现改名为result_im_oss_names
关于缓存的说明:
此算法和GPU版本的算法在调用成功后,返回值里都有一个cache_params参数,在后续切换CPU和GPU处理时,可以携带此参数请求算法,这时算法的缓存将能通用.
这里举例一个场景:假设用户先证件照+精修,然后再证件照+精修+换装.
这种情况下,第一次的证件照+精修使用GPU进行处理,大概耗时3秒,然后再将第一次返回的cache_params存储下来,待用户第二次换装时,再携带该参数请求CPU服务器,此时耗时大概也是3秒.
需要注意的是,精修缓存使用的前提是,相同规格,相同精修模板.
算法名称
请求参数
- 红色字体为相对于之前的参数有变化的字段.
- 绿色字体为新增参数
- 划线参数为弃用的参数.
| 参数名称 | 参数类型 | 是否可空 | 参数示例 | 参数说明 |
| —- | —- | —- | —- | —- |
| ossfile | string | 否 | app/1.jpg | 待处理的原图,可以是
leqi-algobucket中的文件名,也可以是华东2区内网环境下可下载的图片url | | process | string | 是 | image/resize,mxxx | 缩放规则 | | spec_info | dict | 是 |json { "facial_data":[1,2,3,4], "size":[295,413], "need_resize":True }| 规格参数,将之前涉及规格的facial_data``img_size``need_resize三个字段整合在一个对象中,原有的三个独立参数废除. | |facial_data|list|是|[1,2,3,4,5]|规格参数,详细说明见说明3, 若此参数为空,则只抠图,不会裁剪证件照和换装此参数新版中包含在spec_info中 | |fair_level|dict|是|{}|美颜级别,详细见说明2, 若不美颜可以全为0或者为None.使用beauty_level
字段替代 | | beauty_level | dict | 是 | {} | 新的美颜级别控制参数,见说明
,此字段fair_level字段二选一,若有此字段,则fair_level字段将不会生效 | |img_size|list|是|[100,100]|结果图的宽高, 若facial_data参数不为空,此参数必须要有此参数新版中包含在spec_info中 | | clothes_keys | list | [‘app/1.png’,’app/1.png’] | 是 | 换装衣服模板的存储路径列表,模板为4通道的png图片,若需要长期存储可上传的模板可以到/clothes路径下,但不建议这样做,应该要将算法和应用层的数据分开,所以这里建议是将服装模板传到app目录下,每次传输前可以先判断该目录下是否已经存在此文件,若不存在才进行上传. | |need_resize|bool|是|True|是否需要按照规格大小进行缩放,若为False则返回与规格宽高比相同的照片, 此参数为False时返回值beauty_intermediate_result字段才有意义_此参数新版中包含在spec_info中 | | save_pack_data | bool | 是 | False | 是否需要换装的中间结果,若为True,则中间结果将在pack_name中打包返回 | | has_full_body_dress_up | bool | 是 | False | 是否为全身换装,若为True,则facial_data参数共6位,其中前四位无意义,第五位为双眼瞳孔间距与结果图宽的比例,第六位为双眼中心点Y坐标与结果图高度的比例 | | collar_coordinates | dict | 是 | {} | 手动衣服模板衣领坐标,详细说明9 | | need_original_background | bool | 是 | False | 是否需要原始背景,当为True,且fair_level全部为0,clothes_keys为空,img_size为空时,返回的透明背景图片可以拆分为带背景的原图,以及其遮罩 | | hat_img | string | 是 | app/hat.png | 帽子模板,为四通道图片 | | hat_params | dict | 是 | None | 帽子的特征点参数,见说明10
,当此字段或者hat_img为空时都不会换帽子 | | need_adjust_lighting | bool | 是 | False | 是否需要做光照处理(2020-08-14新增) | | enhanced_type | string | 是 | NOT_ENHANCED | 图像增强控制参数,有三个:
NOT_ENHANCED(不增强)
ROUGH_CROP_ENHANCEMENT(粗裁剪增强)
RESULT_GRAPH_ENHANCEMENT(结果图增强) | | hor_align_type | int | 是 | 0 | 裁剪方式0中心裁剪(默认)1耳朵裁剪(0803新增) | | deep_beauty | int | 是 | 0 | 深度美颜参数,默认为0,不美颜,当值大于0时,为需要美颜,值的大小暂时不影响美颜程度,具体美颜项目为:瘦脸 皮肤 去模糊 变清晰 调光照肤色 眼神加光 微笑 淡妆 美肤
本参数只有在普通美颜参数全部为0或者为None时才会生效
(2021-09-17新增) | | deep_beauty_template | string | 是 | Woman_red | 精修美颜的模板参数,详细见说明12,默认为Woman_red(2021-11-11新增) | | cache_params | dict | 是 | {} | GPU和CPU服务器算法切换时的缓存信息,此参数通过每次调用算法时的返回值cache_params中获取 | | pose_fix | bool | 是 | False | 是否需要做姿态调整,为True时速度将变慢(220425新增) |
响应参数
{'code': 200,'dress_up_code':2, // 换装成功后的状态码,可以依此进行一些提示,详情见下方说明'algo_cache': True, // 算法是否使用了中间结果的缓存'beauty_version':1001, // 线上美颜算法的版本号'pack_name':'xxx.zip', //换装中间结果数据,若save_pack_data参数没有传,则此参数没用'result_im_oss_names': ['algo/8ac50948-a85c-11e9-be4c-00163e1abbf5_0.jpg'], // 制作结果, 为一张透明背景(4通道),格式为png的图片,图片与clothes_keys一一对应'beauty_intermediate_result':'XXXXXXXX', # 美颜算法的中间结果,在本地美颜时有用"cache_params":{} # 跨平台缓存,一般携带此参数跨GPU或CPU请求算法时将共用缓存.}dress_up_code返回:0 正常换装1 颈部太细或者颈部左右不对称,影响换装效果2 颈部露出皮肤区域太少,影响换装效果
请求示例(sdk 1.13.0+)
# 安装SDK pip install leqi-algorithm-mic-sdk# SDK使用文档 https://www.yuque.com/fenfendeyouzhiqingnian/algorithm/zesnvxfrom algorithm_mic_sdk.algorithms.cutout_and_beauty import CutoutAndBeautyfrom algorithm_mic_sdk.auth import AuthInfofrom algorithm_mic_sdk.tools import FileInfohost = 'http://gateway.algo.leqi.us' # 算法host地址user_name = 'your name'password = 'password'filename = 'src/原图.png' # 需要处理的文件名# 服装列表,值可以是url 二进制数据clothe_names = [FileInfo.for_url('https://testleqi.oss-cn-shanghai.aliyuncs.com/clothes/applet_boy3%403x.png')]# 规格信息spec_info = {'facial_data': [2.49, 1.64, 2.1, 1.64, 0.5, 0.7, 0.5, 0.72, 0.05, 0.25],"size": [295, 413],"need_resize": True}# 美颜参数beauty_level = {'skinsoft': 0, 'reyelarge': 0, 'skinwhite': 5, 'mouthlarge': 5, 'facelift': 5,'leyelarge': 5, 'coseye': 0}file_info = FileInfo.for_file_bytes(open(filename, 'rb').read())auth_info = AuthInfo(host=host, user_name=user_name, password=password)cutout_and_beauty = CutoutAndBeauty(auth_info, file_info,spec_info=spec_info,clothes_keys=clothe_names,deep_beauty=True,deep_beauty_template='Hongxia',beauty_level=beauty_level)resp = cutout_and_beauty.synchronous_request(timeout=30)if resp.code == 200:for result_im_oss_name in resp.json['result']['result_im_oss_names']:print(cutout_and_beauty.get_file_url(result_im_oss_name))print('算法耗时:', resp.algo_server_timing)
压测结果
2021年12月2日

