近期百度上线了人像抠图 API - 人像分割 - 识别图像中的人体轮廓,与背景进行分离,其主要分析能力为:

识别人体的轮廓范围,与背景进行分离,适用于拍照背景替换、照片合成、身体特效等场景;

输入正常人像图片,返回分割后的二值结果图,返回的二值图像需要进行二次处理才可查看分割效果.

技术和应用场景简单介绍参考 - 人像分割技术正式上线 一键抠像 欢迎免费使用.

1. 百度人像分割技术简介

核心能力

精准识别图像中的人体轮廓边界,将人体轮廓与图像背景进行分离,实现像素级分割,一键抠像.

技术优势

  • 适应性强:图像中有多个人体,或者背景比较复杂时,都不在话下,还能hold住人体位置重叠、遮挡、背面、侧面、大动作等各类场景.
  • 精准分割:人体轮廓边缘清晰可见,评测IoU 95%以上.

分割效果图

应用场景

  • 人像抠图
    将原始图片中的人像分离出来,选择新的背景图像进行替换、合成;同时可以对背景进行虚化处理,突出人像,实现大光圈人像拍照效果。手残党也能变成修图小能手~
  • 人体特效
    视频直播过程中,识别用户的人体轮廓,为人像实时增加各种设定的背景特效、贴纸道具,拉轰、上档次,妥妥的!

示例:

图片去背景

照片背景替换

典型案例 - 美啦相机APP

美啦相机是广州光锥元信息科技有限公司推出的美颜美体应用软件,为女性提供全能的修图服务. 今年8月接入百度人像分割技术,精确分离照片中的人像和背景,为用户提供换背景、给背景添加滤镜、景深模式等定制化个性服务. 一秒就变小仙女~

如何接入

人像分割服务已正式上线,欢迎免费试用,请戳这里:http://ai.baidu.com/tech/body/seg

2. Python 调用百度 API 测试 Demo

需要首先安装 baidu-aip-2.2.8.0

sudo pip2 install baidu-aip
# 或
sudo pip3 install baidu-aip

百度 API 测试代码如下:

import cv2
import base64
import numpy as np

from aip import AipBodyAnalysis

# 在百度云中申请,每天各接口有 500 次调用限制.
APP_ID = '****'
API_KEY = '****'
SECRET_KEY = '****'

client = AipBodyAnalysis(APP_ID, API_KEY, SECRET_KEY)

imgfile = 'test.jpg'
ori_img = cv2.imread(imgfile)
height, width, _ = ori_img.shape

with open(imgfile, 'rb') as fp:
    img_info = fp.read()

seg_res = client.bodySeg(img_info)
labelmap = base64.b64decode(seg_res['labelmap'])
nparr = np.fromstring(labelmap, np.uint8)
labelimg = cv2.imdecode(nparr,1)
labelimg = cv2.resize(labelimg,(width,height), interpolation=cv2.INTER_NEAREST)
new_img = np.where(labelimg==1, 255, labelimg)
maskfile = imgfile.replace('.jpg', '_mask.png')
cv2.imwrite(maskfile, new_img)

res_imgfile = imgfile.replace('.jpg', '_res.jpg')
result = cv2.bitwise_and(ori_img, new_img)
cv2.imwrite(res_imgfile, result)

print('Done.')

随便从淘宝上找了几张模特图,测试结构如下:

总结:

根据 API 输出结果解析出来的 shape 为 473x473x3,应该采用了类似于 PSPNet 的语义分割网络做的二类分割(背景 + 人体).

测试结果感觉差强人意.

Last modification:October 23rd, 2018 at 11:04 pm