Android 离线肤质分析

Android 离线肤质分析 Demo

这是一套完全离线运行的 Android 肤质分析 MVP Demo。

项目地址:肤质分析https://gitcode.com/mushike/skin

功能

  • 支持选择相册照片分析
  • 支持拍照体验分析
  • 全流程本地运行,不上传服务器
  • 使用 ML Kit bundled Face Detection 检测人脸
  • 支持 MediaPipe Image Segmenter 皮肤区域分割
  • 支持 BiSeNet Face Parsing ONNX 人脸解析
  • 支持不使用模型的规则区域兜底模式
  • 支持 TFLite 痘痘检测模型
  • 使用 Kotlin 本地图像算法分析肤质
  • 输出综合评分、分项结果、护肤建议和分析区域示意图

当前分析项目

  • 痘痘/红斑
  • 色斑/色沉
  • 泛红
  • 黑眼圈/眼周暗沉
  • 油光倾向
  • 毛孔/纹理粗糙度
  • 细纹趋势
  • 综合评分

技术方案

人脸检测

使用 ML Kit bundled Face Detection 检测图片中的主要人脸,并裁剪人脸区域用于后续分析。

皮肤区域分割

当前支持三种模式:

kotlin 复制代码
SkinSegmentBackend.MEDIAPIPE
SkinSegmentBackend.BISENET_ONNX
SkinSegmentBackend.NONE

说明:

  • MEDIAPIPE:使用 MediaPipe Image Segmenter,速度较快,适合快速演示。
  • BISENET_ONNX:使用 BiSeNet Face Parsing ONNX,分割更细,可更好排除嘴唇、眉毛、眼睛、头发等非皮肤区域。
  • NONE:不使用分割模型,回退到规则区域。

痘痘检测

当前支持 TFLite 痘痘检测模型:

text 复制代码
acne_float32.tflite

如果痘痘模型加载失败或推理失败,会自动回退到颜色规则版红斑估计。

图像规则分析

除痘痘模型外,其他肤质指标主要基于本地图像规则估计:

  • 色斑/色沉:基于 Lab 亮度暗斑估计
  • 泛红:基于 Lab a* 通道和 HSV 饱和度估计
  • 油光:基于 T 区高亮低饱和区域估计
  • 纹理:基于鼻子/脸颊高频纹理估计
  • 细纹:基于额头/眼周边缘纹理估计
  • 黑眼圈:基于眼下区域与脸颊亮度差估计

模型文件

根据实际使用的功能,需要将模型放到:

text 复制代码
app/src/main/assets/

可能用到的模型文件:

text 复制代码
selfie_multiclass_256x256.tflite
bisenet_face_parsing.onnx
acne_float32.tflite

说明:

  • selfie_multiclass_256x256.tflite:MediaPipe 皮肤/人像分割模型
  • bisenet_face_parsing.onnx:BiSeNet 人脸解析模型
  • acne_float32.tflite:TFLite 痘痘检测模型

运行

  1. 用 Android Studio 打开本工程
  2. 等待 Gradle 同步完成
  3. 确认所需模型文件已放入 app/src/main/assets/
  4. 连接安卓手机
  5. 点击 Run 运行

拍照说明

当前拍照模式使用系统相机返回的缩略图,清晰度可能低于相册高清照片。

因此,拍照模式可能影响以下结果:

  • 肤色分布
  • 色斑判断
  • 泛红判断
  • 油光判断
  • 细纹和纹理判断

如果需要更准确的分析结果,建议优先选择相册中的高清照片。

评分说明

综合评分从 100 分开始,根据各分项问题程度扣分。

当前权重优先级由高到低为:

  1. 痘痘/红斑
  2. 色斑/色沉
  3. 毛孔/纹理粗糙度
  4. 泛红
  5. 细纹趋势
  6. 黑眼圈/眼周暗沉
  7. 油光倾向

评分等级:

text 复制代码
90 - 100:肤质较好
75 - 89 :肤质良好
60 - 74 :肤质一般
60 以下:问题较明显

主要代码文件

MainActivity.kt

负责页面展示、选择照片、拍照入口和结果显示。

OfflineSkinAnalyzer.kt

负责整体分析流程调度,包括人脸检测、人脸裁剪、皮肤分割、痘痘检测和肤质分析。

SkinImageAnalyzer.kt

负责具体肤质指标分析、综合评分、建议生成和分析区域叠加图绘制。

MediaPipeSkinSegmenter.kt

MediaPipe 皮肤区域分割后端。

BiseNetFaceParserOnnx.kt

BiSeNet ONNX 人脸解析后端。

AcneTfliteDetector.kt

TFLite 痘痘检测后端。

当前优点

  • 完全离线运行
  • 不上传服务器
  • 不依赖 Python 运行环境
  • 支持皮肤分割模型和规则兜底
  • 支持 TFLite 痘痘检测
  • 支持分析区域可视化
  • 工程结构简单,适合 Android 端 Demo 展示

当前限制

本项目仍属于 Demo / MVP 级肤质分析工具,不是医学诊断系统。

当前限制包括:

  • 普通照片受光照、角度、美颜、化妆影响较大
  • 拍照模式当前使用缩略图,清晰度有限
  • 色斑、泛红、油光、纹理、细纹仍主要依赖图像规则估计
  • 不同手机相机的色彩风格会影响分析结果
  • 深色皮肤、强光、阴影、滤镜、美颜场景下结果可能偏差
  • 皮肤分割效果会影响有效分析区域
  • 痘痘检测效果取决于 acne_float32.tflite 模型训练质量

后续优化方向

  1. 将拍照模式升级为高清拍照输入
  2. 继续优化 BiSeNet / MediaPipe 的有效皮肤区域
  3. 基于真实拍摄数据微调色斑、泛红、油光、纹理和细纹阈值
  4. 优化痘痘检测模型的训练数据和置信度阈值
  5. 增加更细粒度的毛孔、细纹、色斑检测模型
  6. 增加不同肤色、不同光照场景下的适配

免责声明

本应用仅基于普通照片进行可见肤质分析,结果仅供护肤参考,不构成医学诊断或医疗建议。

如存在严重皮肤问题,请咨询专业皮肤科医生。

相关推荐
陈蒙_2 小时前
三板斧解决 Trae 卡顿
安卓·agent·ai编程·trae·trae 卡顿
半天法师2 小时前
Bug 记录:UE 结构体转 JSON 时 Key 字段大小写异常 (Editor 与打包后表现不一致)
ai·ue5·json·bug
Elastic 中国社区官方博客2 小时前
通过受管控的控制平面加速商品陈列优化
大数据·数据库·人工智能·elasticsearch·搜索引擎·平面·ai
CoderJia程序员甲2 小时前
GitHub 热榜项目 - 日榜(2026-04-28)
人工智能·ai·大模型·github·ai教程
BetterNow.2 小时前
安卓内存Previous为什么可以算进freeRam
android·linux·安卓·安卓性能·安卓内存
Huang2601082 小时前
短网址 API 集成指南
ai
xiaoxue..3 小时前
浅聊ReAct:Agent 的执行框架
ai·面试·agent
大刘讲IT12 小时前
AI重塑企业信息价值标准:从“系统供给”到“用户定义”的企业数字化新范式
人工智能·经验分享·ai·制造
流年似水~12 小时前
MCP协议实战:从零搭建一个让Claude能“看见“数据库的工具服务
数据库·人工智能·程序人生·ai·ai编程