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)