← все кейсы · Контроль дистанции

Следит за дистанцией до экрана — прямо с камеры.

Контроль безопасной дистанции — приложение для профилактики близорукости и усталости глаз. Фронтальная камера и Google ML Kit определяют лицо, приложение вычисляет расстояние от глаз до экрана и, если телефон поднесён слишком близко, показывает предупреждение — визуальный индикатор поверх экрана, поверх любого приложения. Всё распознавание идёт на самом устройстве: камера не пишет фото и видео и ничего не отправляет в облако. Это внутренний R&D-продукт студии.

здоровье · профилактика стек · Flutter + ML Kit MVP · собственный продукт

01 · Идея и задача

Чем ближе телефон к глазам, тем сильнее они работают в режиме ближнего видения — а это один из факторов развития близорукости, особенно у детей и подростков. Рекомендация офтальмологов простая: держать экран не ближе 30 см. Но в реальной жизни про это никто не помнит. Идея — переложить контроль на само устройство: пусть оно само замечает, что телефон поднесён слишком близко, и мягко напоминает отодвинуться.

Задача: сделать приложение, которое в фоне определяет расстояние от лица до экрана через фронтальную камеру, сравнивает его с безопасным порогом и в нужный момент показывает заметное предупреждение — поверх любого приложения, которым человек пользуется. При этом критично важно сохранить приватность: никакой записи и отправки изображения, всё распознавание — локально на устройстве.

02 · Что было сложно

  • Измерить расстояние обычной камерой. У телефона нет дальномера — есть только картинка с фронталки. Расстояние оценивается по результатам распознавания лица в Google ML Kit (размер и геометрия лица в кадре) с калибровкой под конкретное устройство и пользователя. Это работа на потоке кадров в реальном времени, а не разовый замер.
  • Предупреждение поверх любого приложения. Польза появляется только если индикатор виден, когда человек сидит в соцсети или читает, а не в самом приложении. Поэтому предупреждение рисуется через системный overlay поверх других приложений — с отдельным разрешением, фоновой работой и автозапуском, чтобы контроль не выключался сам.
  • Фон, батарея и автозапуск. Камера и распознавание, работающие в фоне, — это нагрузка на батарею и зона жёстких ограничений ОС. Пришлось аккуратно работать с разрешениями, оптимизацией батареи и автозапуском, следить за состоянием камеры и восстанавливать её, чтобы сервис был стабильным и предсказуемым.
  • Приватность как требование, а не опция. Камера смотрит на лицо постоянно — поэтому принципиально, что изображение нигде не сохраняется и никуда не передаётся. ML Kit отрабатывает локально, наружу уходит только факт «близко / нормально». Это снимает главный страх пользователя от приложения, которое «всё время смотрит».
  • Калибровка и гибкость порога. Безопасная дистанция у всех разная, поэтому есть выбор стандартных значений и собственная настройка, а ещё — выбор, как именно показывать предупреждение: рамкой вокруг экрана или полосой сверху, чтобы подсказка была заметной, но не раздражающей.

Главная инженерная задача — оценить расстояние до экрана обычной фронтальной камерой и предупредить поверх любого приложения, не сохраняя и не передавая ни одного кадра.

03 · Как это работает

Камера и расчёт дистанции

После выдачи разрешений приложение запускает фоновый контроль: фронтальная камера передаёт кадры в Google ML Kit, тот находит лицо, а приложение по его геометрии оценивает расстояние до экрана и сравнивает с выбранным порогом. На главном экране видно текущее состояние и быстрый доступ к запуску и настройкам.

Главный экран: контроль безопасной дистанции, запуск и настройки
Главный экран: текущая дистанция, запуск контроля и переход к настройкам — распознавание лица идёт на устройстве через Google ML Kit

Безопасный порог и предупреждение

Базовая рекомендация — не ближе 30 см; порог можно настроить под себя или выбрать из стандартных значений. Когда телефон оказывается ближе порога, появляется предупреждение и подсказка отодвинуть устройство; за заметность отвечает выбранная визуализация.

Экран с рекомендацией держать телефон не ближе 30 см
Подсказка о безопасном расстоянии: не ближе 30 см — слишком близкая дистанция нагружает глаза и со временем способствует близорукости

Визуализация поверх экрана

Предупреждение показывается поверх любого приложения через системный overlay. Можно выбрать вид индикатора — рамка по периметру экрана или полоса сверху, — чтобы сигнал был заметен в любой ситуации и при этом не мешал пользоваться телефоном.

Выбор визуализации: рамка вокруг экрана или полоса сверху
Выбор визуализации предупреждения: рамка вокруг экрана или полоса сверху — индикатор рисуется поверх других приложений

04 · Результат

Распознавание ML Kitлицо → дистанция, на устройстве
Порог ≥ 30 смнастраиваемый
Сигнал Overlayповерх любого приложения
Приватность On-deviceкадры не сохраняются и не уходят

Получился рабочий прототип утилиты для здоровья глаз: фоновый контроль расстояния через камеру и ML Kit, настраиваемый безопасный порог, предупреждение системным индикатором поверх любого приложения, выбор визуализации и локальные уведомления. Приложение собрано на Flutter и работает под iOS и Android.

Ключевое отличие от похожих утилит — вся обработка идёт на устройстве: камера ничего не записывает и не передаёт, наружу уходит только состояние «близко / нормально». Firebase используется для служебных функций и уведомлений. Это внутренний R&D-продукт студии, на котором обкатаны работа с камерой, on-device-распознавание лица, системные overlay и фоновые сервисы.

05 · Что дальше

Планы — точнее калибровать дистанцию под устройство и пользователя, добавить статистику (сколько времени экран был слишком близко), детский режим и родительский контроль, гибкие сценарии напоминаний и оформление под публикацию в сторах. Архитектура с фоновым сервисом и overlay позволяет наращивать сценарии, не меняя ядро.

Наработки этого продукта — камера, Google ML Kit, системные overlay и фоновые сервисы — переиспользуются в клиентских проектах, где нужно компьютерное зрение на устройстве или работа поверх других приложений.

Похожий проект

Нужно компьютерное зрение на устройстве или работа поверх экрана?

Распознавание лиц и объектов через камеру, замеры и подсказки в реальном времени, индикаторы поверх других приложений, фоновые сервисы — делаем на Flutter с Google ML Kit и нативными возможностями платформ, с упором на приватность и автономную работу. В первом письме приложите ссылку на этот кейс и опишите идею — пришлём разбор с архитектурой и сметой в течение 24 часов.