Face-expression smartphone control for people with severe physical disabilities
MimicEase is a free, open-source Android accessibility app that lets users with ALS, cerebral palsy, spinal cord injuries, and other motor disabilities control their smartphones entirely through facial expressions. No touch, no voice commands — just your face.
All processing happens on-device. No data ever leaves your phone.
People with severe motor impairments often cannot use touchscreens or styluses. Existing solutions are expensive, require specialized hardware, or depend on cloud services that raise privacy concerns. MimicEase turns any modern Android phone's front camera into a fully capable, privacy-respecting input device.
- 52 facial expression triggers — powered by Google MediaPipe Face Landmarker (cheek puffs, eyebrow raises, mouth gestures, jaw open, tongue out, and more)
- 3 interaction modes
Expression Only— fixed-coordinate taps and system actions triggered by expressionsCursor Click— Bluetooth mouse moves the cursor; expressions clickHead Mouse— head movement controls an on-screen cursor with dwell-click support
- 35+ mappable actions — back, home, scroll, swipe, app launch, volume, media control, screen brightness, and more
- Multi-profile support — create different profiles for different postures or apps
- Global toggle — enable/disable via volume key combo, a facial expression, Quick Settings tile, or broadcast (Bixby Routines / Gemini)
- EMA smoothing — exponential moving average filter reduces jitter and false triggers
- Hold duration + cooldown — prevents accidental activations
- Fully offline — zero network access; all computation runs on-device via MediaPipe
Front Camera (ImageProxy)
↓
MediaPipe Face Landmarker [52 BlendShapes + head pose matrix]
↓
Expression Analyzer [EMA filter, consecutive-frame gate]
↓
Global Toggle Check
↓
Trigger Matcher [threshold + holdDuration + cooldown]
↓
Action Executor [GestureDescription, Intent, AudioManager]
↓
Android System [tap, swipe, back, home, app launch, …]
In Head Mouse mode, the head-pose transformation matrix is additionally routed through HeadTracker → DwellClickController → an overlay cursor rendered on screen.
(Coming soon — contributions welcome)
| Requirement | Minimum |
|---|---|
| Android | 10 (API 29) |
| Target SDK | 35 |
| Front camera | Required |
| Accessibility service | Must be enabled manually in Settings |
| Internet | Not required |
Modern Android blocks direct APK installation in most cases. Use the Windows Installer below — no developer tools needed.
Bundles portable ADB and walks you through every step. Works over USB or Wi-Fi. Supports 9 languages.
- Go to the Releases page and download
MimicEase-vX.X.X-installer.zip - Extract the ZIP to any folder
- Double-click
install.bat← start here - Select your language and follow the on-screen instructions
📄 For detailed instructions and troubleshooting, open
INSTALL_GUIDE.mdinside the ZIP.
⚠️ Do not double-clickinstall.ps1— it opens in Notepad. Always useinstall.bat.
Package contents after extraction:
MimicEase-vX.X.X/
├── INSTALL_GUIDE.md ← read this if anything goes wrong
├── install.bat ← double-click to start
├── install.ps1 ← runs automatically (do not open directly)
├── MimicEase-vX.X.X.apk
└── adb/ ← portable ADB tools (no install needed)
- Download
MimicEase-vX.X.X.apkfrom the Releases page - Enable Install from unknown sources in Android Settings → Security
- Open the downloaded APK and install
- Follow MimicEase onboarding and enable the accessibility service
git clone https://github.com/<your-org>/MimicEase.git
cd MimicEase
# Debug APK
./gradlew assembleDebug
# Install directly to a connected device
./gradlew installDebugPrerequisites: Android Studio Hedgehog or newer, JDK 17+.
| Permission | Purpose |
|---|---|
CAMERA |
Real-time face detection via front camera |
FOREGROUND_SERVICE |
Keep the face-detection service running while the screen is on |
FOREGROUND_SERVICE_CAMERA |
Required on Android 12+ for foreground camera access |
SYSTEM_ALERT_WINDOW |
Optional: show the head mouse cursor overlay in HEAD_MOUSE mode only |
VIBRATE |
Haptic feedback on toggle events |
RECEIVE_BOOT_COMPLETED |
Optional auto-start on device boot |
REQUEST_IGNORE_BATTERY_OPTIMIZATIONS |
Optional: help prevent the OS from aggressively suspending the foreground service (user may safely decline) |
| Accessibility Service | Execute gestures and system actions on behalf of the user |
MimicEase follows Clean Architecture with three layers:
app/
├── data/ # Room DB · DataStore · Repository implementations
├── domain/ # Pure Kotlin models & repository interfaces (no Android deps)
├── presentation/ # Jetpack Compose screens + ViewModels
├── service/ # Background services & core logic
├── di/ # Hilt dependency injection modules
└── navigation/ # Compose Navigation graph
gameFace/
└── FaceLandmarkerHelper.java # MediaPipe face-detection engine (Java)
Tech stack: Kotlin 2.0 · Jetpack Compose · Material 3 · Hilt · Room · DataStore · CameraX · MediaPipe · Coroutines/Flow · Gson · Timber
| Language | Region |
|---|---|
| English | Default |
| 한국어 | Korea |
| 中文(简体) | Mainland China |
| 中文(繁體) | Taiwan / Hong Kong |
| 日本語 | Japan |
| Español | Spanish-speaking regions |
| Français | French-speaking regions |
| Deutsch | Germany / Austria / Switzerland |
| Português | Brazil / Portugal |
| Expression | Example Action |
|---|---|
| Raise left eyebrow | Scroll up |
| Puff left cheek | Go back |
| Open mouth wide | Go home |
| Smile | Volume up |
| Tongue out | Take screenshot |
| Blink right eye | Launch favorite app |
Every trigger is fully customizable — threshold, hold duration, cooldown, and action are all configurable per profile.
Contributions of all kinds are welcome — code, translations, testing on new devices, and accessibility feedback from users with disabilities.
- Fork the repository.
- Create a feature branch:
git checkout -b feat/my-feature - Follow the developer guidelines.
- Open a pull request with a clear description.
Please keep the domain/ layer free of Android dependencies and use System.currentTimeMillis() instead of SystemClock in service-layer code (required for unit-test compatibility).
# Unit tests (no device needed)
./gradlew :app:test
# Quick Kotlin compilation check
./gradlew :app:compileDebugKotlinTests cover: EMA filter logic (ExpressionAnalyzerTest), trigger matching (TriggerMatcherTest), and Gson serialization (ActionSerializerTest).
Copyright 2025 MimicEase Contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
- Google Project GameFace — face-control reference implementation
- MediaPipe — on-device ML face landmarking
- CameraX — Android camera abstraction
MimicEase is built with care for people who need it most. If this project has helped you or someone you know, please consider starring the repository or sharing it with accessibility communities.