Распознавание изображений и PDF-документов с помощью Google docs

24.02.25

Интеграция - Распознавание документов и образов

В последнее время у меня возникла необходимость в распознавании текста из изображений и PDF-документов. Данный вариант распознавания текста предлагается как альтернатива традиционным OCR-сервисам. Возможно, кому то данная статья будет полезна. Сравнивал между собой два сервиса Google Cloud Vision и Yandex Vision. Сразу скажу, что результат распознавания рукописного текста не удовлетворил, поэтому искал другие возможности. В процессе поиска альтернатив я обратил внимание на одну интересную возможность, которую предлагает Google Docs. Если загрузить изображение в Google Документы, сервис автоматически добавляет распознанный текст под изображением. Качество меня приятно удивило — текст извлекался даже из рукописных записей!

Скачать файл

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

Наименование По подписке [?] Купить один файл
Распознавание изображений и PDF-документов с помощью Google docs:
.epf 9,97Kb
2
2 Скачать (1 SM) Купить за 1 850 руб.

Идея довольно проста:

  1. Загрузить изображение на Google Диск.

  2. Сохранить его в формате документа Google Docs.

  3. Извлечь текст из этого документа.

  4. Удалить документ после завершения работы.

Для загрузки файла на Google Диск требуется аутентификация по протоколу OAuth 2.0. OAuth — это открытый протокол авторизации, который позволяет предоставить доступ к защищённым ресурсам (например, вашему Google Диску) без передачи логина и пароля. Вместо этого используется токен доступа, который выдаётся после подтверждения прав доступа. Это безопасно и удобно.

Подробнее о том, как работает аутентификация OAuth 2.0, можно узнать здесь.

Обращаю внимание, для того чтобы файл в формате pdf или jpeg можно было экспортировать в текстовый формат его необходимо сохранить в формате application/vnd.google-apps.document.

Процедура ВыполнитьРаспознаваниеНаСервере(ПутьККартинке) 
	//Порядок распознавания:
	//- сохраняем картинку на гугл диск в формате гугл документа    
	//- экспортируем этот гугл документ в текст
	//- удаляем гугл документ
  
   Если Токен <> "" Тогда
	  ИдентификаторФайла = ЗагрузитьФайлНаGoogleDrive(ПутьККартинке, Токен);
	  Если ИдентификаторФайла  <> Неопределено Тогда
		  Результат = РаспознатьТекстЧерезGoogleDrive(ИдентификаторФайла, Токен); 
		  УдалитьФайлСGoogleDrive(ИдентификаторФайла, Токен);  
		  Сообщить(Результат);                                
	  КонецЕсли;
   КонецЕсли;
  
КонецПроцедуры 

Функция ЗагрузитьФайлНаGoogleDrive(ПутьКФайлу, Токен, ТокенОбновлен = Ложь) Экспорт  
		
	Файл = Новый Файл(ПутьКФайлу);
	boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
		
	//Метаданные файла {{         
	//для того чтобы файл в формате pdf или jpeg можно было экспортировать в текстовый формат
	//необходимо сохранить его в формате application/vnd.google-apps.document
	mimeType = "application/vnd.google-apps.document";
	
	Свойства = Новый Соответствие();
	Свойства.Вставить("name", Файл.Имя);
	Свойства.Вставить("mimeType", mimeType); // тип файла
	
	СтрокаМетаданныеФайла = СформироватьТекстJSON(Свойства);
	
	Поток = Новый ПотокВПамяти();
	ЗаписьДанных = Новый ЗаписьДанных(Поток);
	
	ЗаписьДанных.ЗаписатьСтроку("Content-Type: application/json; charset=UTF-8");
	ЗаписьДанных.ЗаписатьСтроку("");
	ЗаписьДанных.ЗаписатьСтроку(СтрокаМетаданныеФайла);
	
	ЗаписьДанных.Закрыть();
	
	ДвоичныеДанныеМетаданные = Поток.ЗакрытьИПолучитьДвоичныеДанные();
	
	//Данные файла {{
	
	ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКФайлу); // двоичные данные файла
		
	Поток = Новый ПотокВПамяти();
	ЗаписьДанных = Новый ЗаписьДанных(Поток);
	
	ЗаписьДанных.ЗаписатьСтроку("Content-Type: " + mimeType);
	ЗаписьДанных.ЗаписатьСтроку("");
	ЗаписьДанных.Записать(ДвоичныеДанные);
	
	ЗаписьДанных.Закрыть();
	
	ДвоичныеДанныеФайла = Поток.ЗакрытьИПолучитьДвоичныеДанные();
	//Данные файла }}
	
	//формирование тела запроса {{
	ПотокТело = Новый ПотокВПамяти();
	ЗаписьДанных = Новый ЗаписьДанных(ПотокТело);
	ЗаписьДанных.ЗаписатьСтроку("--" + boundary);
	ЗаписьДанных.Записать(ДвоичныеДанныеМетаданные);
	ЗаписьДанных.ЗаписатьСтроку("--" + boundary);
	ЗаписьДанных.Записать(ДвоичныеДанныеФайла);
	ЗаписьДанных.ЗаписатьСтроку("--" + boundary + "--");
	ЗаписьДанных.ЗаписатьСтроку("--" + boundary + "--");
	
	ЗаписьДанных.Закрыть();
	
	ДвоичныеДанныеТело = ПотокТело.ЗакрытьИПолучитьДвоичныеДанные();
	//формирование тела запроса }}
	
	Заголовки  = Новый Соответствие;
	Заголовки.Вставить("Authorization", "Bearer " + Токен);
	Заголовки.Вставить("Content-Type", 	"Multipart/Related; boundary=" + boundary);
	Заголовки.Вставить("Content-Length", Формат(ДвоичныеДанныеТело.Размер(), "ЧГ="));
	
	HTTPЗапрос = Новый HTTPЗапрос("/upload/drive/v3/files?uploadType=multipart", Заголовки);
	HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанныеТело);
	
	SSL = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);
	Соединение = Новый HTTPСоединение("www.googleapis.com",,,,,,SSL);
	
	Ответ = Соединение.ОтправитьДляОбработки(HTTPЗапрос);// post запрос
	
	Если Ответ.КодСостояния = 401 Тогда
		//Это значит токен устарел и его надо обновить  
		Если Не ТокенОбновлен Тогда                    
			Токен = ПолучитьAccessToken();
			Возврат ЗагрузитьФайлНаGoogleDrive(ПутьКФайлу, Токен, Истина);
		КонецЕсли;
	КонецЕсли;
	
	Если Ответ.КодСостояния <> 200 И Ответ.КодСостояния <> 204 тогда
		ВызватьИсключение "Ошибка загрузки файла: " + Ответ.КодСостояния + ". Тело ответа: " + Ответ.ПолучитьТелоКакСтроку(); 
		Возврат Неопределено;
	КонецЕсли; 
	
	ДанныеОтвета = Ответ.ПолучитьТелоКакСтроку();
    ЧтениеJSON = Новый ЧтениеJSON;  	
	ЧтениеJSON.УстановитьСтроку(ДанныеОтвета);
	
	Попытка
		
		РезультатЧитаемый = ПрочитатьJSON(ЧтениеJSON,Истина);
		
	Исключение
		
		Возврат Неопределено;
		
	КонецПопытки;

	ИдФайла = РезультатЧитаемый.Получить("id");
    
    Возврат ИдФайла;
КонецФункции  

Функция СформироватьТекстJSON(Данные)
	
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();
	ЗаписатьJSON(ЗаписьJSON, Данные);
	Результат = ЗаписьJSON.Закрыть();
	
	Возврат Результат;
КонецФункции

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

Подробнее о загрузке файла на Google диск можно ознакомиться здесь.

Функция РаспознатьТекстЧерезGoogleDrive(ИдентификаторФайла, Токен) Экспорт 
	
	// Создание HTTP-запроса
	ЗапросHTTP = Новый HTTPЗапрос("drive/v3/files/" + ИдентификаторФайла + "/export?mimeType=text/plain");
	ЗапросHTTP.Заголовки.Вставить("Authorization", "Bearer " + Токен);     
	ЗапросHTTP.Заголовки.Вставить("Content-Type", "application/json" );
	ЗапросHTTP.Заголовки.Вставить("mimeType", "text/plain"); 
	
	// Отправка запроса     
	SSL = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);
	HTTPСоединение = Новый HTTPСоединение("www.googleapis.com",,,,,, SSL);
	ОтветHTTP = HTTPСоединение.Получить(ЗапросHTTP);
	
	// Обработка ответа
	Если ОтветHTTP.КодСостояния = 200 Тогда
    //распознанный текст
	    Результат = ОтветHTTP.ПолучитьТелоКакСтроку();
	Иначе
	    Результат = "Ошибка при распознавании текста: " + ОтветHTTP.КодСостояния + " " + ОтветHTTP.ПолучитьТелоКакСтроку();
	КонецЕсли;
	
	Возврат Результат;
КонецФункции  
Процедура УдалитьФайлСGoogleDrive(ИдентификаторФайла, Токен) Экспорт
        
    // Создание HTTP-запроса
  	ЗапросHTTP = Новый HTTPЗапрос("drive/v3/files/" + ИдентификаторФайла);
	ЗапросHTTP.Заголовки.Вставить("Authorization", "Bearer " + Токен); 
	ЗапросHTTP.Заголовки.Вставить("Content-Type", "application/json" ); 
	   
    // Отправка запроса                
	SSL = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);
    HTTPСоединение = Новый HTTPСоединение("www.googleapis.com",,,,,, SSL);  
	
    HTTPСоединение.Удалить(ЗапросHTTP);
    
КонецПроцедуры 

Обработка создана на обычных формах, тестировалась на версии платформы 8.3.21.1302.

Данная обработка создана исключительно для демонстрации возможности распознавания файлов, загруженных на Google Drive. Все необходимые процедуры и шаги подробно описаны в этой статье. Если вы хотите поблагодарить автора или протестировать функционал, вы можете скачать обработку.

Проверено на следующих конфигурациях и релизах:

  • Управление торговлей, редакция 10.3, релизы 10.3.86.2

#Распознавание текста из изображений и PDF

См. также

Распознавание документов и образов Периферийные устройства Программист Автомобили, автосервисы Россия Платные (руб)

Программа считывает кадры с ip-камер (http - запрос к камере), видео, фото (источники кадров (нет ограничения на их количество) настраивается в конфигурационном файле), находит и распознает номера автомашин и сохраняет в базу db, с сохранением фото номера и автомашины, а также времени детекции.

20400 руб.

31.05.2023    5340    4    4    

8

SALE! 30%

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

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

6480 руб.

23.12.2021    13579    18    25    

10

Распознавание документов и образов Нейросети Программист Платформа 1С v8.3 Абонемент ($m)

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

1 стартмани

27.02.2025    1254    mkalimulin    21    

15

Нейросети Распознавание документов и образов Программист Платформа 1С v8.3 Отраслевые Бесплатно (free)

Пример использования механизма голосового распознавания платформы 1С: Предприятия на примере Демоприложения речевого распознавания от 1С с примером добавленной библиотеки ИИ от Михаила Калимулина с интегрированным голосовым управлением для формирования текста запроса к ИИ.

07.02.2025    503    29    m_aster    2    

6

Распознавание документов и образов Сканер штрих-кода Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

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

1 стартмани

05.12.2024    620    4    nailandroid    0    

2

Распознавание документов и образов Программист Платформа 1С v8.3 1С:Документооборот Россия Бесплатно (free)

1С:Документооборот 3.0 - первое тиражное приложение 1С, в котором встроено распознавание речи. Теперь вы можете диктовать текст электронных писем и голосом подбирать для них адресатов, удобно заполнять содержание, особые наименования и описания для задач, вводить голосом отчёты и резолюции об исполнении.

30.10.2024    1174    VKuser924421    0    

5
Оставьте свое сообщение