Экранный OCR-переводчик для macOS: читаем статьи и смотрим видео без переключения окон

При чтении технической литературы, англоязычных статей или просмотре видео с субтитрами я постоянно спотыкался об одну и ту же проблему.

Встречаешь незнакомый термин или редкое слово и начинается возня: выделить мышкой, скопировать в буфер, переключиться в браузер, вставить в переводчик, прочитать значение, вернуться обратно к чтению.

Если текст находится в видеоплеере, на схеме или изображении, выделить его вообще нельзя, приходится набивать слово руками в строке поиска. За эти секунды нить мысли теряется, а браузерные расширения тут бессильны, так как они работают только внутри веб-страниц.

Чтобы переводить слова в любом месте экрана по одной клавише, я написал для себя небольшую утилиту — Lensy.

Lensy Preview
Lensy Preview

Как это устроено для пользователя

Сценарий простой: наводишь курсор на любое слово на экране и нажимаешь комбинацию Option + T.

Рядом с курсором сразу всплывает плавающее окно с информацией о слове. Так как утилита задумывалась для комфортного чтения и изучения языка, это не просто перевод в одно слово:

  • транскрипция и произношение;

  • части речи и основные значения;

  • уровень сложности по шкале CEFR (от A1 до C2), чтобы понимать, насколько слово редкое;

  • частотность и стиль (разговорный, сленг, формальный);

  • пара контекстных примеров в реальных предложениях.

Если значение слова сильно зависит от контекста статьи или возникают иные сложности с пониманием, прямо в карточке есть кнопка «Спросить AI» — можно задать уточняющий вопрос без переключения в отдельный чат.

Все запросы автоматически сохраняются в локальную базу на компьютере. По нажатию Option + H открывается окно истории с быстрым поиском, где можно отслеживать все предыдущие переводы.

Архитектура и техническая реализация

Главная задача заключалась в том, чтобы сделать пайплайн быстрым и приватным. Вся цепочка от нажатия клавиши до появления информации занимает около 2–4 секунд.

[Хоткей Option + T]
       ↓
[ScreenCaptureKit] — локальный кроп области вокруг курсора в Retina-разрешении
       ↓
[Apple Vision OCR] — локальное распознавание текста на Neural Engine / GPU
       ↓
[Groq API] — структурированный разбор через LLM по бесплатному ключу
       ↓
[SwiftUI HUD] — позиционирование плавающего окна рядом с курсором

1. Захват экрана (ScreenCaptureKit)

Используется системный фреймворк ScreenCaptureKit. При срабатывании глобального хоткея приложение берет текущие экранные координаты курсора, вычисляет прямоугольник вокруг него и делает моментальный кроп в исходном Retina-разрешении дисплея, на котором находится указатель.

2. Распознавание на чипе (Apple Vision)

Отправлять весь скриншот экрана в облачные нейросети для OCR — плохая идея как с точки зрения трафика, так и с точки зрения приватности (на экране может быть личная информация).

Поэтому OCR выполняется полностью локально на Mac через фреймворк Apple Vision (VNRecognizeTextRequest). Фреймворк автоматически определяет язык, работает быстро за счет задействования Apple Neural Engine, а сам графический снимок экрана уничтожается в памяти сразу после распознавания.

3. Генерация карточки (Groq API)

В сеть уходит исключительно распознанная текстовая строка. Для генерации структурированного ответа используется Groq API (модели с очень низким Time-to-First-Token). Ответ парсится и передается в окно плавающей панели.

4. Безопасность ключей и локальная база

  • Ключ API не хранится в открытом виде в UserDefaults или текстовых файлах. Приложение работает напрямую с системной связкой ключей macOS Keychain через методы SecItemAdd и SecItemCopyMatching.

  • История переводов сохраняется в локальную базу SQLite (в режиме WAL для быстрого асинхронного чтения без блокировки интерфейса).

Нюансы и системные требования

  • Совместимость: macOS 14 Sonoma или новее. Нативно работает на Apple Silicon M и Intel.

  • Разрешения: Требуются стандартные системные права на «Запись экрана» (для работы ScreenCaptureKit) и «Универсальный доступ» (для глобального хоткея).

  • Модель распространения: Приложение полностью бесплатное. Используется концепция BYOK (Bring Your Own Key) — нужен свой бесплатный ключ Groq, который за минуту генерируется на официальном сайте консоли Groq.

  • Нотаризация: Платного сертификата Apple Developer у меня пока нет, поэтому при первом открытии macOS покажет стандартное предупреждение. Открывается штатно: Правый клик по приложению → «Открыть».

  • Более подробная инструкция по установке и использованию находится в установочном .dmg файле.

Ссылки

Буду рад конструктивной критике архитектуры, багрепортам и предложениям в комментариях. Насколько вам удобен такой хоткей-сценарий при чтении, и имеет ли смысл добавить поддержку полностью локальных моделей (через Ollama или MLX) в будущих апдейтах?