Каталог решений - Сервис распознавания накладных из изображений в json, c помощью Tesseract-OCR + Deepseek

Сервис распознавания накладных из изображений в json, c помощью Tesseract-OCR + Deepseek

Сервис распознавания накладных из изображений в json, c помощью Tesseract-OCR + Deepseek

В наличии

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

Идея сделать сервис аналогичный 1С по распознаванию первички родилась уже давно.

Категория:

Описание

Итак, что нам понадобится:

Про ОСень:

//infostart.ru/1c/articles/1980026/

Про Вино:

https://github.com/autumn-library/winow

Про коннектор:

https://github.com/vbondarevsky/1connector/tree/master

Про tesseract:

https://tesseract-ocr.github.io/tessdoc/Installation.html#windows

Про deepseek:

//infostart.ru/1c/tools/2366670/

На этих китах и держится весь этот сервис (пока что).

В планах мобилу Ленке из продуктового, с мобильным приложением и 1 кнопкой сфоткать накладную, после чего накладная уже в 1С 🙂 )

Суть: мини сервер winow принимает картинку, распознает ее с помощью tesseract, и полученный текст скармливает deepseek, который производит пост обработку и корректировку накладной, сглаживая ошибки tesseract и выдает ответ в виде json или html(можно deepseek сказать чтобы оформил как реальную накладную). Что с этим делать дальше?

Думаю вы разберетесь. 

За основу я взял example из winow.

Вы не поверите(если не знакомы с ОСенью), но код основного модуля в итоге выглядит вот так:

 

 

Ну и собственно основная логика у меня уместилась в 1 процедуру:

 

&ТочкаМаршрута("parseimage")
Процедура ОбработкаФормы(ДанныеФормы, Ответ) Экспорт
	
	Ответ.Модель = Новый Структура("Имя, ДатаРождения, Фото");

	ДанныеФайла = ДанныеФормы.НайтиЗначениеПоМетаданным(Новый Структура("name", "file"));
	ИмяФайла = ПолучитьИмяВременногоФайла("raw");
	ИмяФайлаТекст = ПолучитьИмяВременногоФайла();
	Сообщить(ИмяФайлаТекст);
	ДанныеФайла.Записать(ИмяФайла);
	Приостановить(300);
	ЗапуститьПриложение("""C:\Program Files\Tesseract-OCR\Tesseract.exe"""+ " " + ИмяФайла + " " + ИмяФайлаТекст + " -l rus --oem 1", КаталогВременныхФайлов(), Истина);
	Приостановить(300);
	Ответ.УстановитьТипКонтента("json");
	Аутентификация = "Bearer <Token deepseek>"; // здесь вставить токен

	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Authorization", Аутентификация);
	Заголовки.Вставить("Content-Type", "application/json");

	СтруктураДанных = Новый Структура;
	СтруктураДанных.Вставить("model", "deepseek-chat");
	
	Сообщения = Новый Массив;
	СообщениеПользователя = Новый Структура;
	СообщениеПользователя.Вставить("role", "system");
	СообщениеПользователя.Вставить("content", "Ты профессиональный бухгалтер. Пользователь дает текст, ты его проверяешь, корректируешь на наличие ошибок и преобразуешь в json документ. Выведи только json без описания своих действий.");
	
	Сообщения.Добавить(СообщениеПользователя);
	
	СообщениеПользователя = Новый Структура;
	СообщениеПользователя.Вставить("role", "user");
	ИмяФайлаТекст = ИмяФайлаТекст + ".txt";
	ФайлТекст = Новый Файл(ИмяФайлаТекст);
	
    Сч = 100;
	
    Пока Не ФайлТекст.Существует() И Сч > 0 Цикл
		Сообщить(ИмяФайлаТекст);
		Cч = Сч - 1;
	КонецЦикла;	
	
    ТФ = Новый ТекстовыйДокумент;
	ТФ.Прочитать(ИмяФайлаТекст);

	СообщениеПользователя.Вставить("content", "текст: " + ТФ.ПолучитьТекст());
	ТФ = Неопределено;
	
	Сообщения.Добавить(СообщениеПользователя);
	
	СтруктураДанных.Вставить("messages", Сообщения);
	СтруктураДанных.Вставить("stream", false);
	
	ДополнительныеПараметры = Новый Структура;
	ДополнительныеПараметры.Вставить("Заголовки", Заголовки);

	Результат = КоннекторHTTP.Post("https://api.deepseek.com/chat/completions", Неопределено, СтруктураДанных, ДополнительныеПараметры).Json();
	ОтветТекст = Результат["choices"][0]["message"]["content"];

	Ответ.ТелоТекст = ОтветТекст;
	
КонецПроцедуры

Проверить у себя на практике, как все это работает, можно скачав архив с примером, в который достаточно вставить токен дипсик, выполнить oscript ocr.os и у вас на localhost:3333 свой сервис по распознаванию первички.

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

Самое интересное, что это намного дешевле сервиса от вендора, в котором 3 руб./документ.

Здесь себестоимость запроса к обычной модели deepseek для 1 документа меньше 1 цента.

Спасибо за внимание!

has been added to your cart:
Оформление заказа