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

24.02.25

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Распознавание изображений и PDF-документов с помощью Google docs:
.epf 9,97Kb
4
4 Скачать (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

См. также

SALE! 30%

SALE! 20%

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

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

6480 руб.

23.12.2021    13939    22    25    

10

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

Расширение для типовых конфигурация и для самостоятельной интеграции системы распознавания документо удостоверяющих личность и прочих документов непосредственно из информационных баз "1С:Предприятия 8.3" с помощью Content AI - Passport Reader SDK. Расширение позволит не изменяя типовой код конфигурации, расширить текущий функционал несколькими кликами мыши.

12000 руб.

26.01.2016    70781    80    3    

103

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

Сервис распознавания накладных из изображений в json (на самом деле в любой текст или html), c помощью Tesseract-OCR + Deepseek (ОСень + Winow + 1connector). Данная публикация родилась после того, как я познакомился с фреймворком ОСень и Winow.  Идея сделать сервис аналогичный 1С по распознаванию первички родилась уже давно.

10 стартмани

30.05.2025    423    1    exitone    0    

3

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

Данная обработка позволяет распознавать текст в формате PNG и записывает распознанный текст в TXT формат.

3 стартмани

05.05.2025    374    2    Likarus    0    

1

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

Пример обработки для преобразования речи в текст, с последующим анализом данного текста с использованием сервисов OpenAi (proxyapi).

1 стартмани

01.04.2025    460    3    =Kollega=    0    

2

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

Уникальное расширение для автоматического распознавания текста и анализа изображений прямо в интерфейсе любой типовой конфигурации 1С:Предприятие. Автоматически извлекает данные с фотографий документов, поддерживает рукописный текст и формирует подробные описания изображений с помощью популярных моделей ИИ.

10 стартмани

26.03.2025    1104    10    Prepod2003    5    

12

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

Внешняя обработка 1С использует API для распознавания текста с изображений (до 25 000 в месяц), поддерживает загрузку файлов с диска и HTTP-запросов, а результат можно автоматически обрабатывать и интегрировать в 1С.

1 стартмани

20.03.2025    670    6    mrKHrom    3    

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