Skip to content

Latest commit

 

History

History
221 lines (182 loc) · 8.98 KB

File metadata and controls

221 lines (182 loc) · 8.98 KB

jEt — Face Analysis App

Агентный трекер разработки

Цель: iOS-приложение для анализа лица, отслеживания пропорций (скулы, щёки, челюсть), детекции состояния кожи и статистики прогресса.


📋 Статус задач

# Задача Статус Приоритет Заметки
1 Структура проекта P0 Features/, Services/, Models/, Extensions/
2 SwiftData модели P0 FaceSnapshot с @Model
3 Camera Service P0 AVCaptureSession + Photo Output
4 Vision Face Analyzer P0 VNDetectFaceLandmarksRequest, 76 точек
5 ARKit Face Tracking ⬜️ P1 ARFaceGeometry для точных мм
6 Metrics Calculator P0 Скулы, челюсть, щёки, симметрия
7 ML модель кожи P1 SkinMLService (placeholder ready)
8 Camera UI P0 iOS 26 Liquid Glass стили
9 Analysis Results UI P1 Карточки метрик, Material backgrounds
10 Statistics UI P1 Swift Charts, LineMark, AreaMark
11 Tab Navigation P0 TabView с Camera/Stats/Profile
12 Simulator Support P0 Заглушка для камеры + демо режим
13 Тестирование P2 Работает в iOS Simulator
14 Deployment P0 Задеплоено на iPhone 16 (8E5AFD6A-8C09-5638-9FCE-518CEF01AAA0)

Легенда: ⬜️ Не начато | 🔄 В процессе | ✅ Готово | ❌ Заблокировано


🏗️ Архитектура

jEt/
├── jEtApp.swift                 # Entry point + ModelContainer
├── ContentView.swift            # Main TabView navigation
├── Models/
│   ├── FaceSnapshot.swift       # @Model - снимок анализа
│   ├── FaceMetrics.swift        # Структура метрик лица
│   └── SkinAnalysis.swift       # @Model - анализ кожи
├── Services/
│   ├── CameraService.swift      # AVCaptureSession управление
│   ├── FaceAnalyzer.swift       # Vision + расчёт метрик
│   ├── ARFaceService.swift      # ARKit face tracking
│   ├── SkinMLService.swift      # CoreML inference
│   ├── HealthKitService.swift   # Интеграция с Apple Health
│   └── AuthenticationService.swift # Sign in with Apple
├── Features/
│   ├── Camera/
│   │   ├── CameraView.swift     # UI камеры
│   │   └── CameraPreview.swift  # UIViewRepresentable превью
│   ├── Analysis/
│   │   ├── AnalysisView.swift   # Результаты анализа
│   │   └── MetricCard.swift     # Компонент карточки
│   ├── Statistics/
│   │   ├── StatisticsView.swift # Графики прогресса
│   │   ├── FullHistoryView.swift # Полная история записей
│   │   └── ChartComponents.swift # Swift Charts компоненты
│   ├── Health/
│   │   └── AcneLogView.swift    # Экран записи акне в HealthKit
│   └── AuthenticationView.swift # Экран входа
├── Extensions/
│   └── View+LiquidGlass.swift   # iOS 26 стили
└── Resources/
    └── SkinClassifier.mlmodel   # CoreML модель

🧠 MCP Context7 Инструкции

При работе с этим проектом использовать:

Документация (context7)

- /apple/swift-evolution — актуальный Swift синтаксис
- /apple/swiftui — iOS 26 API, .glassEffect(), Material
- /apple/vision — VNFaceLandmarks2D, VNDetectFaceLandmarksRequest
- /apple/arkit — ARFaceGeometry, ARFaceAnchor
- /apple/coreml — MLModel, VNCoreMLRequest
- /apple/swiftdata — @Model, ModelContainer, @Query
- /apple/swift-charts — Chart, LineMark, AreaMark
- /apple/healthkit - HKHealthStore, HKCategoryType

Ключевые API

// Vision Face Landmarks
VNDetectFaceLandmarksRequest
VNFaceLandmarks2D.faceContour      // Контур лица - 17 точек
VNFaceLandmarks2D.leftEye          // Левый глаз
VNFaceLandmarks2D.rightEye         // Правый глаз
VNFaceLandmarks2D.nose             // Нос
VNFaceLandmarks2D.outerLips        // Губы

// ARKit Face Geometry
ARFaceTrackingConfiguration
ARFaceGeometry.vertices            // 1220 вершин 3D меша
ARFaceAnchor.blendShapes           // 52 выражения лица

// SwiftData
@Model class FaceSnapshot
modelContainer(for:)
@Query var snapshots: [FaceSnapshot]

// iOS 26 Liquid Glass
.glassEffect()
.ultraThinMaterial
.regularMaterial

📐 Метрики лица (формулы)

Из Vision Landmarks (нормализованные 0-1)

Ширина лица = |faceContour[0] - faceContour[16]|
Высота лица = |faceContour[8].y - переносица.y|
Ширина скул = |faceContour[2] - faceContour[14]|  
Ширина челюсти = |faceContour[4] - faceContour[12]|
Ширина щёк = (скулы - челюсть) / скулы * 100%

Симметрия = 1 - |левая_сторона - правая_сторона| / среднее
Отёчность = сравнение с baseline (первый снимок)

Из ARKit (реальные мм)

ARFaceGeometry.vertices даёт координаты в метрах
Умножить на 1000 для мм
Использовать индексы вершин для ключевых точек

🎨 iOS 26 Liquid Glass Design

Принципы

  • Полупрозрачные контролы с .glassEffect()
  • Размытие фона через Material
  • Плавные анимации с .spring()
  • Иконки SF Symbols 6
  • Контрастный текст на стекле

Цветовая схема

// Акцентные цвета для метрик
Color.green  // Хороший показатель
Color.orange // Средний
Color.red    // Требует внимания

// Фоны
.ultraThinMaterial
.regularMaterial  
.thickMaterial

🤖 ML Модель

Источник: uzairu809/skin_disease_classifier_MobileNetV2 Формат: Keras → CoreML через coremltools Классы: Акне, покраснения, пигментация, норма

Конвертация

import coremltools as ct
model = ct.convert(keras_model, 
    inputs=[ct.ImageType(shape=(1, 224, 224, 3))])
model.save("SkinClassifier.mlmodel")

📱 iOS Simulator MCP

Команды для тестирования

mcp_ios-simulator_open_simulator     # Открыть симулятор
mcp_ios-simulator_get_booted_sim_id  # Получить ID
mcp_ios-simulator_ui_tap             # Тап по координатам
mcp_ios-simulator_take_screenshot    # Скриншот для проверки

📝 Лог изменений

Дата Изменение
30.12.2025 Создан agents.md, начало проекта
30.12.2025 ✅ Структура проекта: Models/, Services/, Features/, Extensions/
30.12.2025 ✅ SwiftData: FaceSnapshot.swift, FaceMetrics.swift, SkinAnalysis.swift
30.12.2025 ✅ Services: CameraService, FaceAnalyzer, SkinMLService
30.12.2025 ✅ UI: CameraView, AnalysisView, StatisticsView, MetricCard
30.12.2025 ✅ Extensions: View+LiquidGlass с iOS 26 стилями
30.12.2025 ✅ Главные файлы: ContentView с TabView, jEtApp с ModelContainer
30.12.2025 ✅ Исправлен NSCameraUsageDescription (INFOPLIST_KEY)
30.12.2025 ✅ Добавлена поддержка iOS Simulator с заглушкой камеры
30.12.2025 ✅ Приложение успешно запускается и работает
06.01.2026 ✅ Добавлен FullHistoryView, удаление данных, экспорт JSON
06.01.2026 ✅ Исправлен CameraService (concurrency) и build errors
06.01.2026 ✅ Успешный билд и деплой на iPhone 16

⏭️ Следующие шаги

  1. Создать структуру папок
  2. Реализовать SwiftData модели
  3. Создать CameraService
  4. Реализовать FaceAnalyzer с Vision
  5. Построить Camera UI
  6. Analysis UI с карточками метрик
  7. Statistics UI с Charts
  8. Скачать и конвертировать ML модель для кожи
  9. Добавить ARKit для точных измерений
  10. Протестировать в iOS Simulator
  11. Задеплоить на реальное устройство