0,0
рейтинг
13 января 2012 в 15:37

Распознавание непрерывного рукописного текста в режиме off-line из песочницы

Предисловие

Как известно, задача распознавания непрерывного рукописного текста в режиме off-line пока считается нерешённой.

Мне удалось решить эту задачу теоретически и практически. Практическая часть сейчас имеет вид демонстрационной версии программы. Решение общее, оно не ограничивается какой-либо областью применения, языком или размером словаря.

О программе

Программа полностью обучаемая. Процесс обучения выглядит просто: вы пишете символы в режиме on-line, программа их обобщает и выделяет алгоритм написания. Это первый этап обучения. Второй этап происходит во время работы. Если встречается символ, общий алгоритм написания которого совпадает с одним из имеющихся в наличии, а значения некоторых свойств выходят за рамки вычисленных на первом этапе диапазонов, то диапазоны расширяются. Конечно, только после подтверждения пользователем общего результата распознавания. К слову сказать, на первом этапе достаточно от трёх до семи предъявлений символа, и алгоритм готов.

Теория

Немного о теории. Существует несколько подходов к решению указанной задачи. Их обычно делят на два вида: структурные и эталонные. Первый основан на выделении и анализе различных структурных элементов символа и их признаков, свойств. Второй предполагает сравнение распознаваемого символа с набором заданных эталонов. Эти методы не позволяют решить задачу в общем виде.

Задача рукописного ввода в режиме on-line полностью и успешно решена. Это решение основано, в любом случае, на создании алгоритмов написания символов, учитывающих траекторию движения пера. То есть, последовательность смены его координат. Были предложения свести задачу распознавания в off-line режиме к распознаванию в режиме on-line. Для этого достаточно правильно считать линии с графической копии текста. Но сделать это принципиально невозможно. Можно считать отрезки линий между пересечениями, но чтобы их правильно соединить, уже нужна интерпретация.

Остаётся только одно решение — восстанавливать символы в процессе интерпретации отрезков, полученных на этапе считывания с цифровой графической копии текста. Для этого нужны две составляющие: специальное представление алгоритма написания символа, позволяющее это делать, и алгоритм интерпретации отрезков, способный проанализировать все возможные варианты интерпретации.

Практика

Это удалось сделать в полной мере. Как известно, главная задача демоверсии — продемонстрировать принципиальное решение поставленной задачи. На что в этом смысле способен тот прототип, который имеется сейчас? Программа способна распознавать одно слово, написанное произвольным непрерывным почерком на белой бумаге. Для перевода в цифровой файл слово может быть либо отсканировано, либо сфотографировано веб-камерой или цифровым фотоаппаратом. В принципе, уже сделано и распознавание текста, но эта функция требует доработки.

Ниже приведены примеры распознаваемых слов. Как видно, здесь не только обычное написание, но и «усложнённые» варианты: перечёркнутые слова, символы, написанные отрезками, имеющие лишние части и тому подобное. Это показывает, что в полностью готовом виде программа будет способна распознавать достаточно зашумлённые тексты.

image

image

image

image

Очевидно, что уверенно распознать можно только те символы, которые имеют все необходимые части примерно на своих местах. Если имеются недостающие или сильно искажённые части, то необходима интерпретация на уровне слов. Наличие словаря повышает процент распознавания, но не решает всех проблем. Бывают такие случаи, когда без понимания смысла фразы некоторые слова однозначно интерпретировать невозможно. Для этого нужна система искусственного интеллекта, способная понимать смысл фраз естественного языка. До недавнего времени информации о наличии таких систем на рынке не было. Сейчас уже есть: фирма ABBYY объявила о создании системы «Compreno», в которой для перевода используется смысловая интерпретация фраз на основе «модели мира», не зависимой от конкретного языка.

У меня тоже есть прототип системы ИИ, способной понимать смысл текста. Если судить по той информации о «Compreno», которая сейчас есть в СМИ, моя система функционально гораздо шире. Она обучаема, способна к обобщению информации и к активному поиску знаний в случае, когда их не хватает для выполнения поставленной задачи. Другими словами, такая система вполне способна работать личным секретарём. Но у неё есть один серьёзный недостаток по сравнению с «Compreno» — по степени общей готовности она пока не дотягивает даже до демоверсии.

Коммерция

И в конце немного о коммерческой стороне проекта. В интернете есть интервью вице-президента компании ABBYY Lingvo Арама Пахчаняна. В отношении задачи распознавания непрерывного рукописного текста в режиме off-line там сказано, по сути, что эту задачу и не надо решать. Затраты на её решение (надо полагать, очень большие) не окупятся. И, похоже, в основном потому, что непрерывное писание фирма ABBYY Lingvo практически уже сделала неактуальным. Она полностью решила проблему распознавания раздельного рукописного текста, и на все случаи жизни разработала соответствующие бланки.

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

В следующем короткое видео можно увидеть программу в действии. Возможно, это будет интересно.


Заключение

И ещё один важный момент – показатели эффективности, а именно, время и процент распознавания. Конечно, в демоверсии основное внимание уделялось второму критерию. Сейчас достигнут уровень не ниже 70%. В готовом варианте этот показатель можно сформулировать так: если человек сможет прочитать текст, то и программа тоже. О времени распознавания пока можно сказать только то, что его удастся довести до приемлемых величин.

Если всё пойдёт хорошо, будут ещё статьи о некоторых технических аспектах распознавания текста и об ИИ.

Благодарю за внимание.
____________
Update.
Дорогие хабравчане! Спасибо всем за фидбек, нам это очень важно и полезно. В целом топик был встречен положительно, что не может не радовать.

Негодующим личностям хотелось бы сказать: уважаемые, мы не ярмарочные фокусники. Мы отдаём отчёт в своих словах. Если мы написали, что в готовом продукте точность распознавания будет стремиться к 100%, значит мы в этом уверены.

Эту статью можете считать анонсом, у неё не было цели подробно раскрыть все технические подробности. Однако учитывая проявленный интерес, через некоторое время будет ещё одна статья, более подробно описывающая процесс распознавания.

Также будет доступная для скачивания демонстрационная версия программы.

Васильев Сергей @vasiljevserg
карма
4,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (61)

  • +31
    А ваша программа сможет разбирать почерк докторов? Возможно нелепый вопрос, но больно интересно.
    • +1
      Она сможет распознать почерк докторов когда будет подключена система искусственного интеллекта, которая понимает смысл текста. Без понимания смысла текста такой почерк разобрать нельзя.
      • +13
        а Вы думаете доктора сами понимают смысл своего текста? )
      • +3
        О какие громкие слова :) не нужен ей смысл. Максимум что нужно, статистические данные по написаным словам и какаянить модель маркова для докторских каляк.
        • 0
          и словарь возможных слов побольше.
        • 0
          Модели маркова используются в ИИ, так что ваш собеседник прав.
          • 0
            В ИИ много чего используется, но к смыслу это отношения не имеет.
    • –10
      Почерк докторов сейчас, особенно в больничныйх листах, очень хорошо распознается первокласником.
      Если HR взял в руки больничный лист и сказал что принимает, то ошибки в нем никем не принимаются, ни доктором, ни больничкой, все, взял так взял.
      Все направлено к тому, чтобы государство тратило как можно меньше денег из бюджета на здравоохранение и как можно больше на...(нужное дописать)
      • 0
        вы открыли мне глаза
    • +27
      image
    • +7
      Написано ведь, что программа распознает рукописный текст)

      Рукописный — это когда руками пишут. Так что, ответ на вопрос — нет.

      ЗЫ Не в обиду докторам ))
  • +3
    Очень интересно, каковы планы по дальнейшему развитию вашего проекта? Планируется ли коммерческое развитие, или отдадите в opensource? А так статья очень заинтересовала, было бы интересно поподробнее узнать про алгоритм распознавания — что же происходит после векторизации?
    • 0
      Планов много, потому что распознавание текста только вершина айсберга. Эту систему мы используем как стартовую площадку для ветки продуктов, связанных с искусственным интеллектом. Ею мы хотим доказать, что наши заявления по поводу ИИ не шутка. И opensourse проектом это не будет. Во всяком случае у нас пока нет идей о монетизации этого проекта в таком формате.

      Про алгоритмы и технические подробности будут статьи. В комментариях их расписывать бессмысленно.
  • 0
    Окееей… А чем лучше CEDAR-FOX?
  • +18
    Слово лишили в рукописном варианте выглядит душераздирающе ))
    p.s. писал ногой, снимал стеркой ))
    Вопрос такой — такие слова (типа «лишили») тоже через систему ИИ, или можно проще?
    • +20
      А эту картинку можно прогнать через прогу и выложить видео результата?
      • 0
        см. апдейт в статье. Скоро будет доступная для скачивания демоверсия.
        • +5
          Прочитам этот коммент (см. апдейт в статье.) надеялся увидеть видео по распознованию данного предложения в статье, но снова обломался.
          • 0
            суди по возможностям демо будет клиентом, а весь код выполнятся на серверах источника
            иначе сломают и передадут в народ
    • –1
      Цитата из статьи: «В готовом варианте этот показатель можно сформулировать так: если человек сможет прочитать текст, то и программа тоже.»

      Мы же с вами смогли прочитать эту фразу?
      • +4
        Мы с вами — смогли, но я уверен, что существует человек, который не сможет. Это очень популярное заблуждение, что если один человек может, значит — может любой. Это неверно.

        Я не пытаюсь принизить результаты вашего труда. Скорее, отношение радостно-недоверчивое — «Нифига, и так оно тоже может!?» Но присутствует здоровый скепсис, отчасти от того, что я не понимаю, как оно работает. С удовольствием посмотрю на демку, когда будет доступна.
    • 0
      Это распознаётся без ИИ.
    • –1
  • –5
    Вот почему я был уверен, что первый же коммент будет о врачах…
  • +5
    А ссылку на демоверсию программы добавите?
    • –1
      Демоверсия сейчас доступна только в личном порядке для потенциальных инвесторов и покупателей.
      • +1
        Хм… Боитесь что алгоритм выдернут? Я думаю нашлось бы больше инвесторов, покупателей, после того, как они сам лично попробуют программу, и увидят в ней потенциал. Это ж демо-версия. Точнее сказать, техническая демка. Я думаю многим интересно пощупать её руками, так сказать.
        • –1
          В этом есть смысл. Мы попробуем.
        • +4
          Думается, что тот, кто способен будет выдернуть (если программа не на .NET и не поддается досаточно легкой «обратной разработке») алгоритм в дизассемблере и понять его (а алгоритм, судя по заверениям автора, ни много ни мало революция), заслуживает обращения к себе как к гению :)
  • +24
    В начале было громко объявлено о решении «теоретическом и практическом» задачи распознавания слитного рукописного текста. После этого от статьи ждешь сенсации. А в результате…
    Теоретические рассуждения просто никакие. Дальше идут обещания, критика Аби Компрено, и мысли по поводу ИИ.
    Все могла бы спасти удачная демонстрация. Но где же она?
    Нельзя же считать таковым невнятный ролик с одним примером.
    • –2
      Мы заявили о принципиальном решении задачи и не ставили целью сделать это сенсацией. Программа ещё не готова и более развёрнутых её описаний можно ожидать только после окончания разработки.
      • +8
        Сергей, почему вы о себе во множественном числе пишите? Или вы представляете какую-то организацию?
        • –2
          Небольшую группу людей, команду.
          • +31
            Вы такой таинственный!
      • +14
        Что ж, перечитайте свой второй абзац в предисловии. Заявление четкое и безапелляционное.
        Увы, ничем далее не подкрепленное, кроме ролика.
        Получилась больше реклама, а не статья в ИИ.
        Правда, нормальные элементы в статье есть.
        Например, цифра в 70% точности очень мала, но уже хорошо, что Вы не побоялись ее назвать.
        Еще было бы неплохо показать, где Ваша программа пока ошибается (примеры оставшихся 30%). Это нисколько не снизило бы впечатление от статьи, а наоборот, прибавило очков у серьезных читателей.
  • +1
    >Писать привычным непрерывным почерком удобнее и легче
    Вы не поверите, но
    >On the 2006 SAT, a United States post-secondary education entrance exam, only 15 percent of the students wrote their essay answers in cursive. (thx to wikipedia)
    Русские слишком маленький и неплатёжеспособный рынок.
    • +11
      Кроме русских, есть огромное направление по распознаванию арабского письма. image
    • 0
      Я бы даже дополнил что и по русски писать по буквам — легче, чем непрерывным, особенно если владеешь среднестатистическим-корявым, а писать приходится много и быстро.
  • +2
    Простите, неужели кроме Abby и вас не занимается ничем похожим? Есть ведь еще другие компании специализирующиеся на распознавании текста. Не знаю насчет рукописного, но все-таки. Вроде бы даже evernote умеет немного распознавать рукописный текст (для поиска).
    Или все дело именно в качестве распознавания?
    • +3
      Evernote, да, умеет, и это наследие прошлых проектов Степана Пачикова, основателя Evernote.
  • +10
    Пост подобен, пардон, пуку в воду.
    А «демонстрационная программа» чем-то до боли напоминает склёпанную школьником в делфи форму, из разрисованных скринов которой и сделали видео.
  • +52
    Ну раз уж меня даже в статье упомянули, позвольте прокомментировать. Сначала небольшое уточнение: наша компания называется просто ABBYY :).

    А теперь по делу. Систем распознавания рукописного слитного текста в мире разработано довольно много. Есть несколько коммерческих систем (например, у французской компании A2iA, у американской компании ParaScript, наследницы российской компании Параграф, детища Степана Пачикова). Есть множество разработок, которые используются в нишевых решениях: я видел одну разработку, в достаточно продвинутой стадии, сделанную израильской компанией, похожая разработка сделана в Siemens, есть несколько японских решений, и т.д. Даже вполне себе успешная французская A2iA, которая смогла лицензировать свою технологию всем, кому только можно, зарабатывает от силы несколько миллионов долларов в год, и их доходы особо не растут. И, похоже, это и есть масштаб потенциального рынка.

    Есть два больших сегмента, где такие системы находят применение: это обработка банковских чеков и почтовые сортировочные машины. По мере того, как чеки окончательно будут выведены из употребления банковской системой в США, этот сегмент тоже исчезнет. Почта в развитых странах все больше имеет дело с печатным текстом, все меньше и меньше людей вообще отсылают обычные письма, и все больше людей при этом печатают адрес, благо, на современных принтерах эта задача тривиальная. В странах не развитых для сортировки используются люди, это сильно дешевле. Возникает вопрос: а почему не использовать слитный текст в формах? Ответ, в общем-то, присутствует в исходном тексте: в этом сценарии никого не устроит 30% ошибок. И даже 10% никого не устроит. И даже 5%. В реальных сценариях речь идет максимум об одной ошибке на 200-300 знаков ДО применения различных дополнительных контекстных знаний (справочников, правил проверки и т.д.). После применения этих знаний речь может идти об одной подсвеченной ошибке на 500-600 знаков, и максимум одной неподсвеченной ошибке на 5000-6000 знаков. При значительно худших параметрах ваше решение не будет интересовать 99% потенциальных покупателей. Потому что люди вводят формы, когда им действительно нужны данные из них, а не то, что ваша программа об этих данных думает.

    Я уже не говорю о том, что на реальных документах качество полученной после сканирования картинки катастрофически ниже идеала, который изображен в статье: массово присутствуют разрывы, двойные и тройные линии, исправления, много «мусора», налезаний текста на элементы оформления и т.д. Когда рисуешь отдельные квадратики, люди хотя бы стараются в них попадать и пишут относительно аккуратно. Когда квадратиков нет, то люди пишут так, что потом сами не могут разобрать, что написали. Именно поэтому многие формы, даже если они не предполагают автоматической обработки, все равно делаются со знакоместами для букв.

    Это если очень коротко по теме. Вообще она обширная и очень интересная, но я и так уже злоупотребил форматом комментария.
    • –2
      Извините, Арам, что не сразу ответил.

      Спасибо за злоупотребление форматом комментария, он очень интересен и полезен для нас. У Вас большой опыт в коммерческой области, у нас его нет совсем. Я согласен со всем, что Вы сказали. И даже с тем, что в формах есть большой смысл.

      Но в том, чтобы найти не частное, а общее решение этой задачи, тоже есть смысл. Распознавание рукописного текста – это одно из применений общего решения. Кстати, самое простое. Кроме этого есть ещё много чего распознавать. Например, дальнейшее развитие распознавания рукописного текста – определение автора по почерку. Далее идёт машинное зрение вообще, то есть распознавание объектов, классификация состояний этих объектов. Наконец, распознавание звуковой речи. (Как ни странно, общее решение применимо и здесь). Да, есть уже много разработок по всем направлениям. Но пока практически все они являются специализированными, не общими. Само распознавание образов, в свою очередь, только одна из функций ИИ. Более общее её название – применение знаний. Кроме распознавания (классификации) знания ещё применяются в генерации алгоритмов решения задач. Например, перемещения (транспорт), преобразования (производство). Вторая функция ИИ (а их только две:) – генерация знаний. А по сути – обучаемость, способность обобщать информацию, выделять алгоритмы процессов в результате их обобщения, поиска сходств.

      Я уже упоминал разработанную мной систему ИИ, понимающую смысл текста. В этой системе решены все перечисленные задачи. Причём, в общем виде. Например, такая функция, как способность общаться на естественном языке, решена в теории полностью, программно – на 60% или более. В процессе обучения программа строит синтаксические диаграммы (генерация знаний), которые она может применять в построении фраз для ответов на вопросы, описания своего состояния, задавания вопросов (применение знаний).

      Но к этой системе нам так и не удалось привлечь внимание общественности. Во многом для этого и пришлось решить обсуждаемую здесь задачку.
      • +1
        Все это очень интересно и даже понятно всем, кто (в юности) интересовался ИИ. Объясните только, почему именно вы и почему сейчас? Почему не советские НИИ и вражеские корпорации 20 лет назад? Даже почему вы не 5 лет назад или через 5 лет (этот ± — ничто при тех сроках в десятки лет, что вы очевидно занимаетесь проблемой)?

        А может быть, все дело в том, что 5 лет назад вы еще гоняли голубей, а через 5 лет будет пахать на чем придется из относительно интересного, чтобы купить машынко, платить ипотеку и кормить детей? А вот сейчас у вас такой период жизни, что вы один, совсем один, почти написали распознавание слитного почерка, представляете небольшую группу людей, и решаете общую задачу ИИ?
        • –1
          Почему не «вражеские корпорации 20 лет назад» не знаю.

          5 лет назад уже 5 лет шла разработка системы.
      • +3
        Спасибо за ответ.

        А какие у Вас конкретные планы?
  • 0
    Простите, но у меня по мотивам ролика почему-то в уме внезапно родился такой псевдокод:
    • +19
      Упс.

      ProcessImage(Image, «BW+contrast»);
      Vector = CreateVector(Image);
      CreateNodes(Vector, 1, NODE_BASIC_ONLY);
      Input1->Caption = «газета»; //Вставить процедуру распознавания позже
      Input1->Blink();
  • +1
    сырцы? Или сразу в недра злобной проприентарщины?
    • 0
      Сырцов не будет. Во всяком случае пока. Как я уже писал, сейчас у нас нет приемлимых идей как монетизировать продукт в режиме open-sourse.
      • –1
        Он-лайн сервис по распознаванию.
        Намалявал, сфоткал, отправил вам на сервер, вернуло текст, вставил в смс\ммс. Профит!
        Вариант 2. Фоткаем страницы книжек, газет, и т.д.

        Только с гигантами которые на этом собаку съели — не справитесь малой командой.

        Потому доверия к успешности по распознаванию на 100% — мало.

        А вот юношеского максимализма — много.
      • +3
        Вы не представляете как мне приходится сдерживаться, чтоб избежать очередного бана :( Хорошо, попробую сформулировать без мата — пожалуйста, будьте столь любезны, посмотрите где-нибудь в словарике написание слова source и словосочетания в целом.
  • –3
    vasiljevserg, не обращай внимания на скептиков, их всегда большинство.
    А вот монетизацию и вклад в это дело своего времени нужно рассмотреть.
  • +1
    я бы на месте автора не рвался к написанию подробных статей и выкладыванию «демо» программы, потому что оба этих действия ведут к реверс-инженеру который стырит наработки.

    есть перспектива встать в один ряд с русским изобретателем тетриса, который остался в лопухах с нулём в кормане.

    ищи лучше покупателей или лицензиатов(в случае наличия патентов)
    • 0
      есть перспектива встать в один ряд с русским изобретателем тетриса, который остался в лопухах с нулём в кормане.

      Это вы откуда взяли? Не надо фантазировать.
  • +2
    «Как известно,» — очень плохое начало для статьи, претендующей на научность. Такие заявления принято подтверждать ссылкой.

    «Для этого нужна система искусственного интеллекта, способная понимать смысл фраз естественного языка» — вообще трэш. Что это за терминология? ИИ — обширнейшая сфера, что значит «система искуственного интеллекта»? Если имеете ввиду лексикон, статистические языковые модели, семантические модели, то так и говорите, а «систему искусственного интеллекта» оставьте для читателей журнала Men's Health.

    Постоянно то «мы», то «моя система». Вы уж определитесь.

    «Коротко о теории» — действительно, очень уж коротко. Упоминание о двух подходах посредством пары предложений.

    Видео — вообще ни о чем. Результат в 70% — на чем? Хотите меряться пипской с другими — используйте хорошо известные и зарекомендовавшие себя базы образцов, на которых принято проводить тесты.
  • –1
    А я бы хотел пользовательский интерфейс с рукописным вводом — для мобильных устройств это может быть удобнее, чем клавиатура. Так что желаю вам успеха и жду новых статей.
  • 0
    Идея хороша, но есть предположение, что рукописные вводы будут уходить из нашей жизни. Заметьте как люди стали писать — ведь у многих, как уже было замечено — почерк ниже среднего. Мы уже с пеленок привыкаем нажимать кнопки, и в этом нет ничего плохого. Мое мнение коррелирует с мнением человека из ABBYY — рынок таких приложений узок. Но с точки зрения науки — Вам плюс! Радует читать подобные статьи и видеть, что в нашей стране не все потеряно, и за это Вам спасибо!

    Сам занимаюсь исследованиями в области применения ИИ к решению САПРовских задач, и хотел бы уточнить одну мелочь. Много упоминаний «ИИ», а нигде не указано, что же за средства используются? Генетические алгоритмы? Нейронные сети? Ведь это можно указать, тут тайн нет.

    Ролик не впечатлил. Кусочек формы, написанной на дельфи или борланде с++ не зацепил. И вообще, после просмотра создалось впечатление о простой формочке с загрузкой картинки и выводе по нажатию (невидимой камере) кнопочки, которая выводит в поле слово «газета»…

    Из личного опыта — старайтесь максимально наглядно показать свою идею, но при этом не раскрывая сути. Это реально! Просто надо пробовать!

    Ну и удачи Вам на поприще ИИ! Это перспективная и очень интересная тема!
  • 0
    У меня тоже есть прототип системы ИИ, способной понимать смысл текста.

    Это очень сильное заявление. Нет ли тут какой-либо ошибки? Вы могли бы сказать, что именно, конкретно, Вы понимаете под выражением «смысл текста»? Если Вы действительно решили эту проблему, то примите мои поздравления!
  • 0
    чисто технически, ньютон запмечательно распозновал.
    • 0
      Ньютон распознавал в режиме on-line.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.