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. 增加不同肤色、不同光照场景下的适配

免责声明

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

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

相关推荐
妙妙屋(zy)14 小时前
Claude Code+CC-Switch+CC-Connect+飞书使用教程
ai
小七-七牛开发者16 小时前
Coding Agent 规则管理:CLAUDE.md、Skills、Hooks、Subagents 到底怎么选?
ai·大模型·agent·claude·token·loop·mcp·claudecode·ai coding
doiito1 天前
左脚踩右脚:让 LLM 自进化的 Agent 轨迹训练法——为什么它能补上主流范式的最后一块拼图
ai·系统设计
带刺的坐椅1 天前
从 Claude Code 隐私争议,看 SolonCode 的设计选择
ai·llm·agent·claudecode·soloncode·codingplan
lincats2 天前
Claude Code项目越写越乱?这套清理流程能救你
ai·ai agent·claude code
云燕实验室CloudLab2 天前
《AI开始"抱团"思考了!多智能体 + 思维图到底有多强?》
ai·学习工具·智慧学伴
小七-七牛开发者2 天前
论文解读:DeepSeek DSpark 在真实高并发推理服务中,如何保证 Token 生成又好又快?
ai·大模型·编程·ai coding
doiito2 天前
【Agent Harness】Gliding Horse 核心设计理念,不跟风开发自己的AI Agent
ai·rust·架构设计·系统设计·ai agent
doiito3 天前
【Agent Harness】Gliding Horse 的 L2 作战地图:让多 Agent 协作从“摸黑”变成“透明”
ai·rust·架构设计·系统设计·ai agent
xiezhr3 天前
逛GitHub发现一款免费带有AI功能的数据库管理工具DBX
ai·开源软件·自然语言·数据库管理工具