Задача
Логистическая компания принимала заявки фотографиями накладных прямо в телеграм.
Клиент фоткал бумагу на телефон и кидал в чат, оператор открывал снимок и перебивал в таблицу номер, дату, вес, объём, адреса погрузки и выгрузки.
На одну заявку уходило минут пять, в пик их прилетало под сотню за день.
Ошибки были в цифрах - переставленный вес менял цену перевозки, и выяснялось это уже после выезда машины.
Что сделал
Бот на Python и aiogram принимает фото, скан или pdf, можно закинуть пачкой.
Снимок сначала выпрямляется и чистится - поворот по краям листа, контраст, обрезка полей, без этого распознавание фото с бликом сыпется.
Текст снимается OCR, разбор полей делает модель - номер и дата, отправитель и получатель, вес, объём, адреса.
Оператор жмёт на поле и правит его прямо в боте, таблицу для этого открывать не надо.
Слабое место таких ботов - модель дописывает поле, которого на бумаге нет, и делает это очень уверенно.
Поэтому каждое поле идёт со своей оценкой, пустое значение считается лучше выдуманного, а без подтверждения оператором заявка в таблицу не попадает.
Результат
Оператор теперь проверяет и подтверждает, на одну накладную уходит около сорока секунд вместо пяти минут.
Пачку на двадцать документов один человек разбирает спокойно, завала в пик больше нет.
Заказчику отдал исходники, доступ к серверу, лист с тарифами, который он правит сам, и инструкцию, как добавить новое направление.