распознавание текста для Mac
обновлено · автор Anton Shakirov
часть текста на экране просто не выделяется. кадр видео, которое играет в Chrome, pdf с запретом на копирование, диалог, в котором приложение не даёт тронуть ни слова. hop обводит любой кусок экрана и отдаёт текст обратно — его видно, его можно поправить и скопировать.

| what it is | text recognition inside hop, a menu bar app for macOS |
|---|---|
| price | free — no trial, no pro tier, no account |
| licence | MIT, source on GitHub |
| requires | macOS 14 or later, Apple silicon or Intel |
| works offline | yes |
| data sent anywhere | none |
что распознавание читает на вашем экране
всё, что экран способен показать. hop всё равно, живёт текст в картинке, в видео или в приложении, которое отключило копирование: он читает пиксели, а не файлы.
- слайд вебинара или кадр чужой демонстрации экрана на созвоне
- pdf, в котором не выделяется ни одного слова
- скриншот, который вам прислали в переписке
- сообщение об ошибке от приложения, которое не даёт его скопировать
- фотография документа, чека, книжной страницы
- картинка, которую вы перетащили в окно из Finder
видео — случай с самым большим числом исключений, и он заслуживает отдельного разбора: какие плееры отдают текст сами, какие не отдадут никогда и что делать со вторыми. скопировать текст с видео или из закрытого документа
что Live Text уже умеет и где он кончается
Live Text встроен в macOS и достаёт дальше, чем признаёт большинство страниц на эту тему. фотография в «Фото», картинка на веб-странице, страница в «Просмотре» — текст выделяется так же, как в документе. это бесплатно, это уже на вашем Mac, и если ваш случай этим закрыт, больше ничего не нужно.
видео тоже закрыто, и ещё с Ventura. поставьте ролик на паузу в Safari, QuickTime Player или в быстром просмотре по пробелу — кадр разбирается как картинка, и текст на нём выделяется. кто до сих пор говорит, что Mac не умеет снимать текст с остановленного видео, отстал на три выпуска.
у этого поведения есть имя в документации Apple: вид плеера «пытается найти объекты, текст и людей, когда вы ставите воспроизведение на паузу», и с macOS 13 оно включено по умолчанию (страница английская): AVPlayerView.allowsVideoFrameAnalysis
куда он не дотягивается
граница следует из той же фразы: разбор принадлежит плееру Apple. программа, которая рисует видео сама, его не получает — Chrome, Firefox, VLC. не получает и окно, которое вообще не картинка: диалог, лицензионный ключ в установщике, таблица в утилите без кнопки копирования. демонстрация экрана на созвоне — это чужие пиксели, приехавшие видео, так что выделять там тоже нечего.
этот зазор и есть причина, по которой модуль существует. с видео система справляется сама, а вот произвольный прямоугольник она не прочитает. когда вы читаете прямоугольник, уже неважно, кто нарисовал пиксели.
отсканированный pdf на диске — другая работа и другой модуль: он не на экране, и нужен весь файл, а не та часть, которую видно. конвертер вытащит текст из pdf
так нужно ли это, чтобы вытащить текст из картинки
если пиксели принадлежат тому, что Apple узнаёт, — фотографии, странице pdf, ролику на паузе в Safari или QuickTime, — берите Live Text и дальше эту страницу не читайте. простой случай заканчивается в ту секунду, когда пиксели рисует кто-то другой, и бесплатный путь перестаёт быть «выделить и скопировать», а становится «снять скриншот, открыть скриншот, выделить, скопировать, убрать файл».
| что у вас есть | бесплатный путь | с hop |
|---|---|---|
| фотография, чек, скриншот в «Просмотре» | Live Text: выделяется как текст | не нужен — берите Live Text |
| ролик на паузе в Safari или QuickTime | Live Text читает кадр ещё с Ventura | тот же результат, менять инструмент незачем |
| ролик на паузе в Chrome, Firefox или VLC | снять скриншот и прочитать скриншот через Live Text | обвести область, текст возвращается |
| диалог с ошибкой, в котором ничего не выделяется | скриншот, открыть, выделить, убрать файл | обвести диалог прямо там, где он стоит |
| слайд в чужой демонстрации экрана | успеть снять скриншот, пока не пролистнули | обвести, пока он на экране |
| таблица или кусок кода | возвращается одной лентой, строки собираете сами | переносы строк сохраняются |
| та же работа сорок раз за день | сорок скриншотов, которые потом убирать с рабочего стола | хоткей и рамка |
каждое распознавание одновременно ложится в историю буфера, поэтому текст, снятый час назад, всё ещё там, даже если вы его никуда не вставляли. как устроена история буфера
как снять текст с картинки на Mac
обведите кусок экрана
кнопка «выделить на экране» даёт системный прицел, которым вы очерчиваете нужный кусок, — жест тот же, что у скриншота. текст возвращается в окне, а не сразу в буфер, и окно здесь и есть смысл: вы читаете, правите символ, который шрифт подсунул не тот, и копируете всё целиком или только ту строку, которая вам была нужна.
хоткей, языки, которые он читает, и куда попадает результат — подробная инструкция на вашем языке: распознавание текста в инструкции
или бросьте картинку в окно
если картинка уже лежит файлом, обводить экран — крюк. перетащите её в окно из Finder или вставьте через ⌘V: читается то же самое, и окно с результатом то же.
ничего не пропадёт, если закрыть это окно слишком быстро: распознанное лежит в истории вместе со всем, что вы сегодня копировали. найти то, что копировали раньше
переносы строк выживают
большинство распознавалок возвращает одну длинную ленту слов. таблица превращается в кашу, кусок кода — в мусор, и на починку результата уходит больше времени, чем ушло бы на то, чтобы перенабрать его руками.
hop оставляет переносы там, где их нашёл. таблица остаётся таблицей, фрагмент кода — фрагментом кода, а адрес — тремя строками вместо одной. мелочь ровно до первого раза, когда вы вставляете таблицу на двенадцать строк и не трогаете её после.
коды читаются тем же проходом
коды читаются вместе с текстом — отдельного режима нет, и переключаться во второе приложение не нужно. если в распознанном оказался веб-адрес, рядом появляется кнопка «открыть ссылку». только веб-адреса: отсканированный код — это ввод от постороннего, поэтому телефон, пароль от Wi-Fi или визитка остаются обычным текстом и никуда сами не уходят.
снять код с экрана — своя работа, со своими причинами и своими граблями: qr-код нельзя проверить глазами до того, как по нему пойдёшь. как отсканировать qr-код на Mac
движок тот же, и до него можно дотянуться самому
одна вещь в этом модуле вообще не наша. распознаёт Vision от Apple — тот самый каркас, на котором стоит Live Text, — и он ни за каким приложением не спрятан: короткий файл на Swift дотягивается до него из терминала, с одними Command Line Tools и без Xcode.
мы запустили это, пока писали страницу, на macOS 26.6.2 и без установленного Xcode. пятнадцать строк вокруг VNRecognizeTextRequest прочитали тестовую картинку и вернули её три строки в исходном порядке, с переносами. тот же вызов сообщает, сколько языков принимает движок: тридцать, и скачивать для этого ничего не надо.
запрос — открытый api, и так с macOS 10.15, так что никакого обходного пути тут нет (страница английская): VNRecognizeTextRequest
значит, ценность модуля не в распознавании. движок стоит на каждом Mac, бесплатно, и открыт любому, кто готов написать этот файл и потом где-то его держать. чего у скрипта нет, так это ответа на вопрос, куда целиться: он берёт файл, а вся задача была в том, что текст на экране и ни в каком файле не лежит. hop — это прицеливание, а не чтение.
с вашего Mac ничего не уходит
распознавание идёт на месте, на том же движке Vision. картинка никуда не загружается, ваш экран не видит ни один сервер, и всё работает с выключенным Wi-Fi — здесь это важнее обычного, потому что обводят люди счета, договоры и чужие слайды.
у hop нет ни учётных записей, ни профилей, ни телеметрии. единственное, что он отправляет, — свой номер версии, когда проверяет обновление.
чтобы обвести область, нужно разрешение прочитать то, что внутри, и macOS спросит его в первый раз. не всякому экранному инструменту это нужно: цвет берётся системной лупой, которая отдаёт один пиксель и не требует ничего. пипетка и почему она ничего не просит
frequently asked questions
- умеет ли macOS сама вытаскивать текст из картинки?
- да — Live Text делает это в «Фото», «Просмотре», быстром просмотре и Safari, а с Ventura и на видео, поставленном на паузу в плеерах Apple. он кончается там, где пиксели рисует кто-то другой: Chrome, Firefox, VLC или окно приложения, которое не картинка.
- чем это отличается от Live Text?
- Live Text работает с тем, что система опознала как картинку или как играющее видео. hop обводит любой прямоугольник экрана, поэтому становится неважно, что под ним: видео в Chrome, диалог, чужая демонстрация экрана.
- работает ли без интернета?
- да. распознавание идёт на вашем Mac, на движке Vision от Apple. ничего не загружается, и подключение ни для чего не нужно.
- какие языки он распознаёт?
- те, что знает системный движок, — список приходит от macOS, а не от нас. на macOS 26.6.2 он назвал тридцать, с основными европейскими и азиатскими письменностями, и скачивать для этого ничего не надо.
- можно ли обратиться к Vision из терминала самому?
- можно. короткий файл на Swift вокруг VNRecognizeTextRequest запускается с одними Command Line Tools. только читает он файлы — навести его на прямоугольник экрана пришлось бы вам самим.
- это правда бесплатно?
- полностью. ни пробного периода, ни платной версии, ни того, что надо открывать за деньги. hop с открытым исходным кодом, и модуль распознавания открыт всем так же.
- нужно ли ему разрешение на запись экрана?
- чтобы обвести область — да, и macOS спросит в первый раз. ничего не записывается и не хранится: кадр читается и выбрасывается. перетащенной в окно картинке разрешение не нужно вовсе.
other tools in hop
- qr code scannerread the code where it sits on screen — no reaching for your phone.
- keyboard lockwipe the keyboard clean without shutting the Mac down.
- vpn switcherevery vpn your Mac knows about, one switch each.
what people do with this
об авторе

Anton Shakirovсоздаёт hop
создаёт hop и все страницы этого сайта. девятнадцать инструментов под одной иконкой в menu bar, MIT и открытый код. на issue и письма отвечает сам.