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 痘痘检测模型
运行
- 用 Android Studio 打开本工程
- 等待 Gradle 同步完成
- 确认所需模型文件已放入
app/src/main/assets/ - 连接安卓手机
- 点击 Run 运行
拍照说明
当前拍照模式使用系统相机返回的缩略图,清晰度可能低于相册高清照片。
因此,拍照模式可能影响以下结果:
- 肤色分布
- 色斑判断
- 泛红判断
- 油光判断
- 细纹和纹理判断
如果需要更准确的分析结果,建议优先选择相册中的高清照片。
评分说明
综合评分从 100 分开始,根据各分项问题程度扣分。
当前权重优先级由高到低为:
- 痘痘/红斑
- 色斑/色沉
- 毛孔/纹理粗糙度
- 泛红
- 细纹趋势
- 黑眼圈/眼周暗沉
- 油光倾向
评分等级:
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模型训练质量
后续优化方向
- 将拍照模式升级为高清拍照输入
- 继续优化 BiSeNet / MediaPipe 的有效皮肤区域
- 基于真实拍摄数据微调色斑、泛红、油光、纹理和细纹阈值
- 优化痘痘检测模型的训练数据和置信度阈值
- 增加更细粒度的毛孔、细纹、色斑检测模型
- 增加不同肤色、不同光照场景下的适配
免责声明
本应用仅基于普通照片进行可见肤质分析,结果仅供护肤参考,不构成医学诊断或医疗建议。
如存在严重皮肤问题,请咨询专业皮肤科医生。