算法说明

本接口为将证件照制作流程移植为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秒.
需要注意的是,精修缓存使用的前提是,相同规格,相同精修模板.

算法名称

cutout_and_beauty

请求参数

  • 红色字体为相对于之前的参数有变化的字段.
  • 绿色字体为新增参数
  • 划线参数为弃用的参数. | 参数名称 | 参数类型 | 是否可空 | 参数示例 | 参数说明 | | —- | —- | —- | —- | —- | | 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新增) |

响应参数

  1. {
  2. 'code': 200,
  3. 'dress_up_code':2, // 换装成功后的状态码,可以依此进行一些提示,详情见下方说明
  4. 'algo_cache': True, // 算法是否使用了中间结果的缓存
  5. 'beauty_version':1001, // 线上美颜算法的版本号
  6. 'pack_name':'xxx.zip', //换装中间结果数据,若save_pack_data参数没有传,则此参数没用
  7. 'result_im_oss_names': ['algo/8ac50948-a85c-11e9-be4c-00163e1abbf5_0.jpg'], // 制作结果, 为一张透明背景(4通道),格式为png的图片,图片与clothes_keys一一对应
  8. 'beauty_intermediate_result':'XXXXXXXX', # 美颜算法的中间结果,在本地美颜时有用
  9. "cache_params":{} # 跨平台缓存,一般携带此参数跨GPUCPU请求算法时将共用缓存.
  10. }
  11. dress_up_code返回:
  12. 0 正常换装
  13. 1 颈部太细或者颈部左右不对称,影响换装效果
  14. 2 颈部露出皮肤区域太少,影响换装效果

请求示例(sdk 1.13.0+)

  1. # 安装SDK pip install leqi-algorithm-mic-sdk
  2. # SDK使用文档 https://www.yuque.com/fenfendeyouzhiqingnian/algorithm/zesnvx
  3. from algorithm_mic_sdk.algorithms.cutout_and_beauty import CutoutAndBeauty
  4. from algorithm_mic_sdk.auth import AuthInfo
  5. from algorithm_mic_sdk.tools import FileInfo
  6. host = 'http://gateway.algo.leqi.us' # 算法host地址
  7. user_name = 'your name'
  8. password = 'password'
  9. filename = 'src/原图.png' # 需要处理的文件名
  10. # 服装列表,值可以是url 二进制数据
  11. clothe_names = [FileInfo.for_url(
  12. 'https://testleqi.oss-cn-shanghai.aliyuncs.com/clothes/applet_boy3%403x.png')]
  13. # 规格信息
  14. spec_info = {
  15. 'facial_data': [2.49, 1.64, 2.1, 1.64, 0.5, 0.7, 0.5, 0.72, 0.05, 0.25],
  16. "size": [295, 413],
  17. "need_resize": True
  18. }
  19. # 美颜参数
  20. beauty_level = {'skinsoft': 0, 'reyelarge': 0, 'skinwhite': 5, 'mouthlarge': 5, 'facelift': 5,'leyelarge': 5, 'coseye': 0}
  21. file_info = FileInfo.for_file_bytes(open(filename, 'rb').read())
  22. auth_info = AuthInfo(host=host, user_name=user_name, password=password)
  23. cutout_and_beauty = CutoutAndBeauty(auth_info, file_info,
  24. spec_info=spec_info,
  25. clothes_keys=clothe_names,
  26. deep_beauty=True,
  27. deep_beauty_template='Hongxia',
  28. beauty_level=beauty_level
  29. )
  30. resp = cutout_and_beauty.synchronous_request(timeout=30)
  31. if resp.code == 200:
  32. for result_im_oss_name in resp.json['result']['result_im_oss_names']:
  33. print(cutout_and_beauty.get_file_url(result_im_oss_name))
  34. print('算法耗时:', resp.algo_server_timing)

压测结果

2021年12月2日

压测.png