Инструмент автоматического распознавания данных из документов с использованием языковых моделей. Приложение поддерживает восемь типов документов, четырех провайдеров ИИ (имеется возможность использования локальных ИИ), локальный REST API и экспорт в JSON.
1. Общее описание
«ИИ Сканер документов» — десктопное приложение для операционной системы Windows, предназначенное для автоматического извлечения структурированных данных из документов различных типов. Приложение построено на стеке Python и использует современные мультимодальные языковые модели для анализа как текстового содержимого, так и изображений.
Ключевые особенности:

Распознавание восьми типов документов.

Поддержка четырёх провайдеров ИИ с возможностью переключения.

Графический интерфейс и локальный REST API для интеграции.

Экспорт результатов в формате JSON.

Бесплатное распространение.
2. Поддерживаемые документы и форматы
2.1. Типы документов
| Эндпоинт API | Описание | Извлекаемые поля |
|---|---|---|
/api/extract_invoice |
Счёт на оплату | Реквизиты организации, номер и дата счёта, позиции (наименование, количество, единица, цена, сумма, ставка НДС), итоговые суммы |
/api/extract_company |
Реквизиты организации | Наименование, ИНН, КПП, ОГРН, адрес, телефон, email, директор, бухгалтер, банк, БИК, корр. счёт, расчётный счёт |
/api/extract_anketa |
Анкета | ФИО, дата и место рождения, паспорт, дата выдачи, кем выдан, адреса регистрации и проживания, водительское удостоверение, ИНН, телефон |
/api/extract_passport |
Паспорт РФ | ФИО, дата и место рождения, номер паспорта (серия+номер), дата выдачи, кем выдан, код подразделения |
/api/extract_driver_license |
Водительское удостоверение | ФИО, дата рождения, номер ВУ, дата выдачи |
/api/extract_diploma |
Диплом о высшем образовании | ФИО, дата выдачи, регистрационный номер, ВУЗ, квалификация, номер бланка, специальность |
/api/extract_patent |
Патент (разрешение на работу) | ФИО, дата рождения, гражданство, номер документа, номер удостоверяющего документа, вид деятельности, ИНН |
/api/extract_etk |
Электронная трудовая книжка / выписка ПФР | Массив мест работы с периодами (стаж до 01.01.2020 и сведения с 01.01.2020) |
2.2. Форматы входных файлов
Изображения: JPG, JPEG, PNG, GIF, BMP, WEBP, TIFF, TIF
Документы: PDF, DOCX, TXT, RTF, HTML, HTM, DOC
Для PDF-файлов реализована двухступенчатая обработка: сначала выполняется извлечение текста (до трёх страниц), при отсутствии текстового слоя — рендеринг первой страницы в изображение с последующим распознаванием.
3. Архитектура и провайдеры ИИ
Приложение не привязано к конкретному поставщику языковой модели. Пользователь самостоятельно конфигурирует подключение через интерфейс настроек.
3.1. Поддерживаемые провайдеры
| Провайдер | Модель по умолчанию | Особенности |
|---|---|---|
| OpenAI | gpt-4o |
Максимальная точность, поддержка vision |
| GigaChat | GigaChat |
Российская модель, работа без VPN |
| LM Studio | local-model |
Локальное развёртывание через OpenAI-совместимый API |
| llama.cpp | default |
Локальные open-source модели |
3.2. Настройки подключения
Конфигурация хранится в файле ai_settings.json:
ai_provider— провайдер (openai / gigachat / lmstudio / llama)
ai_api_key— ключ API или авторизационные данные
ai_model— идентификатор модели
ai_endpoint— кастомный эндпоинт для OpenAI / GigaChat
ai_endpoint_lmstudio— эндпоинт LM Studio (по умолчаниюhttp://localhost:1234/v1)
ai_endpoint_llama— эндпоинт llama.cpp
timeout— таймаут запроса в секундах (по умолчанию 120)
Можно настроить через интерфейс программы в разделе Настройки. Важно!!! После сохранения настроек через интерфейс программы, необходимо выйти из программы и зайти заново, тогда обновлённые настройки загрузятся в программный контур.
4. REST API
4.1. Общие сведения
Базовый URL: http://localhost:5000
Формат запроса: multipart/form-data
Формат ответа: application/json
CORS включён
4.2. Универсальный формат ответа
{
"success": true,
"data": { /* извлечённые поля */ },
"file_name": "document.pdf"
}
При ошибке:
{
"success": false,
"error": "Описание ошибки"
}
4.3. Примеры запросов
cURL
curl -X POST http://localhost:5000/api/extract_invoice -F "file=@invoice.pdf"
Python
import requests
url = "http://localhost:5000/api/extract_company"
with open("requisites.pdf", "rb") as f:
response = requests.post(url, files={"file": f})
print(response.json())
1С
&НаКлиенте
Процедура РаспознатьДокумент()
Соединение = Новый HTTPСоединение("localhost", 5000);
Файл = Новый Файл("C:\Temp\invoice.pdf");
ДД = Новый ДвоичныеДанные(Файл.ПолноеИмя);
Разделитель = "----1C-Boundary" + СтрЗаменить(Строка(Новый УникальныйИдентификатор), "-", "");
Тело = Новый ПотокВПамяти();
Запись = Новый ЗаписьДанных(Тело);
Запись.ЗаписатьСтроку("--" + Разделитель);
Запись.ЗаписатьСтроку("Content-Disposition: form-data; name="file"; filename="" + Файл.Имя + """);
Запись.ЗаписатьСтроку("Content-Type: application/pdf");
Запись.ЗаписатьСтроку("");
Запись.Записать(ДД);
Запись.ЗаписатьСтроку("");
Запись.ЗаписатьСтроку("--" + Разделитель + "--");
Запись.Закрыть();
Запрос = Новый HTTPЗапрос("/api/extract_invoice");
Запрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Разделитель);
Запрос.УстановитьТелоИзДвоичныхДанных(Тело.ЗакрытьИПолучитьДвоичныеДанные());
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Если Ответ.КодСостояния = 200 Тогда
Чтение = Новый ЧтениеJSON();
Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку();
Результат = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
Если Результат.success Тогда
Сообщить("ИНН: " + Результат.data.requisites.inn);
Сообщить("Сумма: " + Результат.data.total_with_vat);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
4.4. Коды ответов
Таблица
| Код | Значение |
|---|---|
| 200 | Успешно — данные распознаны и возвращены |
| 400 | Ошибка запроса — файл не передан или неверный формат |
| 500 | Внутренняя ошибка сервера — проблема с ИИ или обработкой файла |
5. Постобработка данных
Приложение выполняет автоматическую нормализацию извлечённых значений:

Даты приводятся к формату ДД.ММ.ГГГГ.

Номера паспортов очищаются от символов «N», «№», пробелов и дефисов.

Телефоны нормализуются к виду +7XXXXXXXXXX.

ИНН содержит только цифры.

Номера водительских удостоверений очищаются от спецсимволов и приводятся к верхнему регистру.

Коды подразделений сохраняют формат XXX-XXX.

Записи ЭТК сортируются по дате начала работы в обратном хронологическом порядке.
6. Установка и системные требования
Операционная система: Windows 7 и выше
Объём дистрибутива: ~50 МБ
7. Лицензия и поддержка
Приложение распространяется через Инфорстарт. Исходный код закрыт.
Разработчик готов выполнять индивидуальные доработки: добавление новых типов документов, под специфические макеты, интеграцию с корпоративными информационными системами.
Остались вопросы?
Для получения дополнительной информации и помощи в настройке модуля под нужды вашего бизнеса — оставьте заявку
