人像分割
更新时间:2022-01-18
识别人体的轮廓范围,与背景进行分离,适用于拍照背景替换、照片合成、身体特效等场景。输入正常人像图片,返回分割后的二值结果图、灰度图、透明背景的人像图(png格式);并输出画面中的人数、人体坐标信息,可基于此对图片进行过滤、筛选,如筛选出大于x人的图片进行特殊处理。
分割效果示意图:
1)原图
2)二值图
3)灰度图
4)前景人像图(透明背景)
注:返回的二值图像需要进行二次处理才可查看分割效果;灰度图和前景人像图不用处理,直接解码保存图片即可。
public void BodySegDemo() {
var image = File.ReadAllBytes("图片文件路径");
// 调用人像分割,可能会抛出网络等异常,请使用try/catch捕获
var result = client.BodySeg(image);
Console.WriteLine(result);
// 如果有可选参数
var options = new Dictionary<string, object>{
{"type", "labelmap"}
};
// 带参数调用人像分割
result = client.BodySeg(image, options);
Console.WriteLine(result);
}
人像分割 请求参数详情
参数名称 | 是否必选 | 类型 | 说明 |
---|---|---|---|
image | 是 | byte[] | 二进制图像数据 |
type | 否 | string | 可以通过设置type参数,自主设置返回哪些结果图,避免造成带宽的浪费 1)可选值说明: labelmap - 二值图像,需二次处理方能查看分割效果 scoremap - 人像前景灰度图 foreground - 人像前景抠图,透明背景 2)type 参数值可以是可选值的组合,用逗号分隔;如果无此参数默认输出全部3类结果图 |
人像分割 返回数据参数详情
字段 | 是否必选 | 类型 | 说明 |
---|---|---|---|
log_id | 是 | int64 | 唯一的log id,用于问题定位 |
labelmap | 否 | string | 分割结果图片,base64编码之后的二值图像,需二次处理方能查看分割效果 |
scoremap | 否 | string | 分割后人像前景的scoremap,归一到0-255,不用进行二次处理,直接解码保存图片即可。Base64编码后的灰度图文件,图片中每个像素点的灰度值 = 置信度 * 255,置信度为原图对应像素点位于人体轮廓内的置信度,取值范围[0, 1] |
foreground | 否 | string | 分割后的人像前景抠图,透明背景,Base64编码后的png格式图片,不用进行二次处理,直接解码保存图片即可。将置信度大于0.5的像素抠出来,并通过image matting技术消除锯齿 |
person_num | 是 | int32 | 检测到的人体框数目 |
person_info | 否 | object[] | 人体框信息 |
+height | 否 | float | 人体区域的高度 |
+left | 否 | float | 人体区域离左边界的距离 |
+top | 否 | float | 人体区域离上边界的距离 |
+width | 否 | float | 人体区域的宽度 |
+score | 否 | float | 人体框的概率分数,取值0-1 |
人像分割 返回示例
{
"log_id": 2451426617428943180,
"labelmap": "iVBORw0KGg",
"scoremap": "iVBORw0KGg"
"foreground": "iVBORw0KGg",
"person_num": 2,
"person_info": [
{
"height": 420.9641110897064,
"width": 365.67474365234375,
"top": 3.704406976699829,
"score": 0.9801973104476929,
"left": 229.32940673828125
},
{
"height": 371.6713676452637,
"width": 167.91799926757812,
"top": 49.91801834106445,
"score": 0.4228516221046448,
"left": 470.4878234863281
}
],
}