An HCI-oriented intelligent vision screening application for convenient, faster, and more accessible daily eyesight self-checks.
English | 简体中文
Overview | Quick Start | Features | How It Works | Contributing
Important
VisionTest is a preventive self-screening tool. It does not replace professional medical diagnosis, hospital examination, or optometry services. If results are abnormal, unstable, or inconsistent with daily experience, users should visit an ophthalmology department or optometry center.
VisionTest is an intelligent vision screening application built around HCI and computer vision. It is designed for students, office workers, and family users who want to monitor their eyesight condition with ordinary hardware: a computer screen and a webcam.
Instead of relying on a fixed printed chart and a fixed testing distance, VisionTest transforms the traditional Tumbling E chart into an interactive digital workflow. The app estimates user distance with camera-based face tracking, calibrates screen PPI with a real-world reference card, and dynamically calculates the on-screen optotype size to keep the test closer to practical visual standards.
- Makes preventive eyesight checks more convenient at home, in dorms, and in offices.
- Reduces the setup burden of traditional fixed-distance chart testing.
- Supports multiple response channels, including hand gestures, voice commands, and keyboard input.
- Adds monocular test compliance checks by detecting whether the correct eye is covered.
- Packages the experience for both browser-based use and desktop distribution with Wails.
- Dynamic Tumbling E scaling based on screen PPI and estimated user distance.
- Camera-assisted face tracking for distance estimation and head-position awareness.
- Monocular screening assistance with eye closure and hand-occlusion detection.
- Multi-modal interaction with gesture, voice, and keyboard responses.
- On-screen PPI calibration using a credit card, campus card, or ID-sized physical reference.
- Local bundled MediaPipe assets under
public/mediapipefor project-controlled runtime delivery. - Web and desktop application workflow powered by React, Vite, TypeScript, Go, and Wails.
- The user calibrates the display using a real card-sized object to estimate screen PPI.
- MediaPipe Face Landmarker estimates the face position and relative distance from the screen.
- VisionTest computes the Tumbling E size from distance, visual acuity level, and calibrated PPI.
- During monocular testing, the system checks whether the non-tested eye is properly covered or closed.
- The user answers through gestures, speech, or keyboard input, and the app advances through acuity levels.
Note
The repository is configured with proxy mirrors to facilitate quick dependency installation in mainland China.
- Node.js 20 or later
pnpm- Go 1.25 or later
- Wails v3 CLI
- A webcam
- A Chromium-based browser is recommended for the web experience, especially when voice recognition is needed
pnpm installpnpm devpnpm buildwails3 devwails3 build- Open VisionTest and grant camera permission.
- Complete PPI calibration with a real card-sized object.
- Choose the eye to test and the preferred response mode.
- Start the test and follow the on-screen or spoken instructions.
- Review the resulting acuity score as a preventive reference only.
- Vision: MediaPipe Tasks Vision
- Frontend: React 19, TypeScript, Vite, Tailwind CSS 4
- UI utilities: Lucide React, Motion, Sonner, Radix-based components
- Desktop shell: Wails v3
- Backend/runtime: Go
.
|-- public/ Static assets and bundled MediaPipe models
|-- src/
| |-- components/ Calibration, camera, and test UI
| |-- lib/ Vision math and utility logic
| |-- App.tsx Main application shell
|-- build/ Wails packaging and platform build config
|-- main.go Wails application entry
|-- app.go Go app scaffold
|-- Taskfile.yml Development and release tasks
|-- package.json Frontend scripts and dependencies
- VisionTest is intended for preventive self-screening, not diagnosis.
- Actual accuracy depends on camera quality, lighting, user posture, screen calibration, and browser/device behavior.
- Voice input depends on browser speech recognition support.
- Test results should be treated as a convenience reference for daily monitoring.
Contributions are welcome. If you plan to improve the screening flow, interaction design, accessibility, or technical accuracy:
- Fork the repository.
- Create a feature branch.
- Keep changes focused and explain the user-facing impact clearly.
- Open a pull request with reproduction steps or screenshots when relevant.
- Open an issue for bugs, reproducible errors, or unclear behavior.
- Use discussions or issue threads for feature ideas and HCI design suggestions.
- For medical concerns, consult a qualified ophthalmology or optometry professional rather than relying on repository support.
VisionTest is co-maintained by @Chaotze, @Aphrody and @qkq5.
This repository ships with the GNU Affero General Public License v3.0. See LICENSE for details.

