normal
    
文档提供方 时间 版本 描述
深圳市宜远智能科技有限公司 2018-09-30 1.0 初始版本
深圳市宜远智能科技有限公司 2018-12-19 1.2 新增痘印,黑头;优化了脸部识别
深圳市宜远智能科技有限公司 2018-12-27 1.2.6 增加调用示例
深圳市宜远智能科技有限公司 2019-01-04 1.3.1 增加黑眼圈
深圳市宜远智能科技有限公司 2019-01-18 1.3.2 增加女性属性
深圳市宜远智能科技有限公司 2019-01-23 1.4 增加精准推荐服务
深圳市宜远智能科技有限公司 2019-01-26 1.4.1 增加颜值服务
深圳市宜远智能科技有限公司 2019-02-21 1.5.0 增加人脸特征向量服务;皱纹,水份,肤质新增属性
深圳市宜远智能科技有限公司 2019-03-06 1.6.0 增加脸型、嘴巴、下巴、眼睛、眉毛、鼻子、额头、发际线、表情服务
深圳市宜远智能科技有限公司 2019-03-18 1.6.1 增加图片质量检测服务
深圳市宜远智能科技有限公司 2019-03-19 1.6.2 增加情绪检测服务
深圳市宜远智能科技有限公司 2019-03-20 1.6.3 增加人脸检测服务
深圳市宜远智能科技有限公司 2019-06-29 1.7 增加v2版本(更新年龄、斑点、毛孔、肤质、痤疮、粗糙度、皱纹、黑头、痘痘、黑眼圈等服务)
深圳市宜远智能科技有限公司 2019-07-04 1.7.1 v2版本黑头、毛孔增加区域占比信息;v2版本斑点添加雀斑、黄褐斑描述
深圳市宜远智能科技有限公司 2019-11-01 1.8 新增放大镜图片检测接口(毛孔,肤质,粗糙度,肤色,黑头,敏感肌肤,色素沉着,弹性,角质层检测项)
深圳市宜远智能科技有限公司 2019-11-12 1.8.1 新增放大镜头皮检测接口(头发粗细程度,头发密度,头发毛囊状态,脱发状态,头皮状态,头皮角质,头皮红血丝检测项)
深圳市宜远智能科技有限公司 2020-03-07 1.8.2 新增击败人数接口
深圳市宜远智能科技有限公司 2020-07-31 1.8.3 新增红区检测
深圳市宜远智能科技有限公司 2021-01-12 1.9.0 新增眉毛、眼睛、鼻子、嘴巴、下巴,三庭五眼的测算属性
深圳市宜远智能科技有限公司 2021-03-05 1.9.1 新增鼻子、嘴巴、下巴的测算属性

调用流程

客户端(APP/浏览器) -> http(s) -> 公网 -> 服务端(API服务,Header携带Authorization)

调用入口

API服务地址: https://api.yimei.ai
*******************************注意**********************************
所有响应的 filename 字段为对应测试类型的结果图片,通过HTTP GET的形式访问。
请求示例: https://api.yimei.ai/fileSvr/get/${filename}
所有图片服务器只保留3个月,不做永久存储!!

公共参数说明

字段 类型 是否必传 说明
Authorization String 应用ID和密钥进行Basic Authorization授权验证。调用使用的账户需要向平台申请
X-sId String 终端唯一标识
X-tId String trace标识, 建议格式为时间(MMddHHmm,时区为GMT+8)+序列(秒内递增,秒间置0),例如:010112001。API服务端允许客户端请求最大时间误差为10分钟。

HTTP状态码

http响应head属性"Content-Type"的取值通常为 application/json或text/plain等

http状态 说明
200 成功
400 请求的参数不正确、不合法
401 未通过认证授权
403 拒绝访问(服务没有购买或余额不足)
405 http method验证不通过或服务已经下线
406 无法完成请求处理,如识别不了人脸等
413 上传文件超限或请求内容过大
415 请求的内容无法解析,如请求时contentType=application/json但用JSON解析时出错
416 contentType验证不通过,通常为请求范围不符合接口要求
500 异常,可能原因是图片错误,或者其他
502 无响应
503 负载过高

错误码

http响应head属性"Content-Type"的值为 application/json时,响应body涉及编码对照表如下:

code值 说明
0 成功
10001 鉴权失败
10002 用户或密码错误
11001 参数错误
10004 服务未授权(没有购买对应的服务)
10006 服务余额不足
21001 框脸失败
21003 图片质量不符合要求

注意事项

* 所有的请求和响应数据编码皆为utf-8格式,URL里的所有参数名和参数值请做URL编码
* 服务输出的必填字段以只增不减为原则,客户端需做好对增加字段的适配或容错处理
* 请求或上传的面部照片大小限制在5M以内,上传的面部照片以“正面全脸刘海不遮挡额头去掉眼镜”为佳

脸部AI分析接口 - (需要授权)

简介

脸部AI分析接口调用前,应用ID和密钥进行Basic Authorization授权验证。
脸部AI分析接口调用的流程:调用Detect接口,上传图片的同时,带上detect_types,进行脸部多个项目的AI分析。
v2是v1的升级版本,相比老版本v1,v2版本具有检测项更详细,访问速度更快等优点。切换版本时需要注意v2版本的请求地址以及接口返回参数与老版本不同,详见检测项目响应报文参照表
*******************************注意**********************************
所有响应的 filename 字段为对应测试类型的结果图片,通过HTTP GET的形式访问。
请求示例: https://api.yimei.ai/fileSvr/get/${filename}
所有图片服务器只保留3个月,不做永久存储!!

v2版本
    请求地址:/v2/api/face/analysis/${detect_types}

一、调用详解

HTTP请求内容

POST /v2/api/face/analysis/${detect_types} HTTP/1.1
Host: api.yimei.ai
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Authorization: Basic 经base64编码后的应用ID和密钥

image=https://www.test.cn/test.jpg

字段 类型 是否必传 说明
image file或string 图片字段,当Content-Type值为application/x-www-form-urlencoded时,则该值取值url地址;否则参考HTTP协议之multipart/form-data,文件KEY固定为image
detect_types int 要进行检测的项目,可以是多个检测项目的detect_type的和(按位或的值);例如:单独调用肌肤年龄测试的时候,detect_types值为1,即相应的请求则为:https://api.yimei.ai/v2/api/face/analysis/1; 同时调用肌肤年龄、斑点、肤质三个测试项目时,detect_types值为:1+2+8=11,即相应的请求则为:https://api.yimei.ai/v2/api/face/analysis/11; 具体数值代表的含义,请参照第二节
result_type int 结果类型 0-效果图 1-坐标 2-效果图和坐标 默认0

成功返回

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Cache-Control: no-cache

{
    "code": 0,
    "error_detect_types": 0,
    "filename": "f11b08a0a0d9aa257a6e13da7a519890-5742142.jpg",
    "detect_types": "17179869183",
    "region": {
        "chin": [],
        "forehead": [],
        "left_cheek": [],
        "right_cheek": []
    },
    "features": {
        "5_o_clock_shadow": "0.00000",
        "arched_eyebrows": "0.00000",
        "attractive": "0.00004",
        "bags_under_eyes": "0.02085",
        "bald": "0.00000",
        "bangs": "0.00000",
        "big_lips": "0.00000",
        "big_nose": "0.00000",
        "black_hair": "0.00000",
        "blond_hair": "0.00004",
        "blurry": "0.00000",
        "brown_hair": "0.00115",
        "bushy_eyebrows": "0.00000",
        "chubby": "0.14066",
        "double_chin": "0.00022",
        "eyeglasses": "0.00000",
        "goatee": "0.00000",
        "gray_hair": "0.00000",
        "heavy_makeup": "0.00179",
        "high_cheekbones": "0.97011",
        "male": "0.00000",
        "mouth_slightly_open": "0.00000",
        "mustache": "0.00000",
        "narrow_eyes": "0.00000",
        "no_beard": "0.00000",
        "oval_face": "0.00000",
        "pale_skin": "0.00000",
        "pointy_nose": "0.00000",
        "receding_hairline": "0.00000",
        "rosy_cheeks": "0.00000",
        "sideburns": "0.00000",
        "smiling": "0.00000",
        "straight_hair": "0.00000",
        "wavy_hair": "0.00029",
        "wearing_earrings": "0.00000",
        "wearing_hat": "0.00000",
        "wearing_lipstick": "0.00024",
        "wearing_necklace": "0.00000",
        "wearing_necktie": "0.00000",
        "young": "0.00000",
        "female": "0.99799"
    },
    "detect_type": 131072,
    "recognition": {
        "result": []
    },
    "image_detect": [],
    "age": {
        "result": 24
    },
    "face_shape": {
        "shape": "yuan_character",
        "score": "66",
        "face_height": 259.18,
        "tempus_width": 151.14,
        "zygoma_width": 180.27,
        "mandible_width": 157.21,
        "mandible_angle": 127.53
    },
    "chin_shape": {
        "chin_type": [
            "little_flat_chin"
        ],
        "chin_form": [
            "normal_length"
        ],
        "score": "71",
        "chin_height": 49.16,
        "chin_width": 133.53,
        "chin_angle": 148.88
    },
    "face_ratio": {
        "atriums_radio": [
            0.29,
            0.33,
            0.38
        ],
        "eyes_radio": [
            0.15,
            0.16,
            0.27,
            0.15,
            0.26
        ],
        "filename_eyes": "bf3855fcaa30fe8c9cf4beff4a1106-401307777219166208.jpg",
        "filename_atriums": "472068da13529df126570c9ddb93f8-401307777160445952.jpg",
        "eyes_widths": [
            27.31,
            29.13,
            48.56,
            27.92,
            47.34
        ],
        "atriums_widths": [
            68.59,
            77.09,
            89.83
        ],
        "golden_triangle": 75.32
    },
    "eye_shape": {
        "eye_type": [
            "small"
        ],
        "eye_form": [
            "normal_eye_gap"
        ],
        "score": "69",
        "angulus_oculi_medialis": 44.64,
        "eye_height": 8.5,
        "eye_width": 33.99
    },
    "lip_shape": {
        "mouth_type": [
            "little_big"
        ],
        "lip_type": [
            "top_thin"
        ],
        "uv_type": "u",
        "score": "90",
        "lip_thickness": 9.1,
        "mouth_height": 21.24,
        "mouth_width": 59.48,
        "angulus_oris": 95.64
    },
    "emotion": {
        "result": "neutral"
    },
    "acne": {
        "level": "lightly",
        "count": 3,
        "filename": "39716a95cbf6be47afe7492cb0a3a35c-5742331.jpg"
    },
    "pockmark": {
        "category": [
            {
                "cls": "CC_DD",
                "count": 0,
                "score": 100
            },
            {
                "cls": "CC_DY",
                "count": 2,
                "score": 80
            }
        ],
        "count": 2,
        "score": 95,
        "filename": "7ec0d35b92610092c78094691975ba74-5742246.jpg"
    },
    "face_detect": {
        "rects": [
            {
                "x0": 143,
                "y0": 118,
                "x1": 781,
                "y1": 923
            }
        ]
    },
    "forehead": {
        "type": [
            "mShape"
        ],
        "result": "0.918899"
    },
    "spot": {
        "count": 11,
        "score": 89,
        "category": [
            {
                "cls": "B_QTB",
                "count": 8,
                "score": 84,
                "level": "lightly"
            },
            {
                "cls": "Z_Z",
                "count": 3,
                "score": 92,
                "level": "lightly"
            }
        ],
        "filename": "3a879831d4361f18629a12c305c23ff2-5742247.jpg"
    },
    "color": {
        "result": "xiaomai"
    },
    "hairline": {
        "type": [
            "untidy"
        ],
        "result": "0.766296"
    },
    "wrinkle": {
        "count": 9,
        "score": 73,
        "category": [
            {
                "count": 5,
                "level": "lightly",
                "score": 75,
                "cls": "forehead"
            },
            {
                "count": 2,
                "level": "lightly",
                "score": 90,
                "cls": "eyecorner"
            },
            {
                "count": 0,
                "level": "none",
                "score": 100,
                "cls": "crowfeet"
            },
            {
                "count": 0,
                "level": "none",
                "score": 100,
                "cls": "glabella"
            },
            {
                "count": 2,
                "level": "lightly",
                "score": 0,
                "cls": "nasolabial"
            }
        ],
        "level": "severe",
        "filename": "8fac17baaa1a16c052cf23ddbbd2b296-5742332.jpg"
    },
    "expression": {
        "result": [
            {
                "intensity": 3.44,
                "type": "AU01"
            },
            {
                "intensity": 2.12,
                "type": "AU02"
            },
            {
                "intensity": 1.55,
                "type": "AU12"
            },
            {
                "intensity": 2.56,
                "type": "AU14"
            },
            {
                "intensity": 1.8,
                "type": "AU25"
            }
        ]
    },
    "appearance": {
        "score": 72
    },
    "aging_simu": {
        "filename": "1f24b5b420ccd128d3e9a6ea16617f54-5742249.jpg"
    },
    "blackhead": {
        "count": 7,
        "level": "lightly",
        "score": "93",
        "area": 0.030833959579467773,
        "filename": "5295cc699bc9571843a25deff7830cce-5742248.jpg"
    },
    "moisture": {
        "filename": "945374c49dbc04af15ba8a061e415074-5742143.jpg",
        "result": "0.268",
        "score": "82",
        "class": [
            {
                "result": 0.192,
                "class": "left_cheek"
            },
            {
                "result": 0.241,
                "class": "right_cheek"
            },
            {
                "result": 0.404,
                "class": "forehead"
            },
            {
                "result": 0,
                "class": "chin"
            }
        ]
    },
    "uv_spot": {
        "filename": "9fcec297fdcfec303ab64cec938cb003-5742333.jpg",
        "count": 0
    },
    "texture": {
        "filename": "d30c0ad52b8e8f712097423a4318a629-5742144.jpg",
        "score": 92
    },
    "red_area": {
        "filename": "8552ceec3cd7533b819e82f9375cff61-5742251.jpg"
    },
    "pore": {
        "count": 68,
        "level": "lightly",
        "score": "78",
        "area": 0.1602214276790619,
        "filename": "a232a126dc8d0340714833a062c56e86-5742250.jpg"
    },
    "brow_shape": {
        "eyebrow_type": [
            "sparse"
        ],
        "eyebrow_form": [
            "dashing"
        ],
        "eyeins_form": [
            "wider_eyebrow_gap"
        ],
        "eyebrowlen_form": [
            "short_eyebrow"
        ],
        "brow_height": 14.93,
        "camber_angle": 2,
        "uptrend_angle": 7.59,
        "brow_width": 61.86,
        "brow_thick": 2.14
    },
    "nose_shape": {
        "nose_type": [
            "flat"
        ],
        "result": "0.630761",
        "nose_width": 43.84
    },
    "dark_circle": {
        "type": "HHX",
        "level": "moderately",
        "score": 82,
        "filename": "5116551b2c0a6d522c94e783b3f5d15a-5742252.jpg"
    },
    "skin_type": {
        "category": [
            {
                "cls": "forehead",
                "type": "oil",
                "level": "lightly",
                "score": 67
            },
            {
                "cls": "nose",
                "type": "mid",
                "level": "moderately",
                "score": 50
            },
            {
                "cls": "left_cheek",
                "type": "mid",
                "level": "moderately",
                "score": 50
            },
            {
                "cls": "right_cheek",
                "type": "mid",
                "level": "moderately",
                "score": 50
            },
            {
                "cls": "chin",
                "type": "mid",
                "level": "moderately",
                "score": 50
            }
        ],
        "type": "mid_oil"
    },
    "chloasma": {
        "filename": "6284224afec986e471a1409b3d843424-5742145.jpg",
        "count": 8,
        "score": 81
    },
    "disease": {
        "filename": "493df9abba0342bf2646307160ec50c7-5742146.jpg",
        "niduses": [
            {
                "boxes": [
                    {
                        "coord": [
                            647,
                            559,
                            749,
                            729
                        ],
                        "scores": 0.5221490859985352
                    },
                    {
                        "coord": [
                            190,
                            534,
                            330,
                            710
                        ],
                        "scores": 0.48930951952934265
                    }
                ],
                "class": "CC"
            },
            {
                "boxes": [],
                "class": "MGJF"
            },
            {
                "boxes": [],
                "class": "PY"
            }
        ],
        "result": "CC"
    },
    "roughness": {
        "score": 72
    },
    "face_box": {
        "x0": 101,
        "y0": 71,
        "x1": 783,
        "y1": 975
    },
    "id": "fcb1886369b46510c5eae63609b5fab6"
}
字段 类型 是否必传 说明
code int 指示请求是否被正确处理;具体数值代表的含义,请参照公共编码
filename string 原图
id string 消息标识
* object 不同detect_type返回的结果数据结构不一样;具体响应数据结构,请参照第三节

返回错误

HTTP/1.1 400 OK
Content-Type: application/json; charset=utf-8
Cache-Control: no-cache

{
  "code":20000,
  "msg":"错误"
}
字段 类型 是否必传 说明
code int 指示请求是否被正确处理;具体数值代表的含义,请参照公共编码
msg string 当请求未正确处理时,返回的错误信息;处理成功时,msg字段不返回。

二、detect_types 参照表

字段 检测项目
age 1 肌肤年龄
spot 2 斑点
pore 4 毛孔
skin_type 8 肤质
acne 16 痤疮
features 32 脸部特征属性
chloasma 64 棕色斑
roughness 128 粗糙度
color 256 肤色
disease 512 皮肤病
texture 1024 纹理
uv_spot 2048 紫外斑
moisture 4096 水分
wrinkle 8192 皱纹
region 16384 脸部关键点切割区域
blackhead 32768 黑头
pockmark 65536 痘痘
dark_circle 131072 黑眼圈
appearance 262144 颜值
recognition 524288 人脸特征向量
face_shape 1048576 脸型
lip_shape 2097152 嘴巴
chin_shape 4194304 下巴
eye_shape 8388608 眼睛
brow_shape 16777216 眉毛
nose_shape 33554432 鼻子
forehead 67108864 额头
hairline 134217728 发际线
expression 268435456 表情
image_detect 536870912 图片质量检查
emotion 1073741824 脸部情绪
face_detect 2147483648 人脸检测
red_area 4294967296 红区检测
sensitive 17179869184 敏感度
face_ratio 34359738368 三庭五眼
defeat_rank 137438953472 击败人数
注:多个检测项目同时调用场景:可以上述detect_types的相加(按位或的值);
例如:
1、单独调用肌肤年龄检测项场景,detect_types值为1,
即相应的请求则为:https://api.yimei.ai/v2/api/face/analysis/1

2、同时调用肌肤年龄、斑点、肤质三个检测项场景,detect_types值为:1+2+8=11,
即相应的请求则为:https://api.yimei.ai/v2/api/face/analysis/11

三、检测项目响应报文参照表

*******************************注意**********************************
所有响应的 filename 字段为对应测试类型的结果图片,通过HTTP GET的形式访问。
请求示例: https://api.yimei.ai/fileSvr/get/${filename}
所有图片服务器只保留3个月,不做永久存储!!

1、肌肤年龄(age)

字段 类型 是否必传 说明
result int 肌肤年龄

2、斑点(spot)

字段 类型 是否必传 版本 说明
filename string 测试结果文件名
count int 斑点数量
score int 斑点分数
level string v2 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);
category array v2 斑点分类(v2由rectangles更改成category)

斑点分类(category)

字段 类型 是否必传 版本 说明
cls string v2 斑点分类:

B_QTB(#18FFFF)(斑_其他斑);Z_Z(#4740A5)(痣);B_QB(#FFE57F)(斑_雀斑);B_HHB(#40FF81)(斑_黄褐斑);

score int v2 分数
rects array v2 斑点坐标点
count int v2 数量
level string v2 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);

3、毛孔(pore)

字段 类型 是否必传 版本 说明
filename string 测试结果文件名
count int 毛孔数量
score int 毛孔分数
area float v2 毛孔区域占比
level string v1 毛孔严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);
points array v2 毛孔粗大坐标点
regions array v2 轮廓坐标
category object v2 毛孔区域分类

毛孔区域分类(category)

字段 类型 是否必传 版本 说明
cls string v2 区域分类:

forehead(额头);left_check(左脸颊);right_check(右脸颊);

score int v2 分数
count int v2 数量
level string v2 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);

4、肤质(skin_type)

v2版本输出
本服务依赖毛孔,黑头
字段 类型 是否必传 说明
type string 肤质类型:mix(混合性);oil(油性);dry(干性);mid(中性);mid_oil(中性偏油);mid_dry(中性偏干);
score int 出油程度(数值越高越油,数值越低越干)
level_score int 程度分数(分数越高越好)
category array 油性脸部区分类
油性脸部区分类(category)
字段 类型 是否必传 说明
cls string 脸部区域类型:

forehead(额头);chin(下巴);left_cheek(左脸颊);right_cheek:(右脸颊);nose(鼻梁);

type string 肤质类型:mid(中性);dry(干性);oil:(油性);
score int 分数程度 0~40:干性;40~60:中性;60~100:油性
level string 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);
v1版本输出
注意:以下字段数值为概率,值范围:0 至 1 取最大值识别油干性。
字段 类型 是否必传 说明
oily string 油性面积占检测区域的比例
dry string 干性面积占检测区域的比例
mixed string 混合性的面积占检测区域的比例
filename string 测试结果文件名
class array 油性脸部区域占比分类
脸部区域分类(class)
字段 类型 是否必传 说明
result float 油性区域面积占该脸部区域的面积比例
class string 脸部区域类型:

forehead(额头);chin(下巴);left_cheek(左脸颊);right_cheek:(右脸颊);

5、痤疮(acne)

字段 类型 是否必传 版本 说明
filename string 测试结果文件名
count int 痤疮数量
level string v2 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);

6、脸部特征(features)

注意:以下字段数值为概率,值范围:0 至 1。
字段 类型 是否必传 说明
5_o_clock_shadow string 胡渣
arched_eyebrows string 柳叶眉
attractive string 有魅力
bags_under_eyes string 眼袋
bald string 秃顶
bangs string 刘海
big_lips string 大嘴唇
big_nose string 大鼻子
black_hair string 黑色的头发
blond_hair string 金色的头发
blurry string 睡眼惺松
brown_hair string 棕色的头发
bushy_eyebrows string 浓密的眉毛
chubby string 圆胖
double_chin string 双下巴
eyeglasses string 眼镜
goatee string 山羊胡子
gray_hair string 灰色的头发
heavy_makeup string 浓妆
high_cheekbones string 颧骨
male string 男性
female string 女性
mouth_slightly_open string 半张着嘴
mustache string 胡子
narrow_eyes string 小眼睛
no_beard string 没有胡子
oval_face string 瓜子脸
pale_skin string 白皮肤
pointy_nose string 尖鼻子
receding_hairline string 发际线后移
rosy_cheeks string 红润的双颊
sideburns string 连鬓胡子
smiling string 微笑
straight_hair string 直发
wavy_hair string 卷发
wearing_earrings string 戴着耳环
wearing_hat string 带着帽子
wearing_lipstick string 擦口红
wearing_necklace string 戴着项链
wearing_necktie string 戴着领带
young string 年轻

7、棕色斑(chloasma)

字段 类型 是否必传 说明
filename string 测试结果文件名
count int 棕色斑数量
score int 棕色斑分数

8、粗糙度(roughness)

v2版本依赖皱纹,毛孔,黑头,痘痘,痤疮
字段 类型 是否必传 版本 说明
filename string v1 测试结果文件名
score int 分数
level string 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);

9、肤色(color)

字段 类型 是否必传 说明
result string 肤色结果枚举: toubai(透白)色值:#f9e5d9、 baixi(白皙)色值:#f2d5c3、 ziran(自然)色值:#efc2a7、 xiaomai(小麦)色值:#c19b88、 anchen(暗沉)色值:#99715f、 youhei(黝黑)色值:#684a42

10、皮肤病(disease)

字段 类型 是否必传 说明
filename string 测试结果文件名 标注颜色说明: 痤疮:#FF6464 皮炎:#6464FF 敏感肌肤:#64FF64
result string 皮肤病类型:NONE(健康)、CC(痤疮)、PY(皮炎)、MGJF(敏感肌肤)

11、纹理(texture)

字段 类型 是否必传 说明
filename string 测试结果文件名
score int 纹理分数

12、紫外斑(uv_spot)

字段 类型 是否必传 说明
filename string 测试结果文件名
count int 紫外斑数量

13、水分(moisture)

字段 类型 是否必传 说明
filename string 测试结果文件名
result string 含水分区域(蓝色)面积占总检查区域的面积比例
score int 水分分数
class int 脸部区域分类
level string 毛孔严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);
脸部区域分类(class)
字段 类型 是否必传 说明
result float 水分区域(蓝色)面积占该脸部区域的面积比例
class string 脸部区域类型:

forehead(额头);chin(下巴);left_cheek(左脸颊);right_cheek:(右脸颊);

14、皱纹(wrinkle)

字段 类型 是否必传 版本 说明
filename string 测试结果文件名
count int 皱纹数量
level string v2 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);
score int 分数
category array v2 分类 (v2由class更改成category) 新增分类坐标,严重程度,分数
分类(category)
字段 类型 是否必传 版本 说明
count int 数量
score int v2 分数
points array v2 坐标点集合
level string v2 皱纹严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);
cls string 皱纹类型:

glabella(#FFD740)(眉间纹);crowfeet(#FF6E40)(鱼尾纹);nasolabial(#6E84FF)(法令纹);eyecorner(#64FFDA):(眼角纹);forehead(#FF5252)(抬头纹)

15、脸部切割区域坐标点(region)

字段 类型 是否必传 说明
chin array 下巴区域坐标点集合;格式:[[x,y],...,[x,y]]
forehead array T型区域坐标点;格式:[[x,y],...,[x,y]]
left_cheek array 左脸区域坐标点;格式:[[x,y],...,[x,y]]
right_cheek array 右脸区域坐标点;格式:[[x,y],...,[x,y]]

16、黑头(blackhead)

字段 类型 是否必传 版本 说明
filename string 测试结果文件名
count int 黑头数量
score int 黑头分数
area float 黑头区域占比
level string v2 黑头严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);
points array v2 黑头坐标值
regions array v2 轮廓坐标

17、痘痘(pockmark)

字段 类型 是否必传 版本 说明
filename string 测试结果文件名
count int 数量
score int 分数
level string v2 黑头严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);
category array v2 分类

分类(category)

字段 类型 是否必传 版本 说明
cls string v2 痘痘类型:

CC_DD(#E040FB)(痘痘);CC_DY(#7C4DFF)(痘印)

count int v2 数量
score int v2 分数

18、黑眼圈(dark_circle)

字段 类型 是否必传 版本 说明
filename string 测试结果文件名
type string v2 黑圆圈类型:NONE(非黑眼圈);HHX(混合型);SSX(色素型);XGX(血管型);YYX(阴影型);
level string v2 黑眼圈严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);
score int v2 黑眼圈分数
result float v1 黑眼圈严重程度
points float v2 黑眼圈坐标
three_types object v2 黑眼圈3分类
3分类分类(three_types)
字段 类型 是否必传 版本 说明
level int v2 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);
score int v2 分数

19、颜值(appearance)

字段 类型 是否必传 说明
score int 颜值分数

20、人脸特征向量(recognition)

字段 类型 是否必传 说明
result array 人脸特征向量

21、脸型(face_shape)

字段 类型 是否必传 说明
shape string 脸型枚举: tian_character(田字脸/方形脸); yuan_character(圆字脸/圆形脸); tong_character(同字脸/国字脸); shen_character(申字脸/鹅蛋脸); you_character(由字脸/椭圆脸); jia_character(甲字脸/瓜子脸); mu_character(目字脸/长形脸); wang_character(王字脸/菱形脸); feng_character(风字脸/梨形脸); yong_character(用字脸/不对称形脸)
score int 脸型分数
face_height float 脸部长度(单位:mm)
tempus_width float 颞部宽度(单位:mm)
zygoma_width float 颞部宽度(单位:mm)
mandible_width float 下颌角宽度(单位:mm)
mandible_angle float 下颌角角度(单位:°)
temple_sunken int 太阳凹陷(1:有 0:无)
cheek_sunken int 面颊凹陷(1:有 0:无)
zygoma_result int 颧弓突出(1:有 0:无)

22、嘴巴(lip_shape)

字段 类型 是否必传 说明
mouth_type array 嘴巴大小枚举: big(大嘴型); small(小嘴型); normal(正常嘴型); little_big(略微大嘴型); little_small(略微小嘴型)
lip_type array 唇型枚举: top_thin(上唇薄); bottom_thin(下唇薄); full(双唇丰满); thin(双唇薄); little_thin(上层略薄)
uv_type string 嘴巴枚举:u(u型);v(v型)
score int 嘴巴分数
lip_thickness float 嘴唇厚度:(上唇厚度+下唇厚度)/2
mouth_height float 嘴唇高度(单位:mm)
mouth_width float 嘴唇宽度(单位:mm)
angulus_oris float 嘴角弯曲度(单位:°)

23、下巴(chin_shape)

字段 类型 是否必传 说明
chin_type array 下巴形状枚举: sharp_chin(尖下巴); flat_chin(圆宽下巴); normal_chin(普通下巴); little_flat_chin(下巴略圆宽)
chin_form array 下巴长度枚举: long(下巴略长); short(下巴略短); normal_length(下巴长短适宜)
score int 下巴分数
chin_height float 下巴长度(单位:mm)
chin_width float 下巴宽度(单位:mm)
chin_angle float 下巴角度(单位:°)

24、眼睛(eye_shape)

字段 类型 是否必传 说明
eye_shape array 眼睛形状枚举: upper(上挑眼); downer(下挑眼); round(圆眼); extreme_small(眯眯眼); big(大眼); small(小眼)
eye_form array 眼间距枚举: wider_eye_gap(两眼间隔过宽); narrow_eye_gap(两眼间隔过窄); normal_eye_gap(两眼间隔正常)
score int 眼睛分数
angulus_oculi_medialis float 内眦角度数(单位:°)
eye_height float 眼睛高度(单位:mm)
eye_width float 眼睛宽度(单位:mm)

25、眉毛(brow_shape)

字段 类型 是否必传 说明
eyebrow_form array 眉毛枚举: bold(粗眉); thin(细眉); dashing(剑眉); downward(八字眉); round(新月眉); straight(一字眉)
eyebrow_type array 眉浓度枚举: sparse(稀眉); bushy(浓眉)
eyeins_form array 眉间距枚举: wider_eyebrow_gap(两眉间隔过宽); narrow_eyebrow_gap(两眉间隔过窄); normal_eyebrow_gap(两眉间隔正常);
eyebrowlen_form array 眉长枚举: long_eyebrow(长眉); little_long_eyebrow(略长眉); short_eyebrow(短眉); little_short_eyebrow(略短眉); normal_eyebrow(正常)
brow_height float 眉毛高度(单位:mm)
camber_angle float 眉毛弯度(单位:°)
uptrend_angle float 眉毛挑度(单位:°)
brow_width float 眉毛宽度(单位:mm)
brow_thick float 眉毛粗细(单位:mm)

26、鼻子(nose_shape)

字段 类型 是否必传 说明
nose_type array 鼻子枚举: pointy(翘头鼻); eagle_like(鹰钩鼻); snub(塌梁鼻); fleshy(肉鼻子); greek(厚实鼻); flat(平实鼻); upturned(朝天鼻)
result float 鼻子概率
nose_width float 鼻翼宽度(单位:mm)
人中长度 float 人中长度(单位:mm)
philtrum_result string 人中长短结果(long:长 short:短)

27、额头(forehead)

字段 类型 是否必传 说明
type array 额头类型: fujiShape(富士山额); mShape(M形额头); high(发际线过高); square(方角额头); low(发际线低下); dropped(头发脱落的额头)
result float 额头类型概率

28、发际线(hairline)

字段 类型 是否必传 说明
type array 发际线类型: untidy(发际线不整齐); tidy(发际线整齐)
result float 发际线类型概率

28、表情(expression)

字段 类型 是否必传 说明
result array 表情类型
表情(result)
字段 类型 是否必传 说明
intensity float 表情强度(范围0-5)
type string 表情类型枚举: AU01(内眉上扬); AU02(外眉上扬); AU04(压低眉毛); AU05(睁眼睛); AU06(抬高脸颊); AU07(眼睑紧缩); AU09(皱鼻子); AU10(抬高上唇); AU12(嘴角上扬); AU14(酒窝); AU15(压低嘴角); AU17(抬高下巴); AU20(嘴唇拉伸); AU23(嘴唇缩紧); AU25(嘴巴微张); AU26(嘴巴张大)

29、图片质量检测(image_detect)

图片检测不符合要求时返回错误码 21003
字段 类型 是否必传 说明
ratio float 脸部占图片比例
angle int 脸部倾斜角度 小于0是向右倾斜 大于0是向左倾斜
blur int 图片是否模糊 1-是

30、情绪检测(emotion)

字段 类型 是否必传 说明
result string 情绪类型: angry(生气) disgust(恶心) fear(害怕) happy(高兴) sad(伤心) surprise(惊喜) neutral(平静)

31、人脸检测(face_detect)

字段 类型 是否必传 说明
rects array 人脸框坐标
人脸框坐标(rects)
字段 类型 是否必传 说明
x0 int 左上角坐标x
y0 int 左上角y
x1 int 右下角坐标x
y1 int 右下角y

32、红区检测(red_area)

字段 类型 是否必传 说明
score int 分数
area float 占比面积
filename string 红区图

33、敏感度(sensitive)

字段 类型 是否必传 说明
score int 敏感程度(数值越低越敏感,数值越高越耐受)
type string 敏感肌肤类型:sensitive(敏感),normal(正常),tolerance(耐受)
level_score int 分数(分数越高越好)

34、三庭五眼(face_ratio)

字段 类型 是否必传 说明
atriums_radio array 三庭比例
filename_atriums string 三庭效果图
eyes_radio array 五眼比例
filename_eyes string 五眼效果图
eyes_widths array 右眼外侧留白距离,右眼宽度,内眼角间距,左眼宽度,左眼外侧留白距离(单位:mm)
atriums_widths array 上庭长度,中庭长度,下庭长度(单位:mm)
golden_triangle float 黄金三角度数(单位:°)

35、击败人数(defeat_rank)

字段 类型 是否必传 说明
pore float 0.47 击败47%的人
appearance float 0.47 击败47%的人
blackhead float 0.47 击败47%的人
chloasma float 0.47 击败47%的人
dark_circle float 0.47 击败47%的人
moisture float 0.47 击败47%的人
pockmark float 0.47 击败47%的人
spot float 0.47 击败47%的人
texture float 0.47 击败47%的人
wrinkle float 0.47 击败47%的人

四、附件示例

curl "https://api.yimei.ai/v2/api/face/analysis/131071" -H "Content-Type: multipart/form-data" -H "Authorization: Basic `echo 应用ID:密钥 | xxd -r -ps | base64`" -F "image=@test.jpg" -v
$url = "https://api.yimei.ai/v2/api/face/analysis/131071"; $client_id="向平台申请的应用ID" $client_secret ="向平台申请的密钥" $headers = array(); array_push($headers, "Authorization:Basic " . base64_encode($client_id.":".$client_secret)); //根据API的要求,定义相对应的Content-Type array_push($headers, "Content-Type".":"."application/x-www-form-urlencoded; charset=UTF-8"); $bodys = "image=https://www.test.cn/test.jpg"; $curl = curl_init(); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_FAILONERROR, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HEADER, true); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_POSTFIELDS, $bodys); var_dump(curl_exec($curl));
public static void main(String[] args) { String url = "https://api.yimei.ai/v2/api/face/analysis/131071"; String client_id = "向平台申请的应用ID"; String client_secret = "向平台申请的密钥"; String body="image=https://www.test.cn/test.jpg"; System.out.println("POST parameter : " + parameterBuffer.toString()); HttpURLConnection httpURLConnection = (HttpURLConnection)new URL(url).openConnection(); httpURLConnection.setDoOutput(true); httpURLConnection.setRequestMethod("POST"); httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); httpURLConnection.setRequestProperty("Authorization", "Basic " + new sun.misc.BASE64Encoder().encode((client_id+":"+client_secret).getBytes())); httpURLConnection.setRequestProperty("Content-Length", String.valueOf(body.length())); OutputStream outputStream = null; OutputStreamWriter outputStreamWriter = null; InputStream inputStream = null; InputStreamReader inputStreamReader = null; BufferedReader reader = null; StringBuffer resultBuffer = new StringBuffer(); String tempLine = null; try { outputStream = httpURLConnection.getOutputStream(); outputStreamWriter = new OutputStreamWriter(outputStream); outputStreamWriter.write(body); outputStreamWriter.flush(); //响应失败 if (httpURLConnection.getResponseCode() != 200) { //throw new Exception("HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode()); inputStream = httpURLConnection.getErrorStream(); }else{ //接收响应流 inputStream = httpURLConnection.getInputStream(); } //接收响应流 inputStream = httpURLConnection.getInputStream(); inputStreamReader = new InputStreamReader(inputStream); reader = new BufferedReader(inputStreamReader); while ((tempLine = reader.readLine()) != null) { resultBuffer.append(tempLine); } } finally { if (outputStreamWriter != null)outputStreamWriter.close(); if (outputStream != null)outputStream.close(); if (reader != null)reader.close(); if (inputStreamReader != null)inputStreamReader.close(); if (inputStream != null)inputStream.close(); } }
import requests,base64 url = 'https://api.yimei.ai/v2/api/face/analysis/131071' client_id = "向平台申请的应用ID"; client_secret = "向平台申请的密钥"; authorization='Basic ' + str(base64.b64encode((client_id+':'+client_secret).encode('utf-8')),'utf-8') print(authorization) headers={'Authorization':authorization} filename='/Users/1561081024489.jpg' files={'image':(filename, open(filename,'rb'), "multipart/form-data") } response=requests.post(url, headers=headers, files=files); print(str(response.content,'utf-8')) print(response.status_code)

皮肤放大镜AI分析接口 - (需要授权)

简介

皮肤放大镜AI分析接口调用前,应用ID和密钥进行Basic Authorization授权验证。
皮肤放大镜AI分析接口调用的流程:调用Detect接口,上传图片的同时,带上detect_types,进行多个项目的AI分析。

*******************************注意**********************************
所有响应的 filename 字段为对应测试类型的结果图片,通过HTTP GET的形式访问。
请求示例: https://api.yimei.ai/fileSvr/get/${filename}
所有图片服务器只保留3个月,不做永久存储!!

请求地址:/v2/api/skin/analysis/${detect_types}

一、调用详解

HTTP请求内容

POST /v2/api/skin/analysis/${detect_types} HTTP/1.1
Host: api.yimei.ai
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Authorization: Basic 经base64编码后的应用ID和密钥

image=test2-api0%2F20191109%2F285b85fa0b77aa3a35709d8984135d59-245436251094646784.jpg&image_pl=test2-api0%2F20191109%2Fef54604f2b39decde777345801c0eeac-245436329276473344.jpg&image_uv=test2-api0%2F20191109%2Ff83a4bcd919e73c833ffd2663cc8b872-245436390462980096.jpg

字段 类型 是否必传 说明
image string 白光图片(http可访问地址)
image_pl string 偏振光图片(http可访问地址)
image_uv string 紫外光图片(http可访问地址)
magnification int 放大倍数
detect_types int 要进行检测的项目,可以是多个检测项目的detect_type的和(按位或的值);例如:单独调用毛孔的时候,detect_types值为1,即相应的请求则为:https://api.yimei.ai/v2/api/skin/analysis/1; 同时调用毛孔、肤质三个测试项目时,detect_types值为:1+2=3,即相应的请求则为:https://api.yimei.ai/v2/api/skin/analysis/3; 具体数值代表的含义,请参照第二节

成功返回

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Cache-Control: no-cache

{
    "code": 0,
    "filename": "test2-api0/20191109/285b85fa0b77aa3a35709d8984135d59-245436251094646784.jpg",
    "detect_types": "511",
    "roughness": {
        "result": 9.40280532836914,
        "level": "severe",
        "score": 0
    },
    "corneum": {
        "filename": "test2-api0/20191109/7197630f69f28777653e6d603952c4a2-245475242011525120.jpg",
        "score": 30,
        "area": 1.0000499486923218,
        "level": "severe"
    },
    "pigment": {
        "filename": "test2-api0/20191109/f725e8fbc034501cede73ad5fb1168c6-245475242774888448.jpg",
        "score": 0,
        "area": 0.423634797334671
    },
    "sensitivity": {
        "filename": "test2-api0/20191109/9cc6b1693db369c4559163682388225d-245475242800054272.jpg",
        "level": "severe",
        "area": 0.07107295095920563,
        "score": 0
    },
    "skin_type": {
        "filename": "test2-api0/20191109/07c6e41647304694b75f9c9445835902-245475243030740992.jpg",
        "level": "lightly",
        "area": 0.0015083333710208535,
        "score": 0
    },
    "blackhead": {
        "filename": "test2-api0/20191109/74d7e4909828d5c9ac9a8232969d589d-245475243164958721.jpg",
        "count": 26,
        "level": "severe",
        "area": 0.005456901155412197,
        "score": 0
    },
    "pore": {
        "filename": "test2-api0/20191109/a30a88634991b85031ba02f16364a763-245475243164958720.jpg",
        "count": 116,
        "level": "severe",
        "area": 0.006147005129605532,
        "score": 0
    },
    "elasticity": {
        "filename": "test2-api0/20191109/6517d3fb280562879c4ad691b8813e6d-245475243441782784.jpg",
        "score": 0,
        "area": 0.4693399965763092,
        "level": "severe"
    },
    "color": {
        "result": "ziran"
    },
    "hair_thickness": {
        "filename": "test2-api0/20191109/a30a88634991b85031ba02f16364a763-245475243164958720.jpg",
        "score": 0,
        "thickness": 0.4693399965763092,
        "level": "severe"
    },
    "hair_density": {
        "filename": "test2-api0/20191109/a30a88634991b85031ba02f16364a763-245475243164958720.jpg",
        "score": 0,
        "level": "severe"
    },
    "hair_pore": {
        "filename": "test2-api0/20191109/a30a88634991b85031ba02f16364a763-245475243164958720.jpg",
        "score": 0,
        "level": "severe"
    },
    "hair_lost": {
        "filename": "test2-api0/20191109/a30a88634991b85031ba02f16364a763-245475243164958720.jpg",
        "score": 0,
        "level": "severe"
    },
    "scalp_status": {
        "filename": "test2-api0/20191109/a30a88634991b85031ba02f16364a763-245475243164958720.jpg",
        "score": 0,
        "level": "severe"
    },
    "scalp_keratin": {
        "filename": "test2-api0/20191109/a30a88634991b85031ba02f16364a763-245475243164958720.jpg",
        "score": 0,
        "level": "severe"
    },
    "scalp_vessel": {
        "filename": "test2-api0/20191109/a30a88634991b85031ba02f16364a763-245475243164958720.jpg",
        "score": 0,
        "level": "severe"
    },
    "id": "db62fd9bf8cf3a6d8a83615d7e949ff0",
    "filename_uv": "test2-api0/20191109/f83a4bcd919e73c833ffd2663cc8b872-245436390462980096.jpg",
    "filename_pl": "test2-api0/20191109/ef54604f2b39decde777345801c0eeac-245436329276473344.jpg"
}

字段 类型 是否必传 说明
code int 指示请求是否被正确处理;具体数值代表的含义,请参照公共编码
filename string 原图
id string 消息标识
* object 不同detect_type返回的结果数据结构不一样;具体响应数据结构,请参照第三节

返回错误

HTTP/1.1 400 OK
Content-Type: application/json; charset=utf-8
Cache-Control: no-cache

{
  "code":20000,
  "msg":"错误"
}
字段 类型 是否必传 说明
code int 指示请求是否被正确处理;具体数值代表的含义,请参照公共编码
msg string 当请求未正确处理时,返回的错误信息;处理成功时,msg字段不返回。

二、detect_types 参照表

字段 检测项目
pore 1 毛孔(紫外光)
skin_type 2 肤质
roughness 4 粗糙度
color 8 肤色(偏振光)
blackhead 16 黑头(紫外光)
sensitivity 32 敏感肌肤(偏振光)
pigment 64 色素沉着
elasticity 128 弹性
corneum 256 角质层
hair_thickness 512 头发粗细程度(偏振光)
hair_density 1024 头发密度(偏振光)
hair_pore 2048 头发毛囊状态(紫外光)
hair_lost 4096 脱发状态(偏振光)
scalp_status 8192 头皮状态
scalp_keratin 16384 头皮角质
scalp_vessel 32768 头皮红血丝(偏振光)
注:多个检测项目同时调用场景:可以上述detect_types的相加(按位或的值);
例如:
1、单独调用毛孔检测项场景,detect_types值为1,
即相应的请求则为:https://api.yimei.ai/v2/api/skin/analysis/1

2、同时调用毛孔、肤质、粗糙度三个检测项场景,detect_types值为:1+2+4=7,
即相应的请求则为:https://api.yimei.ai/v2/api/skin/analysis/7

三、检测项目响应报文参照表

*******************************注意**********************************
所有响应的 filename 字段为对应测试类型的结果图片,通过HTTP GET的形式访问。
请求示例: https://api.yimei.ai/fileSvr/get/${filename}
所有图片服务器只保留3个月,不做永久存储!!

1、毛孔(pore)

字段 类型 是否必传 说明
filename string 效果图
count int 数量
level string 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);
score int 分数
area float 面积占比

2、肤质(skin_type)

字段 类型 是否必传 说明
filename string 效果图
type string 肤质类型:oil(油性);dry(干性);mid(中性);
score int 分数
area float 面积占比

3、粗糙度(roughness)

字段 类型 是否必传 说明
level string 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);
score int 分数

4、肤色(color)

字段 类型 是否必传 说明
result string 肤色结果枚举: toubai(透白)色值:#f9e5d9、 baixi(白皙)色值:#f2d5c3、 ziran(自然)色值:#efc2a7、 xiaomai(小麦)色值:#c19b88、 anchen(暗沉)色值:#99715f、 youhei(黝黑)色值:#684a42

5、黑头(blackhead)

字段 类型 是否必传 说明
filename string 效果图
count int 数量
level string 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);
score int 分数
area float 面积占比

6、敏感(sensitivity)

字段 类型 是否必传 说明
filename string 效果图
level string 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);
score int 分数
area float 面积占比

7、色素沉着(pigment)

字段 类型 是否必传 说明
filename string 效果图
level string 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);
score int 分数
area float 面积占比

8、弹性(elasticity)

字段 类型 是否必传 说明
filename string 效果图
level string 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);
score int 分数
area float 面积占比

9、角质层(corneum)

字段 类型 是否必传 说明
filename string 效果图
level string 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);
score int 分数
area float 面积占比

10、头发粗细程度(hair_thickness)

字段 类型 是否必传 说明
filename string 效果图
level string 严重程度:thick(粗); medium(中); thin(细); none(无);
score int 分数
thickness float 头发直径

11、头发密度(hair_density)

字段 类型 是否必传 说明
filename string 效果图
level string 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);
score int 分数

12、头发毛囊状态(hair_pore)

字段 类型 是否必传 说明
filename string 效果图
level string 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);
score int 分数

13、脱发状态(hair_lost)

字段 类型 是否必传 说明
filename string 效果图
level string 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);
score int 分数

14、头皮状态(scalp_status)

字段 类型 是否必传 说明
filename string 效果图
level string 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);
score int 分数

15、头皮角质(scalp_keratin)

字段 类型 是否必传 说明
filename string 效果图
level string 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);
score int 分数

16、头皮红血丝(scalp_vessel)

字段 类型 是否必传 说明
filename string 效果图
level string 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无);
score int 分数

四、附件示例

curl "https://api.yimei.ai/v2/api/skin/analysis/511" -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" -H "Authorization: Basic `echo 应用ID:密钥 | xxd -r -ps | base64`" -d 'image=test2-api0%2F20191109%2F285b85fa0b77aa3a35709d8984135d59-245436251094646784.jpg&image_pl=test2-api0%2F20191109%2Fef54604f2b39decde777345801c0eeac-245436329276473344.jpg&image_uv=test2-api0%2F20191109%2Ff83a4bcd919e73c833ffd2663cc8b872-245436390462980096.jpg' -v
$url = "https://api.yimei.ai/v2/api/skin/analysis/511"; $client_id="向平台申请的应用ID" $client_secret ="向平台申请的密钥" $headers = array(); array_push($headers, "Authorization:Basic " . base64_encode($client_id.":".$client_secret)); //根据API的要求,定义相对应的Content-Type array_push($headers, "Content-Type".":"."application/x-www-form-urlencoded; charset=UTF-8"); $bodys = 'image=test2-api0%2F20191109%2F285b85fa0b77aa3a35709d8984135d59-245436251094646784.jpg&image_pl=test2-api0%2F20191109%2Fef54604f2b39decde777345801c0eeac-245436329276473344.jpg&image_uv=test2-api0%2F20191109%2Ff83a4bcd919e73c833ffd2663cc8b872-245436390462980096.jpg'; $curl = curl_init(); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_FAILONERROR, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HEADER, true); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_POSTFIELDS, $bodys); var_dump(curl_exec($curl));
public static void main(String[] args) { String url = "https://api.yimei.ai/v2/api/skin/analysis/511"; String client_id = "向平台申请的应用ID"; String client_secret = "向平台申请的密钥"; String body="image=test2-api0%2F20191109%2F285b85fa0b77aa3a35709d8984135d59-245436251094646784.jpg&image_pl=test2-api0%2F20191109%2Fef54604f2b39decde777345801c0eeac-245436329276473344.jpg&image_uv=test2-api0%2F20191109%2Ff83a4bcd919e73c833ffd2663cc8b872-245436390462980096.jpg"; System.out.println("POST parameter : " + parameterBuffer.toString()); HttpURLConnection httpURLConnection = (HttpURLConnection)new URL(url).openConnection(); httpURLConnection.setDoOutput(true); httpURLConnection.setRequestMethod("POST"); httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); httpURLConnection.setRequestProperty("Authorization", "Basic " + new sun.misc.BASE64Encoder().encode((client_id+":"+client_secret).getBytes())); httpURLConnection.setRequestProperty("Content-Length", String.valueOf(body.length())); OutputStream outputStream = null; OutputStreamWriter outputStreamWriter = null; InputStream inputStream = null; InputStreamReader inputStreamReader = null; BufferedReader reader = null; StringBuffer resultBuffer = new StringBuffer(); String tempLine = null; try { outputStream = httpURLConnection.getOutputStream(); outputStreamWriter = new OutputStreamWriter(outputStream); outputStreamWriter.write(body); outputStreamWriter.flush(); //响应失败 if (httpURLConnection.getResponseCode() != 200) { //throw new Exception("HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode()); inputStream = httpURLConnection.getErrorStream(); }else{ //接收响应流 inputStream = httpURLConnection.getInputStream(); } //接收响应流 inputStream = httpURLConnection.getInputStream(); inputStreamReader = new InputStreamReader(inputStream); reader = new BufferedReader(inputStreamReader); while ((tempLine = reader.readLine()) != null) { resultBuffer.append(tempLine); } } finally { if (outputStreamWriter != null)outputStreamWriter.close(); if (outputStream != null)outputStream.close(); if (reader != null)reader.close(); if (inputStreamReader != null)inputStreamReader.close(); if (inputStream != null)inputStream.close(); } }
import urllib, urllib2, sys url = 'https://api.yimei.ai/v2/api/skin/analysis/511' client_id = "向平台申请的应用ID"; client_secret = "向平台申请的密钥"; bodys = 'image=test2-api0%2F20191109%2F285b85fa0b77aa3a35709d8984135d59-245436251094646784.jpg&image_pl=test2-api0%2F20191109%2Fef54604f2b39decde777345801c0eeac-245436329276473344.jpg&image_uv=test2-api0%2F20191109%2Ff83a4bcd919e73c833ffd2663cc8b872-245436390462980096.jpg' post_data = bytes( bodys, ‘utf8’) request = urllib2.Request(url, post_data) request.add_header('Authorization', 'Basic ' + base64.b64encode(client_id+':'+client_secret)) //根据API的要求,定义相对应的Content-Type request.add_header('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8') response = urllib2.urlopen(request) content = response.read() if (content): print(content)

人脸融合 API接口 - (需要授权)

简介

人脸融合接口调用前,应用ID和密钥进行Basic Authorization授权验证。
人脸融合接口调用的流程:调用融合接口,需上传模板图,融合图。 融合后的图片中将包含融合图中的人脸特征,以及模板图中的其他外貌特征与内容。返回值是一段 JSON,包含融合完成后图片的地址。

*******************************注意**********************************
所有响应的 filename 字段为对应测试类型的结果图片,通过HTTP GET的形式访问。
请求示例: https://api.yimei.ai/fileSvr/get/${filename}
所有图片服务器只保留3个月,不做永久存储!!

请求地址:/v2/api/face/merge

一、调用详解

HTTP请求内容

POST /v2/api/face/merge  HTTP/1.1
Host: api.yimei.ai
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Authorization: Basic 经base64编码后的应用ID和密钥

image=test2-api0%2F20191109%2F285b85fa0b77aa3a35709d8984135d59-245436251094646784.jpg&image_template=test2-api0%2F20191109%2Fef54604f2b39decde777345801c0eeac-245436329276473344.jpg

字段 类型 是否必传 说明
image file或string 融合图 当Content-Type值为application/x-www-form-urlencoded时,则该值取值url地址;否则参考HTTP协议之multipart/form-data,文件KEY固定为image
image_template file或string 模板图
merge_rectangle string 指定融合图中用以融合的人脸框位置,四个正整数,用逗号分隔,依次代表左上角横坐标(left),人脸框左上角纵坐标(top),人脸右下角横坐标(right),人脸右下角纵坐标(buttom)。例如:70,80,100,100
template_rectangle string 指定模板图中进行人脸融合的人脸框位置,四个正整数,用逗号分隔,依次代表左上角横坐标(left),人脸框左上角纵坐标(top),人脸右下角横坐标(right),人脸右下角纵坐标(buttom)。例如:70,80,100,100
merge_rate float 融合比例,范围 [0,1]。数字越大融合结果包含越多融合图 (image 代表图片) 特征。默认值为50

成功返回

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Cache-Control: no-cache

{
    "code": 0,
    "face_merge": {
        "filename": "test2-api0/20211205/22f6d78dcf5c1bfd4b9ebf9e2ef01904-520443603881820160.jpg"
    },
    "id": "da9466fbf34dbe40b3144685aa3d4983"
}

字段 类型 是否必传 说明
code int 指示请求是否被正确处理;具体数值代表的含义,请参照公共编码
id string 消息标识
face_merge object 人脸融合结果

人脸融合结果(face_merge)

字段 类型 是否必传 说明
filename string 融合后的效果图

返回错误

HTTP/1.1 400 OK
Content-Type: application/json; charset=utf-8
Cache-Control: no-cache

{
  "code":20000,
  "msg":"错误"
}
字段 类型 是否必传 说明
code int 指示请求是否被正确处理;具体数值代表的含义,请参照公共编码
msg string 当请求未正确处理时,返回的错误信息;处理成功时,msg字段不返回。

四、附件示例

curl "https://api.yimei.ai/v2/api/face/merge" -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" -H "Authorization: Basic `echo 应用ID:密钥 | xxd -r -ps | base64`" -d 'image=test2-api0%2F20191109%2F285b85fa0b77aa3a35709d8984135d59-245436251094646784.jpg&image_template=test2-api0%2F20191109%2Fef54604f2b39decde777345801c0eeac-245436329276473344.jpg' -v
$url = "https://api.yimei.ai/v2/api/face/merge"; $client_id="向平台申请的应用ID" $client_secret ="向平台申请的密钥" $headers = array(); array_push($headers, "Authorization:Basic " . base64_encode($client_id.":".$client_secret)); //根据API的要求,定义相对应的Content-Type array_push($headers, "Content-Type".":"."application/x-www-form-urlencoded; charset=UTF-8"); $bodys = 'image=test2-api0%2F20191109%2F285b85fa0b77aa3a35709d8984135d59-245436251094646784.jpg&image_template=test2-api0%2F20191109%2Fef54604f2b39decde777345801c0eeac-245436329276473344.jpg'; $curl = curl_init(); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_FAILONERROR, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HEADER, true); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_POSTFIELDS, $bodys); var_dump(curl_exec($curl));
public static void main(String[] args) { String url = "https://api.yimei.ai/v2/api/face/merge"; String client_id = "向平台申请的应用ID"; String client_secret = "向平台申请的密钥"; String body="image=test2-api0%2F20191109%2F285b85fa0b77aa3a35709d8984135d59-245436251094646784.jpg&image_template=test2-api0%2F20191109%2Fef54604f2b39decde777345801c0eeac-245436329276473344.jpg"; System.out.println("POST parameter : " + parameterBuffer.toString()); HttpURLConnection httpURLConnection = (HttpURLConnection)new URL(url).openConnection(); httpURLConnection.setDoOutput(true); httpURLConnection.setRequestMethod("POST"); httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); httpURLConnection.setRequestProperty("Authorization", "Basic " + new sun.misc.BASE64Encoder().encode((client_id+":"+client_secret).getBytes())); httpURLConnection.setRequestProperty("Content-Length", String.valueOf(body.length())); OutputStream outputStream = null; OutputStreamWriter outputStreamWriter = null; InputStream inputStream = null; InputStreamReader inputStreamReader = null; BufferedReader reader = null; StringBuffer resultBuffer = new StringBuffer(); String tempLine = null; try { outputStream = httpURLConnection.getOutputStream(); outputStreamWriter = new OutputStreamWriter(outputStream); outputStreamWriter.write(body); outputStreamWriter.flush(); //响应失败 if (httpURLConnection.getResponseCode() != 200) { //throw new Exception("HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode()); inputStream = httpURLConnection.getErrorStream(); }else{ //接收响应流 inputStream = httpURLConnection.getInputStream(); } //接收响应流 inputStream = httpURLConnection.getInputStream(); inputStreamReader = new InputStreamReader(inputStream); reader = new BufferedReader(inputStreamReader); while ((tempLine = reader.readLine()) != null) { resultBuffer.append(tempLine); } } finally { if (outputStreamWriter != null)outputStreamWriter.close(); if (outputStream != null)outputStream.close(); if (reader != null)reader.close(); if (inputStreamReader != null)inputStreamReader.close(); if (inputStream != null)inputStream.close(); } }
import urllib, urllib2, sys url = 'https://api.yimei.ai/v2/api/face/merge' client_id = "向平台申请的应用ID"; client_secret = "向平台申请的密钥"; bodys = 'image=test2-api0%2F20191109%2F285b85fa0b77aa3a35709d8984135d59-245436251094646784.jpg&image_template=test2-api0%2F20191109%2Fef54604f2b39decde777345801c0eeac-245436329276473344.jpg' post_data = bytes( bodys, ‘utf8’) request = urllib2.Request(url, post_data) request.add_header('Authorization', 'Basic ' + base64.b64encode(client_id+':'+client_secret)) //根据API的要求,定义相对应的Content-Type request.add_header('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8') response = urllib2.urlopen(request) content = response.read() if (content): print(content)

图片加速删除 API接口 - (需要授权)

简介

图片加速删除接口调用前,应用ID和密钥进行Basic Authorization授权验证。
请求该接口后,所有的效果图,原图立即删除。


请求地址:/v2/api/query/delete

一、调用详解

HTTP请求内容

DELETE /v2/api/query/delete/3c40380a420225cee6f2d415c6648183  HTTP/1.1
Host: api.yimei.ai
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Authorization: Basic 经base64编码后的应用ID和密钥

字段 类型 是否必传 说明
id string 调用检测返回的ID

成功返回

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Cache-Control: no-cache

{
    "code": 0
}

字段 类型 是否必传 说明
code int 指示请求是否被正确处理;具体数值代表的含义,请参照公共编码

返回错误

HTTP/1.1 400 OK
Content-Type: application/json; charset=utf-8
Cache-Control: no-cache

{
  "code":20000,
  "msg":"错误"
}
字段 类型 是否必传 说明
code int 指示请求是否被正确处理;具体数值代表的含义,请参照公共编码
msg string 当请求未正确处理时,返回的错误信息;处理成功时,msg字段不返回。

四、附件示例

curl "https://api.yimei.ai/v2/api/query/delete/3c40380a420225cee6f2d415c6648183" -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" -H "Authorization: Basic `echo 应用ID:密钥 | xxd -r -ps | base64`" -v
$url = "https://api.yimei.ai/v2/api/query/delete/3c40380a420225cee6f2d415c6648183"; $client_id="向平台申请的应用ID" $client_secret ="向平台申请的密钥" $headers = array(); array_push($headers, "Authorization:Basic " . base64_encode($client_id.":".$client_secret)); //根据API的要求,定义相对应的Content-Type array_push($headers, "Content-Type".":"."application/x-www-form-urlencoded; charset=UTF-8"); $curl = curl_init(); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE"); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_FAILONERROR, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HEADER, true); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); var_dump(curl_exec($curl));
public static void main(String[] args) { String url = "https://api.yimei.ai/v2/api/query/delete/3c40380a420225cee6f2d415c6648183"; String client_id = "向平台申请的应用ID"; String client_secret = "向平台申请的密钥"; HttpURLConnection httpURLConnection = (HttpURLConnection)new URL(url).openConnection(); httpURLConnection.setDoOutput(true); httpURLConnection.setRequestMethod("DELETE"); httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); httpURLConnection.setRequestProperty("Authorization", "Basic " + new sun.misc.BASE64Encoder().encode((client_id+":"+client_secret).getBytes())); InputStream inputStream = null; InputStreamReader inputStreamReader = null; BufferedReader reader = null; StringBuffer resultBuffer = new StringBuffer(); String tempLine = null; try { //响应失败 if (httpURLConnection.getResponseCode() != 200) { //throw new Exception("HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode()); inputStream = httpURLConnection.getErrorStream(); }else{ //接收响应流 inputStream = httpURLConnection.getInputStream(); } //接收响应流 inputStream = httpURLConnection.getInputStream(); inputStreamReader = new InputStreamReader(inputStream); reader = new BufferedReader(inputStreamReader); while ((tempLine = reader.readLine()) != null) { resultBuffer.append(tempLine); } } finally { if (reader != null)reader.close(); if (inputStreamReader != null)inputStreamReader.close(); if (inputStream != null)inputStream.close(); } }
import urllib, urllib2, sys url = 'https://api.yimei.ai/v2/api/query/delete/3c40380a420225cee6f2d415c6648183' client_id = "向平台申请的应用ID"; client_secret = "向平台申请的密钥"; request = urllib2.Request(url) request.add_header('Authorization', 'Basic ' + base64.b64encode(client_id+':'+client_secret)) //根据API的要求,定义相对应的Content-Type request.add_header('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8') response = urllib2.urlopen(request) content = response.read() if (content): print(content)