Распознавание текста с помощью нейросетей Google Cloud Vision и 1С

Программирование - Практика программирования

Возможности Google Cloud Vision в распознавании текста.

Здравствуйте!

В этой статье я рассмотрю возможности распознавания текста (OCR) на чистом 1С с помощью нейросетей сервиса Google Cloud Vision.

Всё началось с того, что мне попалась на глаза статья на хабре о том, что можно очень легко использовать нейросети как сервис. Не нужно писать свою сеть и обучать ее, можно воспользоваться уже готовыми API. Принцип работы очень простой: нужно сделать POST запрос с картинкой, закодированной в base64, и получить json-ответ. И, разобрав его, программа может понять что изображено на картинке (Label detection) или же получить распознанный текст (OCR). Детальное описание возможностей Cloud Vision API можно посмотреть по ссылке. Работу с этим сервисом можно легко реализовать на чистом 1С, что я и сделал.

Регистрация в консоли разработчика и получение ключа. 

Для начала нужно зарегистрироваться в консоли разработчика по ссылке console.cloud.google.com. Нужно создать проект, включить для него Google Cloud Vision API. Далее в меню консоли необходимо перейти в Диспетчер API-учетные данные и создать ключ API, который будет использоваться для тестирования. В документации есть хорошая инструкция на английском. Если все было сделано верно, то ваша консоль должна выглядеть как на картинке ниже:

Формат json-запроса

Согласно инструкции сервису нужно прислать json с полями requests (массив)  image (объект с полем content где содержится base64-закодированное изображение) и features (массив с указанием нужного типа распознавания type, в данном случае TEXT_DETECTION).  Код, который это делает, можно посмотреть в приложенной внешней обработке. В итоге получается вот такой файл JSON:

{
"requests": [
{
"image": {
"content": "base64 image content"
},
"features": [
{
"type": "TEXT_DETECTION"
}
]
}
]
}

Получение ответа Google

Отправка данных осуществляется с помощью объекта HTTPСоединение по протоколу HTTPS (с установкой ЗащищенноеСоединениеOpenSSL) и метода ОтправитьДляОбработки. В него передается HTTPЗапрос с сформриованным json файлом для отправки,  заданным через метод УстановитьТелоИзДвоичныхДанных. В json-ответе Google нас интересует первый элемент с именем свойства description и его значение, в котором будет содержаться распознанный текст.

Попробуем отправить на распознавание картинку с английским текстом:

И вот что приходит в ответ, приведу фрагмент текста:

CEN Perform a wireless installation (wireless models only)
Before starting the installation, verify that the wireless access
point is working correctly, the computer is connected to the
network, and the product is turned on.
product, go
If there is not a solid blue light on the top of the to process A.
to
If there is a solid blue light on the top of the product, go process B.
1. Connect the USB cable between the computer and
the product. The HP Smart Install program (see picture

Как видно, получается очень хорошее качество распознавания.

 А теперь попробуем русский текст:

И вот что получается в ответе от Google:

A
KBMTaHUIA nepeBopa C KapTbl Ha KapTy
KOA aBTOpH3aUnn
npH BO3HMKHOBeHun np06neM, cooounTe HOMep KBHTaHurn onepaTopy
Konn-ueHTpa unu coTpYAHMKV OTAeneHMA
+7 495 78-888-78-ANA MOCKBbIM MOC KOBCKoi o6naCTIA
8 800 2000-000 -Ana pernOHOB P]4;
CyMMa nepeBoga:
1 285P

Да, печальный итог. Но, как подсказали в комментариях, оказывается нужно в запросе у свойства imageContext поставить  languageHints в ru.

Работа с русским языком

Как мне верно подсказали в комментариях, есть возможность указать язык для распознавания. Получается вот такой json-запрос:

{
"requests": 
[
	{
		"image": {
		"content": "base 64 image content"
		},
		"features": [
		{
		"type": "TEXT_DETECTION"
		}
		],
		"imageContext": {
		"languageHints": "ru"
		}
	}
]
}

Отправим для распознавания ту же самую квитанцию и получается очень хороший результат:

Выводы

Сама по себе возможность использовать мощнейшие нейросети Google с помощью несложных запросов впечатляет. 

Распознавание русского языка тоже работает весьма хорошо, таким образом может вполне составить конкуренцию ABBYY. И цены на распознавание у Google Cloud гораздо более низкие.

В приложенной к статье внешней обработке можно посмотреть код конструирования JSON запроса, отправки его через HTTPСоединение и получения ответа. 

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

Скачать файлы

Наименование Файл Версия Размер
Обработка GoogleCloudVision
.epf 7,61Kb
08.02.17
16
.epf 7,61Kb 16 Скачать
Обработка GoogleCloudVision для русского языка
.epf 7,69Kb
09.02.17
36
.epf 7,69Kb 36 Скачать

См. также

Комментарии
1. Александр Перевислый (sashapere) 144 08.02.17 21:08 Сейчас в теме
2. борян петров (TODD22) 16 09.02.17 05:16 Сейчас в теме
распознавания текста (OCR) на чистом 1С с помощью нейросетей сервиса Google Cloud Vision

Так "на чистом 1С" или всё же "с помощью нейросети сервиса Google"? :)
RainyAugust22; CSiER; ifal; +3 Ответить 1
3. Михаил Ветров (l1ike) 09.02.17 07:42 Сейчас в теме
Для русского языка попробуйте явно указать languageHints
4. Артём Андриянов (CSiER) 09.02.17 09:57 Сейчас в теме
Лучше ocr от Adobe пока не встречал. Сервис от MS тоже не порадовал (там несколько api - пишу в контексте ocr).
5. Иван Коротеев (kiv1c) 339 09.02.17 10:29 Сейчас в теме
(2) ну я имел ввиду что для подключения к API не нужны внешние объекты, только встроенные в 1С HTTPЗапрос и HTTPСоединение
6. Александр Шакмаев (shakmaev) 331 09.02.17 11:43 Сейчас в теме
7. Иван Коротеев (kiv1c) 339 09.02.17 13:41 Сейчас в теме
(6)
(3)
да, вы правы, указал languageHints и стало лучше. статью дополнил.
8. Александр Журавлев (apostal86) 176 15.02.17 15:29 Сейчас в теме
Прикольно, а подобное же, но чтобы голос распознавал, возможно в 1С сделать?
9. Иван Коротеев (kiv1c) 339 15.02.17 16:51 Сейчас в теме
(8) думаю да, есть аж два варианта:
Google Cloud Speeсh API
и бесплатный и хороший Wit.Ai который используется например в Voicy bot в Телеграме
10. Станислав Косолапов (amoarok) 26 27.03.17 12:45 Сейчас в теме
Веб-сервисы в облаках это конечно стильно, модно, молодёжно, но для таких красивых картинок хватит даже tesseract-ocr. Вот результат распознавания:
1>

Квитанция перевода с карты на карту

код авторизации

При возникновении проблем, сообщите номер квитанции оператору
колл-центра или сотруднику отделения

+7 495 78-888-78 - для Москвы и Московской области

8 800 2000-000 - для регионов РФ

Сумма перевода: 1 285 Р
Комиссия: 0 Р

Итого с комиссией: 1 285 Р
11. Артем Артем (artik1994) 27.03.17 13:29 Сейчас в теме
приходит ответ от сервера "Google developers console API activation"...
что это может быть?
12. Сергей Старых (tormozit) 4442 02.04.17 00:50 Сейчас в теме
Распознавание текста на комбинированном языке (рус+англ) видел приличное только у ABBYY . Именно такое нужно в большинстве случаев при распознавании скриншотов. В частности ABBYY Screenshot reader отлично справляется с этой нелегкой задачей.
Оставьте свое сообщение