Распознавание текста из изображений и PDF с помощью нейросетей Yandex Vision и 1С

09.08.22

Интеграция - WEB-интеграция

Если вам нужно с помощью компьютерного зрения от Yandex быстро распознавать текст из документов и изображений, эта статья для вас!

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Распознавание текста из Изображений и PDF с помощью нейросетей Yandex Vision и 1С:
.epf 8,41Kb
44 3 050 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Когда-то 5 лет назад я написал статью Распознавание текста с помощью нейросетей Google Cloud Vision и 1С

С тех пор многое поменялось, и я решил написать новую статью, используя отечественные технологии Yandex Cloud

Принцип работы получившейся обработки очень простой: нужно сделать POST запрос с картинкой или pdf на сервер Яндекса. Файл нужно закодировать в base64, и получить json-ответ.

И, разобрав ответ, программа может получить распознанный текст. Детальное описание возможностей Yandex Vision API можно посмотреть по ссылке. А про распознавание текста и формат запроса и ответа есть подробная документация

Работу с этим сервисом можно легко реализовать на 1С, используя только некоторые базовые вещи: HTTPЗапрос, ЧтениеJSON, ЗаписьJSON, что я и сделал. Внешнюю обработку можно использовать, только нужно получить в консоли Яндекс.Облака ключ для запросов, вот документация

 

 

Далее технические подробности:

Начнем с правильного формирования JSON запроса. Для этого, пользуясь описанием формата из документации, подготовим Структуру и сериализуем её в JSON.

Кстати обратите внимание что здесь я ставлю в массив language_codes только русский язык, но в этот массив можно добавить еще и "en" строку.

 

 

В запрос HTTP вставьте заголовок с ключом АПИ

 

 

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

 

 

Запустим обработку, закинем какую-нибудь картинку, полюбуемся полученным ответом.

 

 

Для примера распознавания PDF я взял первый попавшийся в поиске образец файла счета, и вот что получилось:

 

 

Мы только что заставили огромные сервера Яндекса и их мощные нейросети распознать нам текст, здорово, правда?

У Яндекса есть ограничения: Поддерживаемые форматы файлов: JPEG, PNG, PDF. Максимальный размер файла: 1 МБ.

Тарификация 130 рублей за 1000 изображений

Для распознавания паспорта есть отдельный запрос на стадии Preview но я этим не пользовался.

Тестировал на платформе 8.3.16

В обработке код открыт, можно ее скачать и использовать. 

Вступайте в нашу телеграмм-группу Инфостарт

OCR распознавание текста документов компьютерное зрение

См. также

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь 1С v8.3 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM / LOGICSTARS. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM / LOGICSTAR разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    21789    31    24    

25

SALE! 15%

WEB-интеграция Программист Бизнес-аналитик 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

17280 14688 руб.

20.12.2024    4009    20    2    

21

Учет документов Распознавание документов и образов Бухгалтер Пользователь 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Одна из наиболее удобных обработок автоматического прикрепления большого количества документов-оригиналов к документам 1С. Для файлов поточного сканирования автоматически определяются начало и конец каждого документа. Поддерживаются штрихкоды, QR-коды, отсканированные PDF документы без штрихкодов, сформированные в ЭДО текстовые PDF документы. Поддерживаются входящие и исходящие документы-оригиналы.

6480 руб.

23.12.2021    14898    29    25    

12

WEB-интеграция Программист Руководитель проекта 1С v8.3 1C:Бухгалтерия 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки. Основные преимущества: 1. Документация API создаётся автоматически. Удобна для программной обработки. 2. Изменить API столь же просто как настроить отчёт. Можно опубликовать существующий вариант отчёта. 3. Отчёты в API поддерживают параметры (Период, ДатаНачала и др.) 4. При создании простых методов не требуется изменять конфигурацию. 5. Поддерживается работа с планами обмена.<br/> 6. Возможно настроить отправку из 1С данных корреспондирующей системе, для случаев когда 1С сама "знает" какие данные нужно отправить. 7. После записи в 1С Ле Мурр может возвращать соответствие полученных идентификаторов созданным в 1С объектам данных.

36000 руб.

27.09.2024    8694    7    5    

10
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Lemmonbri 161 18.07.22 15:52 Сейчас в теме
10 стартмани за 100 строк кода, 90 из которых скопированы из документации яндекса? Сильно, сильно...
smit1c; lunjio; GATTUSO; Dach; Mouros; myoker; tsmult; tsugancov; +8 1 Ответить
2. gzharkoj 571 18.07.22 22:06 Сейчас в теме
(1) Так весь код приведен,берите да вбивайте. Причем формирование всех заголовков указано для http-запроса, что у новичков может вызвать проблемы.
3. CnupT 70 19.07.22 10:39 Сейчас в теме
В целом, идея нужная и полезная. Но что делать со счетом на оплату, пришедшем к нам вот в таком виде, как на картинке?
Это же просто перечисление всех слов, встреченных на листочке
tpkpsd; UnashevRM; tsugancov; noprogrammer; SerVer1C; +5 Ответить
4. vlaskin 83 20.07.22 15:51 Сейчас в теме
Есть бюджетные решения и платить никому не нужно https://infostart.ru/public/1557184/. Не я автор, но использовал в работе (предварительно адаптировав): загрузка из скана наряда на бригаду строителей в ЗУП в разовое начисление списка сотрудников и сумму. решение получается автономное.
5. rog87@yandex.ru 1 04.02.23 18:55 Сейчас в теме
Отличная статья. Огромный потенциал.
Единственное в обработке ответа не хватает перевода строк на новую строку:
	
Текст = "";
	для Каждого Блок из Блоки Цикл 
		Линии = Блок.lines;
		Для Каждого Линия из Линии Цикл
			Слова = Линия.words;
			Для Каждого Слово из Слова Цикл 
				стр = Слово.text;
				Текст = Текст + стр + " ";
			КонецЦикла;	
			Текст = Текст + ";";
		КонецЦикла;
		Текст = Текст + Символы.ПС;
	КонецЦикла;
	РезультатСтрока = Текст;
Показать
6. Skellar 27 25.02.25 11:36 Сейчас в теме
Попробовал запустить - ошибка 301 и Expected a value.{"analyzeSpecs"^. У Яндекса что-то поменялось?
7. userud 04.07.25 11:05 Сейчас в теме
(6) Да, неактуальная обработка уже.
8. AlexeyShiganov 24.10.25 15:28 Сейчас в теме
&НаКлиенте
Процедура Преобразовать(Команда)
НС = Элементы.ФайлыВКаталоге.ТекущиеДанные;
Апи = "ocr.api.cloud.yandex.net";
МетодАпи = "/ocr/v1/recognizeText";
КлючАПИуСервисногоАккаунта = "123";
НашID = Новый УникальныйИдентификатор();

НС.СостояниеРаспознавания = "Идет распознавание";
НС.СчетчикОтправкиНаРаспознавание = НС.СчетчикОтправкиНаРаспознавание + 1;
НС.ИдентификаторОперацииРаспознавания = НашID;
НС.СообщениеОбОшибке = Неопределено;
НС.РезультатРаспознавания = Неопределено;
НС.РезультатРаспознаванияЧитабельный = Неопределено;

ЗаголовокЗапросаHTTP = Новый Соответствие();
ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/json");
ЗаголовокЗапросаHTTP.Вставить("Authorization", "Api-Key " + КлючАПИуСервисногоАккаунта);
ЗаголовокЗапросаHTTP.Вставить("x-data-logging-enabled", true); //Подробнее тут https://yandex.cloud/ru/docs/vision/api-ref/support-headers
ЗаголовокЗапросаHTTP.Вставить("x-client-request-id", НашID);

ИнетЗапрос = Новый HTTPЗапрос(МетодАпи, ЗаголовокЗапросаHTTP);

ТелоЗапроса = Новый ЗаписьJSON;
ТелоЗапроса.УстановитьСтроку();
КореньЗапроса = Новый Структура;
Если СтрНайти (НС.РасширениеФайла, ".pdf") > 0 Тогда
КореньЗапроса.Вставить("mimeType", "application/pdf");
Иначе
КореньЗапроса.Вставить("mimeType", "image/jpeg");
КонецЕсли;
languageCodes = Новый Массив;
//languageCodes.Добавить("*"); //Не работает
languageCodes.Добавить("ru");
languageCodes.Добавить("en");
КореньЗапроса.Вставить("languageCodes", languageCodes);
//КореньЗапроса.Вставить("model", "handwritten"); //handwritten стоит 1.5 руб/страница
КореньЗапроса.Вставить("model", "page-column-sort");
ДвоичныеДанные = Новый ДвоичныеДанные(НС.ПолныйПутьФайла);
Объектbase64 = Base64Строка(ДвоичныеДанные);
КореньЗапроса.Вставить("content", Объектbase64);
ЗаписатьJSON(ТелоЗапроса, КореньЗапроса);
ДанныеТела = ТелоЗапроса.Закрыть();
ИнетЗапрос.УстановитьТелоИзСтроки(ДанныеТела);
ssl = Новый ЗащищенноеСоединениеOpenSSL;
ИмяВремФайлаОтвета = ПолучитьИмяВременногоФайла("json");
Соединение = новый HTTPСоединение(Апи,,,,,,ssl);
Соединение.ОтправитьДляОбработки(ИнетЗапрос, ИмяВремФайлаОтвета);
ЧтениеТек = новый ЧтениеТекста(ИмяВремФайлаОтвета);

ОтветЯндекс = Чтениетек.Прочитать();
ЧтениеОтвета = Новый ЧтениеJSON;
ЧтениеОтвета.ОткрытьФайл(ИмяВремФайлаОтвета);
Структура = ПрочитатьJSON(ЧтениеОтвета);
ЧтениеОтвета.Закрыть();

Если ЕстьРеквизитИлиСвойствоОбъекта(Структура, "Error") Тогда
НС.СообщениеОбОшибке = ОтветЯндекс;
НС.СостояниеРаспознавания = "Ошибка распознавания";
Иначе
НС.РезультатРаспознавания = ОтветЯндекс;
НС.СостояниеРаспознавания = "Завершено распознавание";

ИтоговыйТекст = "";
Попытка
ИтоговыйТекст = СтрЗаменить(Структура.result.textAnnotation.fullText, "\n", Символы.ПС);
Исключение
ИтоговыйТекст = "Ошибка при преобразовании JSON результата распознавания" + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
ИтоговыйТекст = СокрЛП(ИтоговыйТекст);

НС.РезультатРаспознаванияЧитабельный = ИтоговыйТекст;
КонецЕсли;


КонецПроцедуры
Показать

(6)
Для отправки сообщения требуется регистрация/авторизация