Несколько месяцев назад товарищество собственников в моем многоквартирном доме решило установить счетчики на воду. Это было сделано для того, чтобы получить информацию об использовании воды в каждой квартире. Ежемесячная сумма на содержание, взимаемая с каждой квартиры, была реструктурирована и теперь включает плату за пользование водой (чтобы стимулировать жителей к экономии воды). До установки счетчиков воды жители всех квартир ежемесячно вносили фиксированную сумму за обслуживание. Закупленные счетчики воды не были смарт-счетчиками и не имели подключения к Интернету, поэтому ежемесячные платежи за воду приходилось рассчитывать вручную. Этот процесс включает в себя запись показаний счетчиков воды всех квартир на листе бумаги, расчет общего количества воды, потребленной каждой квартирой (потребление воды = показания текущего месяца — показания предыдущего месяца), а затем расчет платы за воду для каждой квартиры (на основе использование плит). Кроме того, в каждой квартире есть два подключения к водопроводу и два отдельных счетчика на городскую воду и воду из скважины. Расчет платы за воду — это трудоемкий процесс, и я хотел автоматизировать его, чтобы сэкономить несколько часов усилий, затрачиваемых на это каждый месяц.

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

Я рассмотрел несколько решений для оцифровки месячных показаний счетчика воды:

  • Создайте приложение для Android, которое использует камеру устройства для захвата изображений воды и использует модель ML/OCR на устройстве для извлечения показаний счетчика. Я использовал Google ML Kit Text Recognition API для обработки потока изображений с камеры, а также обнаружения и локализации показаний счетчика. Однако это не увенчалось успехом, так как модель ML Kit не смогла последовательно извлечь показания счетчика. Он предсказывал g, когда счетчик показывал 9, o вместо 0, а иногда просто не мог извлечь текст. Документация ML Kit предполагает, что разработчики могут обучать пользовательские модели для повышения точности оптического распознавания символов, но я не стал оценивать этот вариант, поскольку на тот момент у меня не было большого количества обучающих данных. Во-вторых, модель ML Kit оказалась чувствительной к качеству изображения, а это, в свою очередь, зависело от условий окружающего освещения, возраста Android-устройства и т. д.
  • Создайте приложение или веб-сайт, который позволит конечному пользователю вводить показания счетчика в форму и загружать содержимое в облачное хранилище данных. Это решение будет работать, но оно (как и предыдущее решение) требует подготовки устройства и подключения к Интернету для конечного пользователя, собирающего данные. Кроме того, конечный пользователь должен быть обучен использованию программного обеспечения.
  • Продолжайте записывать показания счетчика на лист бумаги и используйте ML/OCR на стороне сервера для извлечения показаний. Идея состоит в том, чтобы сделать фотографию бумаги с написанными от руки показаниями счетчика и выполнить распознавание рукописного текста на фотографии. Я оценил два API обработки таблиц/форм: Google Document AI и AWS Textract и AWS Textract показали лучшие результаты. Google Document AI терпел неудачу в крайних случаях, когда фотография была сделана камерой, не параллельной бумаге (другими словами, Document AI, похоже, ожидает, что клиент выполнит перспективное преобразование перед загрузкой). С другой стороны, AWS Textract на удивление хорошо показал себя на фотографиях, сделанных в условиях низкой освещенности, и, кажется, обрабатывает текст, который был вычеркнут или перезаписан.

Следующим шагом после выбора AWS Textract было объединение функций распознавания рукописного ввода и выставления счетов в портал/веб-приложение. Чтобы избежать хлопот, связанных с обслуживанием виртуальной машины, выполнением исправлений ОС и других хлопот, я решил развернуть решение в безсерверной вычислительной среде (Google Firebase).

Компоненты и технологии, использованные в конечном решении:

В следующем видео показан частичный путь пользователя, который обрабатывает фотографию листа показаний счетчика и загружает данные в базу данных Firestore. Существуют дополнительные шаги для создания листа XLS с использованием и платой за воду для всех квартир, которые не захвачены в видео.

Мы используем это приложение уже около 8–9 месяцев, и оно экономит около 1–2 часов усилий каждый месяц. Помимо экономии усилий, автоматизированный процесс устраняет человеческие ошибки и обеспечивает стабильный/воспроизводимый процесс. Кроме того, сохранение показаний счетчиков в облачной базе данных гарантирует, что у нас есть цифровые записи, чтобы оглянуться назад, если возникнет потребность в будущем. Стартовый план Firebase предоставляет бессерверные вычисления, управляемую базу данных, аутентификацию, хранилище документов, доставку контента и многие другие функции бесплатно (применяются ограничения на использование), и мы можем разместить наше решение буквально бесплатно. Единственным платным компонентом решения является AWS Textract, стоимость которого составляет около 0,15 доллара США за сканирование изображения. Это составляет 1,50 рупий в месяц, и это ничтожно мало по сравнению с экономией усилий. Я оцениваю альтернативные технологии, такие как OpenCV + Tesseract, для замены AWS Textract. Я буду вести блог о них в будущем посте.

Первоначально опубликовано на https://www.linkedin.com.