证件照:怎样在小程序端完成本地 AI 抠图

6 阅读3分钟

证件照:怎样在小程序端完成本地 AI 抠图

这是「光屿图片」技术系列的第三篇,介绍证件照的人像抠图功能。

项目地址:github.com/tangcl01020…

体验地址:

gh_3c04757f80a7_344.jpg

这个功能从模型清单、下载校验、推理会话到背景合成,大部分代码由 AI 协作完成。我主要负责选择“原图不上传”的产品边界,以及验证模型效果、设备兼容和失败降级。

原图不上传,模型按需下载

常见证件照方案会把照片上传到服务端推理。本项目采用另一种方式:下载通用模型,在微信端完成推理,用户原图仍保留在本机。

下载模型 → 本地校验 → 本地推理 → 生成蒙版 → 本地合成背景

模型不直接打进小程序包,而是通过 HTTPS 按需下载。模型清单包含版本、地址、文件大小、SHA-256、输入输出节点和输入尺寸。

下载完成后,客户端会:

  1. 校验文件大小;
  2. 分块计算 SHA-256;
  3. 与模型清单对比;
  4. 验证通过后才写入缓存;
  5. 缓存损坏时删除并重新下载。

这样更换模型时只需要更新清单,不必把模型文件和页面代码绑在一起发布。

不同设备使用不同输入尺寸

更大的模型输入可以改善边缘,但也会占用更多内存。项目会根据平台、设备内存和性能等级,在 512 与 768 输入之间选择。

只有明确满足条件的真机才尝试 768;开发者工具、低内存或设备信息不完整时默认使用 512。如果 768 推理失败,会释放当前会话并降级到 512 再尝试一次。

推理会话无论成功还是失败,都在 finally 中显式销毁。页面退出或收到内存压力信号时,也会统一释放会话与临时蒙版。

为什么不用在线推理服务

本地推理省掉了常驻 AI 服务及其并发扩容,也避免了用户照片上传带来的存储、清理和隐私压力。维护者只需要托管静态模型文件,不需要为每次抠图支付在线推理费用。

它也让发布边界更清楚:

  • 不启用证件照时,模型地址可以留空;
  • 启用时,只需配置 HTTPS 清单地址和下载合法域名;
  • 模型分发与页面功能解耦;
  • 用户照片不进入维护者的服务器。

本地 AI 并不意味着完全离线,而是把“分发通用计算能力”和“传输用户数据”分开。对个人开发者来说,这是一种兼顾成本、隐私和维护性的方案。

AI 不仅参与了最终的推理调用,也帮助补齐了文件摘要、缓存失效、会话释放和输入尺寸降级等工程细节。对于个人项目,这些工作往往比模型跑通本身更耗时间。

上一篇:图片调色:怎样用 WebGL 完成实时预览
下一篇:长图拼接:怎样识别并去除截图重叠区域