news 2026/5/9 17:21:34

Android 离线肤质分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 检测图片中的主要人脸,并裁剪人脸区域用于后续分析。

皮肤区域分割

当前支持三种模式:

SkinSegmentBackend.MEDIAPIPE SkinSegmentBackend.BISENET_ONNX SkinSegmentBackend.NONE

说明:

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

痘痘检测

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

acne_float32.tflite

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

图像规则分析

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

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

模型文件

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

app/src/main/assets/

可能用到的模型文件:

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. 油光倾向

评分等级:

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

免责声明

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 17:19:30

基于可解释AI的自监督地震去噪:从盲点网络到自动化掩码设计

1. 项目概述与核心价值在油气勘探领域,地震数据处理是揭示地下构造、识别油气储层的关键第一步。然而,从野外采集到的原始地震数据,总是不可避免地混杂着各种噪声,从随机的高斯白噪声到具有复杂时空相关性的相干噪声(如…

作者头像 李华
网站建设 2026/5/9 17:18:17

安卓音频处理利器JamesDSPManager:从DSP原理到实战调音全解析

1. 项目概述:音频处理领域的瑞士军刀 如果你是一名安卓设备的深度用户,同时又对音质有着近乎偏执的追求,那么你很可能已经听说过,或者正在寻找一个能够彻底接管你设备音频处理流程的强大工具。今天要聊的,就是这个在音…

作者头像 李华
网站建设 2026/5/9 17:13:31

CANN/pyasc带转置数据加载API文档

asc.language.basic.load_data_with_transpose 【免费下载链接】pyasc 本项目为Python用户提供算子编程接口,支持在昇腾AI处理器上加速计算,接口与Ascend C一一对应并遵守Python原生语法。 项目地址: https://gitcode.com/cann/pyasc asc.languag…

作者头像 李华
网站建设 2026/5/9 17:11:36

CANN/metadef获取C0格式值

GetC0Value 【免费下载链接】metadef Ascend Metadata Definition 项目地址: https://gitcode.com/cann/metadef 函数功能 从实际format中解析出C0 format信息。 函数原型 inline int64_t GetC0Value(int32_t format)参数说明 参数 输入/输出 说明 format 输入 实际f…

作者头像 李华
网站建设 2026/5/9 17:10:42

EI会议和SCI会议到底有啥区别?搞懂这些,你的论文投稿不再迷茫

EI会议与SCI会议的核心差异与投稿策略指南 引言:学术出版体系中的两座灯塔 第一次投稿时面对"推荐投EI会议还是SCI期刊?"的审稿意见,很多研究者都会陷入选择困难。去年有位计算机视觉方向的博士生向我展示了他收到的三份审稿意见—…

作者头像 李华