На самом деле, всё очень логично. Если бы не Lingvo, FineReader’а могло бы и не быть. Началось всё с масштабного и амбициозного комплекса под названием Lingvo Systems. С его помощью человек мог отсканировать текст на одном языке, пропустить его через программу и получить перевод, правда, черновой, но для понимания смысла его было достаточно.
В Lingvo Systems были объединены четыре программы: от сторонних компаний — распознавалка символов, корректор, переводчик, а также наш словарь Lingvo. И самым слабым звеном было как раз распознавание: программу нужно было долго обучать каждому шрифту, но даже после этого качество оставляло желать лучшего. Программа должна была встретить по крайней мере несколько экземпляров одной буквы и каждый раз нуждалась в подсказке. Понемногу она «прозревала» и начинала понимать все больше символов. Так проходил процесс обучения. Но как только менялся шрифт или хотя бы его размер, все приходилось повторять сначала.
Стоит сказать, что тогда, в начале 90-х, в организациях, отпочковавшихся от различных НИИ, уже начали разрабатывать свои OCR-системы (оптическое распознавание символов). Это была довольно востребованная технология – качественное распознавание было нужно не только нам для нашей Lingvo Systems, но и рынку. И у нас был выбор – ждать, пока кто-то другой сделает крутую программу, или разработать свою собственную.
Мы решили не ждать. Конечно, задача казалась нетривиальной: проблемой распознавания символов занимались целые научные институты, а у нас такого опыта не было. Но мы были молоды и амбициозны, считали, что любые задачи нам по плечу, поэтому с энтузиазмом взялись за разработку качественной программы.
Начали создавать программу мы в ноябре 1992 года, а закончить планировали к маю 1993. Отсутствие качественной программы распознавания существенно мешало продажам, конкуренты не дремали, поэтому нам надо было спешить. Понимая, что разработать всю технологию с нуля в такой срок невозможно, приобрели некоторые наработки у молодого учёного, который в свободное время дома работал над похожей программой – без особой цели, просто из личного интереса к предмету.
Его технология была в состоянии, далёком от коммерческого применения, и мы приложили массу усилий, чтобы программа научилась выдавать полезный результат. Одно дело – экспериментальная разработка, другое – работающий продукт. Исходно код программы был разработан под MS DOS, а нам нужно было перенести все под Windows. Кроме того, технология поддерживала лишь один простейший формат изображений (несжатый BMP), а от коммерческого продукта требовалась поддержка всех основных на тот момент форматов – хотя бы формата TIFF. Но в те времена это был очень неустоявшийся формат, каждый его писал, как хотел: то с выравниванием, причем разным, то без, то в прямом варианте, то в негативе. В общем, пришлось повозиться, и все равно еще долго находились файлы TIFF, которые вызывали проблемы с чтением.
Ну и самое главное: в системе практически не было готовых описаний символов, а инструменты для создания этих описаний отсутствовали вовсе. В качестве такого инструмента использовался набор больших текстовых файлов, в которых в псевдографическом виде были прочерчены обобщенные контуры символов. Их полагалось править и улучшать прямо в этом файле в обычном текстовом редакторе. В какой-то момент Давид Ян лично сел за подготовку данных для системы – до этого несколько девушек, нанятых на эту работу, отказались от неё, очень тяжело было. Инструмент был очень неудобный, а работа была большая, сложная и очень нудная. Надо было часами листать огромные текстовые файлы, что-то там высматривать и править, изучая результаты тестовых прогонов. Работа казалась вечной, прогресс происходил мелкими шажками. Нужна была крепкая психика, чтобы справляться с этим. И Давид два месяца без выходных каждый день по 12-14 часов доводил до ума базу распознавания.
Параллельно с этим мы начали вникать в предметную область. Общались со специалистами, познакомились с Александром Львовичем Шамисом – выдающимся учёным, который занимался практическими и теоретическими проблемами искусственного интеллекта, разрабатывал прикладные технологии в области машинного восприятия (Александр Львович до сих пор работает научным консультантом в ABBYY). И к моменту выпуска FineReader 1.0 мы уже знали, какой должна быть следующая версия. Вы спросите, почему всё то хорошее, что мы придумали, не вошло в первую версию – мы ответим, что первую версию нужно было делать быстро. Компании нужны были деньги – без первой версии у нас бы не хватило денег на разработку следующей. Следующая версия была существенно лучше первой – даже не на голову, а на много голов. Она делала значительно меньше ошибок, намного лучше справлялась со сложными проблемами, существенно лучше сохраняла форматирование и по тем временам имела просто рекордную точность работы.
Конечно, мы подошли к разработке с умом, представили себе, как должна выглядеть идеальная программа. И у нас сразу сложилось два преимущества – независимость от шрифта и многоязычность.
С многоязычностью всё просто: очевидно, что многие технические тексты, даже написанные на русском, содержат довольно много слов и терминов на латинице, чаще всего на английском. Но в то время об этом почему-то никто не задумывался, и первые системы распознавания понимали только один язык. А мы специально включили в программу поддержку русского и английского языков, чтобы такие тексты можно было качественно обработать. Здесь нам помогло наличие в команде Владимира Селегея, который имел значительный опыт в разработке средств проверки правописания для различных языков. Вообще, с тех пор и поныне словарная поддержка является сильной стороной нашей технологии распознавания.
Независимость от шрифта (омнифонтовость) означает, что программу не нужно было настраивать для распознавания каждого нового шрифта, то есть она распознаёт символы практически любых размеров и начертаний. Наш FineReader был первой омнифонтовой программой, поддерживающей кириллицу. Сейчас-то мы уже привыкли, что, если программа не распознала шрифт, значит, он какой-то очень сложный или причудливый, а тогда даже для обычных книжных шрифтов приходилось проводить обучение. Шаг влево, шаг вправо – и программа не может воспринять даже тот шрифт, который вообще-то знает. Например, если он другого размера или качество изображения хуже.
Так выглядела коробка первого FineReader:
Сразу же после выпуска программы к ней возник огромный интерес. Спрос был большой, и существовавшие до появления FineReader программы его не удовлетворяли. Нам повезло — мы оказались в правильном месте и в правильное время.
Первая версия FineReader’а вышла тиражом 500 экземпляров. В первый месяц мы продали больше сотни копий – для тех времён это было эпохальное число! Даже продажи Lingvo, уже очень популярного в то время и стоившего в несколько раз дешевле, редко доходили до 100 экземпляров в месяц.
Конечно, нам предстояла еще большая работа, чтобы довести программу до высочайшего уровня. И, кстати, помогла нам в этом конкурентная борьба с одной из российских компаний. В результате в пылу жаркой конкуренции мы создали продукт, оказавшийся лучше многих иностранных аналогов.
Выпуск второй версии FineReader сопровождался ещё одной интересной историей. FineReader 2.0 был 32-битным приложением. Мы запланировали его выпуск на весну 1995 года, и собирались подгадать прямо под выпуск Windows 95 (ранее Microsoft объявляла, что новая версия Windows выйдет именно в апреле). Новая Windows выгодно отличалась от старой, мы понимали, что люди станут сразу делать апргейд и наши продажи пойдут в гору. Но при этом мы имели «запасной аэродром» в виде компоненты Win32s – дополнения к 16-битной Windows 3.1x, которая позволяла запускать под нее специально адаптированные 32-битные приложения. Но тут возникло одновременно две проблемы: Microsoft перенесла выпуск Windows 95 на август, а в Win32s версии 1.2 обнаружилась ошибка с поддержкой Unicode, из-за которой русские буквы в интерфейсе не отображались. Пришлось срочно связываться с Microsoft, что в то время было делом практически невозможным, – это был крупнейший монополист на рынке ПО, от которого зависело почти все в индустрии, и ожидать от него реакции на нужды небольшой компании в далекой России с мизерным для Microsoft рынком сбыта было бы безумием.
Но случилось чудо: та же проблема оказалась у компании Autodesk, которая была стратегическим партнером Microsoft. В результате нас с Autodesk объединили в один кейз и выделили специального менеджера, который вступил с нами в переписку. В результате удалось договориться, чтобы в версии 1.3, которая, правда, вышла одновременно с Windows 95, эту ошибку исправили. А до того мы нашли обходной вариант – полученная версия не работала корректно под Windows 95, зато работала до поры до времени в Windows 3.1x.
Так выглядел FineReader 1.3:
Вообще, наша рисковая затея с выпуском 32-битного коробочного продукта испортила нам много крови. 16-битная Windows была еще широко распространена, а Win32s не отличалась стабильностью. Помню, как почти неделю мы ловили какую-то жуткую ошибку в недрах самой Win32s с помощью отладчика ядра (kernel debugger) через com-порт в командно-строчном режиме. Нашли проблему – что-то неправильно работало в системном аллокаторе памяти, и смогли придумать обход. Зато новый FineReader блистал на Windows 95, будучи родным для него приложением, а 32-битный режим был очень важен для программы OCR, так как позволял значительно оптимизировать работу с большими данными в памяти, что типично для задач распознавания. Это дало нам фору на много лет вперед перед конкурентами и во многом предопределило наш успех на рынке лицензирования технологии распознавания.
А вот FineReader 2.0:
Программа загружалась с четырёх дискет:
Руководство пользователя:
Конечно, вы ждёте скриншотов. Вот как выглядел интерфейс FineReader 3.0:
FineReader стал знаковой программой для нас. Именно с ним мы вышли на международный рынок. Сегодня эту программу используют более 20 миллионов людей в мире. А технологию распознавания текстов, лежащую в основе FineReader, лицензируют крупнейшие мировые компании – Microsoft, Samsung, Fujitsu, Panasonic и многие другие.
Тогда, 22 года назад, мы и предположить не могли, куда все зайдет. А сегодня понимаем, что добиться такого впечатляющего результата смогли благодаря:
• Большой и упорной работе. Да-да, из последних сил, но с колоссальным драйвом (помните про 12-14 часов в день без выходных ).
• Умению найти и создать конкурентные преимущества – те самые многоязычность и независимость от шрифта.
• И смелости. Теперь-то мы понимаем, как важно не бояться преград на пути.
Комментарии (21)
AllexIn
16.12.2015 02:18+14Смелость…
Чем дальше в лес, тем хуже с этим.
Смотрю на некоторые проекты, которые вел в прошлом… И понимаю, что взялся за них по дурости… Что не было у меня с тем опытом и навыками сделать такого уровня ПО… А ведь получилось.
А сейчас все сложнее браться за большие задачи… Все чаще кажется, что задача неподъемная… Хотя по факту все дело только в опыте… Верните меня на 10 лет назад… Когда любая задача казалась простой. :)))babylon
16.12.2015 03:25+4Неправда дело не в опыте, а в желании. А вот желания писать «в стол» больше нет. И это сущая правда. Потому, что одному делать всё медленно. Чисто для самооценки. Гораздо лучше просто размышлять на тем, что не верно. Это сильно экономит время.
boblenin
16.12.2015 04:11+2Спасибо огромное за статью и за отличный продукт. Хотелось бы правда побольше подробностей, например что за конкурент такой был, как вы на рынок международный выходили. Вообще если когда-нибудь надумете писать мемуары — я бы купил.
Moskus
16.12.2015 07:10+2О, дискеты Sungreen. В свое время, записать что-то на такие было синонимом того, чтобы это выбросить — читались нормально пару раз, потом возможность что-то прочитать становилась лотереей.
aram_pakhchanian
16.12.2015 11:04+7Они писались на Казанском заводе на специальных машинах, поэтому держали информацию достаточно надежно.
progman_rus
16.12.2015 08:40+11И защита у вас была хорошая. В бутсектор жесткого диска писали метки.
Так что только полное форматирование диска помогало снова запустить «триальную» версию.
будучи студентом почти каждый месяц форматировал хард
alip
16.12.2015 11:46-1В восьмом абзаце текста неожиданно появляется некий Давид, не мешало бы его представить в вашем повествовании.
Alexufo
16.12.2015 15:56
Он даже по питанию запарился :-) Правда довольно спорно т.к нельзя проверят теорию на маленькой выборке.
Viacheslav01
16.12.2015 16:43+2Спасибо за историю, было приятно окунуться в нее, знакомство с FR состоялось после покупки ручного сканера (таких сейчас и не найдешь) в комплекте с которым шли FR и CuniForm, попробовав и то и другое выбор был за FR.
miolini
17.12.2015 06:34+1Расскажите, пожалуйста, как с ростом производительности персональных компьютеров менялись ваши алгоритмы и подходы к решению задач по распознаванию текста?
jorgen
18.12.2015 15:21приобрели некоторые наработки у молодого учёного, который в свободное время дома работал над похожей программой – без особой цели, просто из личного интереса к предмету
Вроде как одно из ключевых событий, а даже даже имя не назовёте? Зато дальше — два абзаца недостатков, и какой Давид молодец (в чём я нисколько не сомневаюсь).
Вообще, молодцы. В те нелёгкие времена, делать софт мирового уровня, это круто.
Lux_In_Tenebris
С FineReader довелось познакомиться ещё в 90-х с покупкой первого планшетного сканера (Artec Viewstation A6000C), в комплекте шёл дистрибутив версии 2.0 Light. Веб-сайт PC Week/RE до сих пор хранит новость тех лет: «Лучше вместе», 8 августа 1995. Уже тогда поражали возможности программы, скорость распознавания и удобный интерфейс, всё это сохраняется и по сей день. В общей сложности за все годы довелось отсканировать и распознать с помощью FineReader, наверное, больше десятка тысяч страниц.
Хотелось бы, чтобы FineReader когда-нибудь всё-таки появился и в виде GUI версии под GNU/Linux, а ещё лучше — унифицированной мультиплатформенной Windows/MacOS/Linux версии.