ABBYY Cloud OCR SDK: публичный API распознавания в облаке Windows Azure

    До недавнего времени в вебе наши технологии распознавания «жили» только на сайте www.abbyyonline.com, этот сервис предназначен для конечных пользователей. И вот теперь мы готовы объявить о запуске бета версии веб-API распознавания для разработчиков. Знакомьтесь – ABBYY Cloud OCR SDK, «облачный брат» уже знакомого нашим читателям ABBYY FineReader Engine.

    Нам уже достаточно давно хотелось выпустить продукт, который позволял бы использовать OCR-технологии со всевозможных «тонких» и не очень устройств и всевозможных операционных систем и при этом был удобен и недорог. Надеемся, у нас это получилось. ABBYY Cloud OCR SDK предполагает оплату по мере использования, так что функции качественного распознавания становятся доступны при минимальных начальных вложениях.

    Под катом мы подробнее расскажем о том, как мы над ним работали и что у нас получилось. Пока сервис находится в закрытом бета-тестировании, но мы считаем, что он уже достаточно стабилен, и стадия открытой беты всё ближе. Мы хотели бы пригласить читателей Хабра стать одними из первых «внешних» бета-тестеров ABBYY Cloud OCR SDK. О том, как получить доступ, – тоже под катом.

    Облачное API распознавания можно использовать во многих сценариях. Например, включить функциональность распознавания в приложение, в котором она не является основной. Или можно сделать «лёгкое» приложение для мобильного телефона, в котором пользователь фотографирует документ, потом этот документ отправляется на сервер для распознавания, а назад приходит результат. По такому сценарию можно сделать программу, распознающую визитки, почти на всех телефонах.

    Можно также добавить распознавание к веб-приложению. Установить на сервер FineReader Engine по-прежнему можно, но если хочется обойтись без этого, то облачный сервис здесь должен помочь.

    API сервиса


    Для первой версии нам очень хотелось, чтобы API распознавания был доступен из-под любой операционной системы и с любого устройства, имеющего выход в интернет, при этом оставаясь насколько можно простым. Поэтому мы сделали его в виде нескольких RESTful запросов создания задания, получения информации о статусах и ссылок на скачивание результатов. Каждый запрос на обработку должен быть авторизован, при желании можно включить ssl и зашифровать трафик.

    Типичный сценарий работы с сервисом выглядит так. Клиентская программа, передавая изображения с помощью одного или нескольких POST-запросов, формирует задание на сервере. После того, как задание сформировано, надо отправить его на обработку, указав настройки обработки. Настройки зависят от типа выполняемой обработки.

    Например, если производится простое распознавание целого документа, можно (есть умолчания) указать язык документа и формат, в котором хочется получить результат. Сейчас поддерживаются pdf, docx, txt, xml и несколько других.

    Можно распознавать штрихкоды (движок сам находит штрихкод на картинке и определяет его тип), можно распознавать рукопечатный текст, которым обычно заполняют анкеты. Также мы вывели в API распознаватель визитных карточек: вы передаёте на сервер изображение визитки, а в ответ получаете vCard с распознанным текстом и всеми найденными полями: имя, фамилия, адрес и т.п.

    Сервер после каждого запроса выдаёт xml, в котором находится вся информация о задании: его идентификатор, стоимость, статус и примерное время до окончания обработки.

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

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

    Схематично последовательность команд для обработки одной фотографии изображена на рисунке:

    Крупнее


    В идеальном случае требуется всего лишь 3 запроса – в первом запросе изображение отправляется на сервер и ставится в очередь на обработку. Во втором узнаётся, что задание готово, и получается ссылка на скачивание. По третьему запросу скачивается результат.

    Мы планируем дальше расширять API сервиса. Появятся уведомления об изменении статусов заданий через предоставляемые пользователями URL, расширенные настройки заданий и многое другое. При проектировании следующей версии API также надеемся получить от вас информацию о фичах, которых не хватает продукту в ваших сценариях использования.

    Как всё устроено внутри


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

    Схематично архитектура решения выглядит так:



    Сервис состоит из нескольких частей. Пользовательские данные хранятся в Blob storage, настройки и задания – в базе данных. Веб-роли отвечают за взаимодействие с пользовательскими приложениями и веб-интерфейс, а рабочие роли занимаются собственно распознаванием.

    Web-роли реализуют RESTful API сервиса. Они авторизуют пользователя, получают задания, складывают изображения в blob storage, описания заданий помещаются в базу данных, а также генерируют ответы.
    Несколько worker-ролей отвечают за обработку заданий. Из базы данных берётся идентификатор очередного задания, из blob’а – файлы, относящиеся к этому заданию. Всё обрабатывается, затем результаты помещаются в blob, а в базе данных делается отметка, что задание успешно обработано.

    Затем, после того, как пользовательское приложение в очередной раз поинтересуется статусом своего задания, для него генерируется специальная ссылка на blob, по которой можно получить результат. Ссылка имеет ограниченный срок жизни и специальную контрольную сумму, так что получить доступ к результатам, даже зная идентификатор вашего задания, можно только посредством этой ссылки.

    Обработанные задания живут на сервере в течение некоторого времени, после чего они удаляются.

    Клиенты и платформы


    Для API Cloud OCR SDK достаточно просто написать клиент на любом языке программирования и для любой операционной системы.

    Например, для любителей чистого линукса у нас есть скрипт на bash + curl. Полный цикл обработки файла – всего 10 строчек кода. Надеемся, достаточно понятного :-).

    Для сторонников более традиционных решений есть примеры клиентов на .net, java и python, а также шаблоны приложений для Android.

    Все исходные коды выложены в виде проекта на github. Мы надеемся постепенно их совершенствовать, прислушиваясь к вашим пожеланиям.

    Бета-тестирование


    Мы приглашаем всех пользователей Хабра принять участие в бета-тестировании сервиса. Если вы хотите присоединиться к тестированию, заходите на адрес http://ocrsdk.com. Для начала нужно зарегистрироваться и заполнить анкету-заявку на использование ABBYY Cloud OCR SDK. Любой пользователь, заполнивший анкету, сразу получает возможность бесплатно распознать 100 страниц или 500 небольших текстовых кусочков. Но если по каким-то причинам вам этого не хватило – пишите нам, добавим еще :-)

    Чтобы вам было легче начать работать с сервисом, мы сделали несколько примеров на популярных языках программирования и подобрали базу изображений, на которых можно бесплатно потестироваться.
    Кроме того, и во время бета-тестирования, и после мы применяем принцип не брать дважды деньги за распознавание одного и того же изображения. Если вы уже распознали картинку один раз, после этого её можно повторно распознавать с другими настройками, но уже бесплатно. Это особенно полезно, если вы отлаживаете логику своего приложения, гоняя его по кругу под отладчиком. Мы уверены, что такое использование не должно быть платным для разработчика. Для проверки на совпадение изображений мы сверяем их контрольные суммы но, увы, не можем проверять на совпадение разные фотографии одного и того же документа.

    Нам очень интересны ваши отзывы и пожелания! Пишите их в комментариях к этому тексту или по адресу техподдержки в личном кабинете пользователя на http://ocrsdk.com.

    Update: В анкете и в письмах нам можно писать по-русски :-).

    Василий Панферов,
    Департамент продуктов для разработчиков
    ABBYY
    168,00
    Решения для интеллектуальной обработки информации
    Поделиться публикацией

    Комментарии 16

      +5
      Отличное начинание.
      Только я в тексте ничего не нашел о стоимости распознования после выхода продукта. Хочется хотя бы стратегию лицензирования понимать.
        +2
        На этапе тестирования продукта распознавание бесплатное. Распознавание штрихкодов в небольших объемах останется бесплатным и после окончания тестирования.

        После коммерческого запуска ориентировочная стоимость распознавания одной страницы А4 для небольших объемов будет варьироваться в диапазоне $0.04–$0.10, в зависимости от предоплаченного количества страниц (чем больше – тем дешевле). Так же будет оцениваться и распознавание визитных карточек. А вот распознавание небольших текстовых полей (ориентировочно – до 50 символов) обойдется в 5 раз дешевле.

        При необходимости распознавать большие объемы изображений мы с радостью обсудим более вкусные цены :-)
        +4
        В примерах картинок (picture_samples) у вас в папке Chinese лежит скан на японском языке, а не на китайском.
          +1
          Спасибо! Поправим и положим что-нибудь на китайском :-)
          0
          $0.04–$0.10, господа, мы все таки в России, писали бы от 1.2 руб до 3,5 за страницу. Учитывая, что это лишь API, стоимость для конечного пользователя удвоится. Считаю что для SOHO — дорого (знаю, цену назначали не вы а «маркетологи»). Так вы долго не избавитесь от пиратских копий вашего (замечательного) продукта.
            0
            Спасибо за ваше мнение! А какую цены вы считаете справедливой за оцифровку бумажного документа?
              0
              Для А4 адекватно 5-10 копеек за страницу.

              Для меньших форматов можно по знакам ориентироваться, 100-150 знаков — 1 копейка.
                0
                По лицензии консольной linux версии, например, выходит ~50коп за лист. Дороговато облако выходит, по предварительным данным.
                0
                Не могли бы вы избавиться от еретической кодировки cp1251 для plantext, в которой возвращаются результаты,
                или хотя бы сделать ее опциональной, а по умолчанию поставить utf-8?
                  0
                  Избавимся, конечно. Спасибо!
                    0
                    Исправили.
                    0
                    А если ваш движок не справляется с распознаванием, то нераспознанные слова вы отправляете на anti-captcha.net? ;)
                    1000 нераспознанных слов вам выйдут в 1$, что в общем-то должно покрыться при вашей цене за страницу и низком проценте нераспознаваемости.
                      0
                      Не можем :) Это пользовательские данные, и передавать их кому-либо нехорошо.
                      0
                      Посильный вклад на coffee-script.
                        0
                        Спасибо!
                        0
                        А крутые бизнес-штуки для там будут? Например создание шаблонов документов, вытаскивание атрибутивной информации (сумма, контрагент из накладной и т.п.).

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

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