You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Dermalytix Active · Active Learning for Clinical Labeling
Flutter mobile app + FastAPI backend for AI-assisted skin lesion diagnosis. The system combines deep learning inference with an Active Learning (AL) pipeline that enables continuous model improvement through expert feedback.
AI-powered diagnosis with blur detection before inference
Multi-image capture with swipeable preview; per-image decisions tracked
Case management with editable demographics and symptoms
Role-aware UX: GP view hides labeling; doctor view shows full workflow
Glassmorphism UI theme with light/dark support
English / Thai UI: switch language in Settings; choice is persisted (SharedPreferences) and applied across main screens, forms, navigation, and common dialogs
Active Learning Pipeline
Model Registry: Version control for ML models with status tracking (training → evaluating → production → archived)
Labels Pool: Collects expert-corrected labels for retraining
Auto-Promote: Automatically promotes better-performing models to production
Event Log: Full audit trail of model lifecycle events
cd backserver
python -m venv .venv &&source .venv/bin/activate
pip install -r requirements.txt
# Start server
PYTHONPATH=. uvicorn back:app --host 0.0.0.0 --port 8000
or with this:
python -m uvicorn backserver.back:app --host 0.0.0.0 --port 8000
# Verify
curl http://localhost:8000/health
Frontend Setup
flutter pub get
# Run with backend URL (adjust for your environment)# Android emulator: http://10.0.2.2:8000# iOS simulator: http://127.0.0.1:8000# Real device: http://<your-LAN-IP>:8000
flutter run --dart-define=BACKSERVER_BASE=http://10.0.2.2:8000
Localization (EN/TH)
Run the app and open Settings (bottom navigation).
Choose English or ไทย — the selection is saved and restored on next launch (AppState + SharedPreferences keys app_language; theme uses app_dark_mode).
Shared labels and domain display strings (case status filters, chart axis labels, HAM100-style codes, body locations, symptoms) live in lib/localization/app_display.dart; screens also use AppState.translate(en, th) for page-specific copy. Internal/API values (e.g. stored case status, location keys sent to the backend) stay in English.
Roles & Credentials
Role
Examples
Capabilities
GP
user001/Mock01, user003/Mock03
Create cases, view own cases, make decisions
Doctor
user002/Mock02, user004/Mock04
All GP + view all cases, label rejected cases
Admin
(via users.json)
Full access + model management, training config
Credentials stored in assets/mock_credentials.csv (frontend) and backserver/users.json (backend JWT auth).
Active Learning Workflow
1. Doctor captures lesion image → AI prediction
↓
2. Doctor reviews prediction
├── Confident → CONFIRM (no label needed)
└── Uncertain → REJECT (candidate for labeling)
↓
3. Rejected cases accumulate in metadata
↓
4. Doctor labels rejected cases via Annotate screen
└── Labels saved to AL_Back/db/labels_pool.jsonl
↓
5. Admin triggers retraining (or auto-trigger at threshold)
└── Transfer learning on new labels
↓
6. Candidate model evaluated
└── If better than production → Auto-promote
↓
7. New model deployed, cycle repeats
Our 2025 Senior Project focuses on developing an application for doctors that integrates Active Learning to reduce manual labeling workload. By intelligently selecting data for annotation, the system improves efficiency, supports accurate decision-making, and enhances productivity in the medical field.