人像分割(PortraitSegmenter)使用指导:抠图、换背景、背景虚化

« 返回

机器学习套件(ML Kit)组件在在线版和教育版中提供,离线版(含机房版)不包含。

它能做什么

人像分割把照片里的人和背景分开,直接输出成品 PNG:抠出人像(背景透明)、换纯色背景(证件照蓝底红底)、换成另一张图片作背景、背景虚化。结果文件路径能直接给「图像」组件显示或拿去分享上传。

准备工作

  • 阈值:「阈值」默认 0.5,调高抠得更紧、调低保留更多边缘。
  • 颜色:换纯色背景的颜色用颜色块或 &HAARRGGBB 数字。
  • 联机调试:安卓上用 AI 伴侣调试需要安装 MLKit 版 AI 伴侣(应用宝,包名 cn.fun123.appinventor);普通版伴侣不含识别引擎,调用时会触发「屏幕.出现错误时」(错误码 4722)。直接打包 APK 安装测试不受影响。
  • 安装包体积:只有用到本组件的 App 才会打包它的识别引擎与模型,体积以编译结果为准。
  • 鸿蒙:完整支持图片处理:调用系统主体分割,人、宠物、物品都会被当作主体,拍人像时效果一致;实时换背景暂不支持,「打开实时摄像头」「保存当前画面」会触发「处理失败」。

案例一:抠人像和换蓝底

先把选好的图存进全局变量,再按按钮选择效果:

global 原图 = ""
when 图像选择器_相册.AfterPicking() {
  原图 = 图像选择器_相册.Selection
  图像_预览.Picture = 原图
}
when 按钮_抠图.Click() {
  人像分割1.ExtractPerson(原图)
}
when 按钮_蓝底.Click() {
  人像分割1.ReplaceBackgroundWithColor(原图, &HFF438EDB)
}
when 人像分割1.GotResult(图片地址, 宽度, 高度) {
  图像_结果.Picture = 图片地址
  标签_状态.Text = join("完成 ", 宽度, "×", 高度)
}

案例二:背景虚化、换图片背景与清理

虚化半径建议 8~25;换图片背景时背景图会缩放到与原图同样大小;「清空缓存」返回删除的文件数:

when 按钮_虚化.Click() {
  人像分割1.BlurBackground(原图, 15)
}
when 按钮_换图.Click() {
  人像分割1.ReplaceBackgroundWithImage(原图, "bg_scenery.png")
}
when 按钮_清理.Click() {
  标签_状态.Text = join("已删除 ", 人像分割1.ClearCache(), " 张生成的图片")
}
when 人像分割1.SegmentFailed(操作, 错误信息) {
  标签_错误.Text = join(操作, ":", 错误信息)
}

案例三:实时换背景,再把画面存下来

「打开实时摄像头」后预览区直接显示换好背景的画面:「实时背景效果」可选 blur(虚化)、color(换成「实时背景颜色」)、image(换成「实时背景图片」),进行中修改下一帧就生效。案例工程在设计器里设好了前置摄像头和风景背景图,「保存当前画面」把看到的画面存成 PNG,完成后照常触发「处理完成」:

when 按钮_实时.Click() {
  人像分割1.PreviewContainer = 垂直布局_预览
  人像分割1.StartLiveCamera()
}
when 按钮_切换.Click() {
  人像分割1.LiveEffect = choose(人像分割1.LiveEffect == "blur", "color", choose(人像分割1.LiveEffect == "color", "image", "blur"))
  标签_状态.Text = join("实时换背景:", 人像分割1.LiveEffect)
}
when 按钮_保存.Click() { 人像分割1.CaptureLiveFrame() }
when 按钮_停止.Click() { 人像分割1.StopLiveCamera() }

结果数据说明

每次处理都会在应用私有目录生成一张新的 PNG(文件名带时间),「图像路径」是完整路径,宽高与原图相同。

常见问题

现象 原因与处理
边缘有残留背景 调高「阈值」;背景与衣服颜色接近时效果会变差
处理很慢 原图太大时先用「图片处理」压缩再分割
存储越来越大 定期调「清空缓存」
实时预览黑屏、看不到画面 「预览容器」要选布局组件并给明确宽高(如宽度充满、高度 300 像素);第一次打开要允许摄像头权限
实时检测时界面卡 调大「实时事件间隔」,事件里少做事;画面上的标注不受间隔影响

完整 .aia 源码与操作指导

下载 .aia 源码

导入 PortraitSegmenterDemo.aia 后可以直接打包 APK 运行;用 AI 伴侣联机调试请安装 MLKit 版 AI 伴侣。源码文件已通过正式编辑器载入、后台导入和 APK 编译校验;真机识别效果请以实际设备为准。

功能 操作 预期结果
抠人像 选人像照后点「抠人像」 结果区显示背景透明的人像
换蓝底 / 红底 点对应按钮 背景换成证件照蓝色或红色
背景虚化 点「背景虚化」 人物清晰、背景模糊
换风景背景 点「换风景背景」 背景换成工程自带的风景图
清理文件 点「清理文件」 提示删除的图片数量
实时换背景 点「实时换背景」,再点「切换效果」 前置摄像头画面里背景在虚化、蓝底、风景之间切换
保存画面 实时换背景时点「保存画面」 结果区显示刚才看到的画面

案例界面与积木源码在仓库 docs/markdown/reference/components/guide/examples/PortraitSegmenterDemo/,SHA-256:5662a65b8d50205e383c6f483714a7af3a41600a9d8b34af793ed7534337777f。

文档反馈