文档提供方 | 时间 | 版本 | 描述 |
深圳市宜远智能科技有限公司 | 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 | 增加女性属性 | normal
深圳市宜远智能科技有限公司 | 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响应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分析接口调用前,应用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字段不返回。 |
字段 | 值 | 检测项目 |
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个月,不做永久存储!!
字段 | 类型 | 是否必传 | 说明 |
result | int | 是 | 肌肤年龄 |
字段 | 类型 | 是否必传 | 版本 | 说明 |
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(无); |
字段 | 类型 | 是否必传 | 版本 | 说明 |
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(无); |
v2版本输出 本服务依赖毛孔,黑头
字段 | 类型 | 是否必传 | 说明 |
type | string | 是 | 肤质类型:mix(混合性);oil(油性);dry(干性);mid(中性);mid_oil(中性偏油);mid_dry(中性偏干); |
score | int | 是 | 出油程度(数值越高越油,数值越低越干) |
level_score | int | 是 | 程度分数(分数越高越好) |
category | array | 是 | 油性脸部区分类 |
字段 | 类型 | 是否必传 | 说明 |
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 | 是 | 油性脸部区域占比分类 |
字段 | 类型 | 是否必传 | 说明 |
result | float | 是 | 油性区域面积占该脸部区域的面积比例 |
class | string | 是 |
脸部区域类型: forehead(额头);chin(下巴);left_cheek(左脸颊);right_cheek:(右脸颊); |
字段 | 类型 | 是否必传 | 版本 | 说明 |
filename | string | 否 | 测试结果文件名 | |
count | int | 是 | 痤疮数量 | |
level | string | 是 | v2 | 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无); |
注意:以下字段数值为概率,值范围: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 | 是 | 年轻 |
字段 | 类型 | 是否必传 | 说明 |
filename | string | 是 | 测试结果文件名 |
count | int | 是 | 棕色斑数量 |
score | int | 是 | 棕色斑分数 |
v2版本依赖皱纹,毛孔,黑头,痘痘,痤疮
字段 | 类型 | 是否必传 | 版本 | 说明 |
filename | string | 否 | v1 | 测试结果文件名 |
score | int | 是 | 分数 | |
level | string | 是 | 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无); |
字段 | 类型 | 是否必传 | 说明 |
result | string | 是 | 肤色结果枚举: toubai(透白)色值:#f9e5d9、 baixi(白皙)色值:#f2d5c3、 ziran(自然)色值:#efc2a7、 xiaomai(小麦)色值:#c19b88、 anchen(暗沉)色值:#99715f、 youhei(黝黑)色值:#684a42 |
字段 | 类型 | 是否必传 | 说明 |
filename | string | 是 | 测试结果文件名 标注颜色说明: 痤疮:#FF6464 皮炎:#6464FF 敏感肌肤:#64FF64 |
result | string | 是 | 皮肤病类型:NONE(健康)、CC(痤疮)、PY(皮炎)、MGJF(敏感肌肤) |
字段 | 类型 | 是否必传 | 说明 |
filename | string | 是 | 测试结果文件名 |
score | int | 是 | 纹理分数 |
字段 | 类型 | 是否必传 | 说明 |
filename | string | 是 | 测试结果文件名 |
count | int | 是 | 紫外斑数量 |
字段 | 类型 | 是否必传 | 说明 |
filename | string | 是 | 测试结果文件名 |
result | string | 是 | 含水分区域(蓝色)面积占总检查区域的面积比例 |
score | int | 是 | 水分分数 |
class | int | 是 | 脸部区域分类 |
level | string | 是 | 毛孔严重程度:severe(严重); moderately(中度); lightly(轻度); none(无); |
字段 | 类型 | 是否必传 | 说明 |
result | float | 是 | 水分区域(蓝色)面积占该脸部区域的面积比例 |
class | string | 是 |
脸部区域类型: forehead(额头);chin(下巴);left_cheek(左脸颊);right_cheek:(右脸颊); |
字段 | 类型 | 是否必传 | 版本 | 说明 |
filename | string | 否 | 测试结果文件名 | |
count | int | 是 | 皱纹数量 | |
level | string | 否 | v2 | 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无); |
score | int | 是 | 分数 | |
category | array | 是 | v2 | 分类 (v2由class更改成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)(抬头纹) |
字段 | 类型 | 是否必传 | 说明 |
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]] |
字段 | 类型 | 是否必传 | 版本 | 说明 |
filename | string | 否 | 测试结果文件名 | |
count | int | 是 | 黑头数量 | |
score | int | 是 | 黑头分数 | |
area | float | 是 | 黑头区域占比 | |
level | string | 是 | v2 | 黑头严重程度:severe(严重); moderately(中度); lightly(轻度); none(无); |
points | array | 否 | v2 | 黑头坐标值 |
regions | array | 否 | v2 | 轮廓坐标 |
字段 | 类型 | 是否必传 | 版本 | 说明 |
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 | 分数 |
字段 | 类型 | 是否必传 | 版本 | 说明 |
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分类 |
字段 | 类型 | 是否必传 | 版本 | 说明 |
level | int | 是 | v2 | 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无); |
score | int | 是 | v2 | 分数 |
字段 | 类型 | 是否必传 | 说明 |
score | int | 是 | 颜值分数 |
字段 | 类型 | 是否必传 | 说明 |
result | array | 是 | 人脸特征向量 |
字段 | 类型 | 是否必传 | 说明 |
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:无) |
字段 | 类型 | 是否必传 | 说明 |
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 | 是 | 嘴角弯曲度(单位:°) |
字段 | 类型 | 是否必传 | 说明 |
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 | 是 | 下巴角度(单位:°) |
字段 | 类型 | 是否必传 | 说明 |
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) |
字段 | 类型 | 是否必传 | 说明 |
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) |
字段 | 类型 | 是否必传 | 说明 |
nose_type | array | 是 | 鼻子枚举: pointy(翘头鼻); eagle_like(鹰钩鼻); snub(塌梁鼻); fleshy(肉鼻子); greek(厚实鼻); flat(平实鼻); upturned(朝天鼻) |
result | float | 是 | 鼻子概率 |
nose_width | float | 是 | 鼻翼宽度(单位:mm) |
人中长度 | float | 是 | 人中长度(单位:mm) |
philtrum_result | string | 是 | 人中长短结果(long:长 short:短) |
字段 | 类型 | 是否必传 | 说明 |
type | array | 是 | 额头类型: fujiShape(富士山额); mShape(M形额头); high(发际线过高); square(方角额头); low(发际线低下); dropped(头发脱落的额头) |
result | float | 是 | 额头类型概率 |
字段 | 类型 | 是否必传 | 说明 |
type | array | 是 | 发际线类型: untidy(发际线不整齐); tidy(发际线整齐) |
result | float | 是 | 发际线类型概率 |
字段 | 类型 | 是否必传 | 说明 |
result | array | 是 | 表情类型 |
字段 | 类型 | 是否必传 | 说明 |
intensity | float | 是 | 表情强度(范围0-5) |
type | string | 是 | 表情类型枚举: AU01(内眉上扬); AU02(外眉上扬); AU04(压低眉毛); AU05(睁眼睛); AU06(抬高脸颊); AU07(眼睑紧缩); AU09(皱鼻子); AU10(抬高上唇); AU12(嘴角上扬); AU14(酒窝); AU15(压低嘴角); AU17(抬高下巴); AU20(嘴唇拉伸); AU23(嘴唇缩紧); AU25(嘴巴微张); AU26(嘴巴张大) |
图片检测不符合要求时返回错误码 21003
字段 | 类型 | 是否必传 | 说明 |
ratio | float | 否 | 脸部占图片比例 |
angle | int | 否 | 脸部倾斜角度 小于0是向右倾斜 大于0是向左倾斜 |
blur | int | 否 | 图片是否模糊 1-是 |
字段 | 类型 | 是否必传 | 说明 |
result | string | 是 | 情绪类型: angry(生气) disgust(恶心) fear(害怕) happy(高兴) sad(伤心) surprise(惊喜) neutral(平静) |
字段 | 类型 | 是否必传 | 说明 |
rects | array | 是 | 人脸框坐标 |
字段 | 类型 | 是否必传 | 说明 |
x0 | int | 是 | 左上角坐标x |
y0 | int | 是 | 左上角y |
x1 | int | 是 | 右下角坐标x |
y1 | int | 是 | 右下角y |
字段 | 类型 | 是否必传 | 说明 |
score | int | 是 | 分数 |
area | float | 是 | 占比面积 |
filename | string | 是 | 红区图 |
字段 | 类型 | 是否必传 | 说明 |
score | int | 是 | 敏感程度(数值越低越敏感,数值越高越耐受) |
type | string | 是 | 敏感肌肤类型:sensitive(敏感),normal(正常),tolerance(耐受) |
level_score | int | 是 | 分数(分数越高越好) |
字段 | 类型 | 是否必传 | 说明 |
atriums_radio | array | 是 | 三庭比例 |
filename_atriums | string | 是 | 三庭效果图 |
eyes_radio | array | 是 | 五眼比例 |
filename_eyes | string | 是 | 五眼效果图 |
eyes_widths | array | 是 | 右眼外侧留白距离,右眼宽度,内眼角间距,左眼宽度,左眼外侧留白距离(单位:mm) |
atriums_widths | array | 是 | 上庭长度,中庭长度,下庭长度(单位:mm) |
golden_triangle | float | 是 | 黄金三角度数(单位:°) |
字段 | 类型 | 是否必传 | 说明 |
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分析接口调用前,应用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字段不返回。 |
字段 | 值 | 检测项目 |
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个月,不做永久存储!!
字段 | 类型 | 是否必传 | 说明 |
filename | string | 是 | 效果图 |
count | int | 是 | 数量 |
level | string | 是 | 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无); |
score | int | 是 | 分数 |
area | float | 是 | 面积占比 |
字段 | 类型 | 是否必传 | 说明 |
filename | string | 是 | 效果图 |
type | string | 是 | 肤质类型:oil(油性);dry(干性);mid(中性); |
score | int | 是 | 分数 |
area | float | 是 | 面积占比 |
字段 | 类型 | 是否必传 | 说明 |
level | string | 是 | 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无); |
score | int | 是 | 分数 |
字段 | 类型 | 是否必传 | 说明 |
result | string | 是 | 肤色结果枚举: toubai(透白)色值:#f9e5d9、 baixi(白皙)色值:#f2d5c3、 ziran(自然)色值:#efc2a7、 xiaomai(小麦)色值:#c19b88、 anchen(暗沉)色值:#99715f、 youhei(黝黑)色值:#684a42 |
字段 | 类型 | 是否必传 | 说明 |
filename | string | 是 | 效果图 |
count | int | 是 | 数量 |
level | string | 是 | 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无); |
score | int | 是 | 分数 |
area | float | 是 | 面积占比 |
字段 | 类型 | 是否必传 | 说明 |
filename | string | 是 | 效果图 |
level | string | 是 | 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无); |
score | int | 是 | 分数 |
area | float | 是 | 面积占比 |
字段 | 类型 | 是否必传 | 说明 |
filename | string | 是 | 效果图 |
level | string | 是 | 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无); |
score | int | 是 | 分数 |
area | float | 是 | 面积占比 |
字段 | 类型 | 是否必传 | 说明 |
filename | string | 是 | 效果图 |
level | string | 是 | 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无); |
score | int | 是 | 分数 |
area | float | 是 | 面积占比 |
字段 | 类型 | 是否必传 | 说明 |
filename | string | 是 | 效果图 |
level | string | 是 | 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无); |
score | int | 是 | 分数 |
area | float | 是 | 面积占比 |
字段 | 类型 | 是否必传 | 说明 |
filename | string | 是 | 效果图 |
level | string | 是 | 严重程度:thick(粗); medium(中); thin(细); none(无); |
score | int | 是 | 分数 |
thickness | float | 是 | 头发直径 |
字段 | 类型 | 是否必传 | 说明 |
filename | string | 是 | 效果图 |
level | string | 是 | 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无); |
score | int | 是 | 分数 |
字段 | 类型 | 是否必传 | 说明 |
filename | string | 是 | 效果图 |
level | string | 是 | 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无); |
score | int | 是 | 分数 |
字段 | 类型 | 是否必传 | 说明 |
filename | string | 是 | 效果图 |
level | string | 是 | 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无); |
score | int | 是 | 分数 |
字段 | 类型 | 是否必传 | 说明 |
filename | string | 是 | 效果图 |
level | string | 是 | 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无); |
score | int | 是 | 分数 |
字段 | 类型 | 是否必传 | 说明 |
filename | string | 是 | 效果图 |
level | string | 是 | 严重程度:severe(严重); moderately(中度); lightly(轻度); none(无); |
score | int | 是 | 分数 |
字段 | 类型 | 是否必传 | 说明 |
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)
人脸融合接口调用前,应用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)
图片加速删除接口调用前,应用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)