TGViewer
Мобильная разработка Мобильная разработка @mobi_dev · 13.2K subscribers
Post #4622 3.67K
Оптимизация OCR на мобильных: с 5 секунд до 1 (и даже меньше)

Автор статьи на DEV Community разрабатывает приложение, которое захватывает экран телефона, распознаёт текст и переводит его. Изначально весь цикл занимал 4–5 секунд. Для реалтайм сценариев (например, перевод игрового меню или чата) это неприемлемо. Задача была уложиться в секунду.

Профилирование показало, что 80% времени съедали два этапа: предобработка изображения (800мс) и OCR-инференс (2500мс). Остальное — захват экрана, вызов API перевода, рендеринг — тоже в итоге оптимизировали, но основной выигрыш был не там.

В качестве выводов автор предлагает пять советов, которые пригодятся всем, кто работает с OCR на устройстве:

1. Не скармливайте OCR-движку полноразмерное изображение. Экранный текст высококонтрастный, поэтому даунскейл до ~1280px по большей стороне почти не роняет точность, зато кратно ускоряет обработку.

2. Сначала дешёвая детекция текстовых областей, потом дорогой OCR только по ним. На типичном экране приложения текст занимает 30–40% площади: нет смысла гонять инференс по остальным 60–70%.

3. Используйте модель, заточенную под конкретную письменность. Если прогнать латинский распознаватель по китайскому, японскому или корейскому тексту, потратите время и получите мусор. Определяйте тип письменности заранее: по настройкам пользователя или по предыдущим результатам.

4. Параллельте обработку регионов. Если на экране несколько текстовых блоков, их можно распознавать одновременно на разных ядрах. На мобильных чипах это может дать 20–30% ускорения.

5. Кешируйте результаты через перцептуальный хеш (короткий «отпечаток» изображения, основанный на визуальном сходстве, а не побайтовом совпадении). Экран между захватами часто почти не меняется (мигнул курсор, сдвинулась анимация), а перезапускать OCR на практически идентичных кадрах как минимум странно.

Итог экспериментов: на мидренж-чипе (Snapdragon 695) пайплайн ускорился с ~4100мс до ~800мс. На флагманах до 400-500мс.

Код можно посмотреть в оригинале: https://dev.to/joe_wang_6a4a3e51566e8b52/optimizing-ocr-performance-on-mobile-from-5-seconds-to-under-1-second-332m

@mobi_dev (теперь и в Max)
  • ❤ 8
  • 🔥 5
  • 👍 2
  • 😎 1
More from @mobi_dev
  1. Sep 20, 2026Как ProfilingManager на Android 15+ помогает искать причины тормозов в продакшене Profilin…
  2. Sep 20, 2026Как использовать свайп-действия вне List в SwiftUI В SwiftUI свайп-действия вроде удаления…
  3. Sep 20, 2026Как переносить сложные Android-экраны на Jetpack Compose: опыт TikTok Команда TikTok перен…
  4. Sep 19, 2026Как управлять кнопками панели инструментов в SwiftUI Одна и та же панель в SwiftUI ведёт с…
  5. Sep 19, 2026Как безопасно освобождать временные ресурсы с defer в Swift В Swift блок defer выполняется…
  6. Sep 19, 2026Как Flutter готовит приложения к новым версиям iOS Между WWDC и стабильным релизом iOS у к…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →