Реализация AI-перевода через камеру (AR Translation) в мобильном приложении
Google Translate «мгновенный перевод» — это и есть AR Translation: камера видит текст, поверх него в реальном времени отображается перевод на нужный язык, встроенный в изображение как будто он там и был напечатан. Реализовать это самостоятельно сложнее, чем кажется: нужна OCR, перевод, inpainting фона под стёртым исходным текстом и рендер нового текста с правильным шрифтом и размером.
Архитектура AR Translation pipeline
Каждый кадр с камеры проходит через несколько этапов:
Кадр → Text Detection → OCR → Translation → Inpainting → Text Overlay → Render
Text Detection. Находим bounding boxes текста в кадре. На iOS: VNRecognizeTextRequest (Vision framework) с recognitionLevel: .fast для реального времени. На Android: ML Kit Text Recognition v2. Обе библиотеки работают on-device, не требуют сети. Vision framework возвращает VNTextObservation с bounding box в нормализованных координатах — конвертируем в screen coordinates с учётом ориентации буфера.
OCR. VNRecognizeTextRequest с recognitionLevel: .accurate — слишком медленно для каждого кадра. Стратегия: .fast для detection, .accurate только при стабилизации текста (тап пользователя или стационарное положение телефона). Stable frame detection: сравниваем bounding boxes между кадрами — если deviated меньше 5px → текст стабилен → запускаем accurate OCR.
Перевод. Два варианта:
| On-device (ML Kit Translate) | Cloud API (DeepL, Google Cloud) | |
|---|---|---|
| Latency | 10–50 мс | 200–800 мс |
| Качество | Среднее | Высокое (DeepL особенно) |
| Offline | Да (модель ~30 MB) | Нет |
| Стоимость | Бесплатно | По запросам |
Для лайв-трансляции с камеры — только on-device. Для режима «сфотографировал → перевёл» — cloud API с DeepL для лучшего качества.
Inpainting и наложение текста — самая сложная часть
Простая реализация: рисуем прямоугольник цвета фона поверх исходного текста, пишем переводной текст сверху. Результат — грубый белый прямоугольник, не вписывается в изображение. Правильная реализация:
Определение цвета фона. Берём пиксели вокруг bounding box, вычисляем медианный цвет — заливаем прямоугольник им. Работает для однородных фонов (белая стена, лист бумаги).
Texture inpainting для сложного фона. CoreImage CIInpaintingFilter (iOS 16+) или кастомный convolution kernel для заполнения области текстурой фона. Для реального времени — слишком медленно, используем только в режиме статичного фото.
Соответствие шрифта. Определяем размер исходного текста из bounding box, подбираем UIFont / TextPaint с похожим размером. Определить конкретный шрифт по OCR-результату — нерешённая задача для большинства кейсов. Используем системный sans-serif.
Правый-налево (RTL) языки. Arabic, Hebrew — текст идёт справа налево, UILabel и TextView нужно настраивать semanticContentAttribute: .forceRightToLeft. При наложении на изображение: NSParagraphStyle.writingDirection = .rightToLeft.
Стабилизация и производительность
На каждом кадре 30 FPS запускать полный pipeline нельзя. Throttling:
- Text detection: каждые 3–5 кадров
- OCR: только при стабилизации или тапе
- Перевод: дебаунс 500 мс на изменение текста
На iPhone 12+ Metal Performance Shaders ускоряют Vision pipeline. На Android — GPU Delegate для ML Kit через GpuDelegateV2.
Результаты кешируем по хешу OCR-текста: один и тот же текст не переводим дважды за сессию.
Что входит в работу
- Выбор архитектуры: on-device vs cloud, livecam vs photo mode
- Реализация OCR + translation pipeline
- UI для выбора языков (с автодетектом исходного языка)
- Наложение переводного текста на изображение
- Offline-режим с загружаемыми языковыми моделями (ML Kit)
Сроки: базовый AR translation для статичных фото — 3–5 недель. Real-time livecam перевод с on-device ML и offline-режимом — 6–10 недель. Стоимость рассчитывается индивидуально.







