Скин на НГ, перетяжка
Скин на НГ, перетяжка
Скин на НГ, перетяжка

Как встроить OCR бухгалтерских документов в мобильное приложение на iOS и Android

Объясняем, как перенести возможности ИИ для распознавания бухгалтерских документов в мобильное приложение для iOS и Android

138 открытий3К показов
Как встроить OCR бухгалтерских документов в мобильное приложение на iOS и Android

Сегодня мы продолжим разбираться, как встраивать технологии распознавания (OCR) в нативные мобильные приложения. Ранее мы уже показывали, как интегрировать распознавание паспорта, а также документов с жесткими и гибкими формами в Android. На очереди не менее важный класс документов – бухгалтерских, куда входят акты, счета, справки и накладные. А в качестве дополнения мы рассмотрим, как реализовать распознавание этих документов в приложении на iOS. Начинаем!

Первичка и не только

Когда мы говорим «бухгалтерские документы», мы имеем в виду не пару стандартных бланков, а множество первичных, учредительных, учетных и распорядительных документов, полуструктурированных и гибких форм. Среди них счета-фактуры, УПД, формы ТОРГ-12, транспортные накладные, акты, УКД, КСФ, ИСФ, уставы, приказы, бухгалтерский баланс, отчеты о финансовых результатах и многие другие.

Визуальный контроль и ручная перепечатка этих документов в системы бухучета – одна из наиболее времязатратных задач бухгалтерии. Даже при выборочной проверке и среднем уровне автоматизации сотрудник успевает обработать около 200-300 документов в день, в то время как объем документооборота у крупных компаний исчисляется десятками и сотнями тысяч страниц.

Снять практически 100% нагрузки в части ввода и проверки данных из бумажных документов и поступающих по ЭДО сканов можно при помощи OCR-систем. Автоматическое распознавание документов исключает человеческий фактор и связанные с ним ошибки. Если сотрудник может банально устать или некорректно перенести информацию из документа, то ИИ, напротив, обеспечивает высочайшую точность извлечения данных.

Возможности ИИ для работы с бухгалтерскими документами

Для автоматизации работы с бухгалтерскими документами недостаточно простого полнотекстового распознавания. Чтобы действительно принести видимый экономический эффект, система OCR должна классифицировать документ, обнаруживать и считывать таблицы, чекбоксы и штрихкоды, извлекать даты, суммы, данные контрагентов, контролировать наличие подписей в документах, а также поддерживать распознавание многостраничных форм. Только такой комплекс возможностей ИИ способен внести реальный вклад в упрощение бухучета, учета НДС и налогов по УСН, ускорить делопроизводство и сэкономить часы времени сотрудников.

Мы в Smart Engines занимаемся разработкой таких решений. Наш флагманский продукт для распознавания документов Smart Document Engine способен выполнить месячный объем работы отдела из 10 бухгалтеров всего за 1 час. Система обрабатывает изображения документов без передачи данных в облака, на внешние серверы или краудсорсинговые платформы. Это означает, что содержание документов не покидает устройство сотрудника – бизнес при этом получает гарантию сохранения коммерческой тайны.

Интеграция системы распознавания в мобильные приложения позволяет получить доступ к возможностям ИИ прямо со смартфона – без необходимости в компьютерах и сканерах. Для извлечения структурированных данных достаточно просто загрузить скан или сфотографировать документ в приложении. У интеграции нашей системы в iOS и Android есть еще одно преимущество – благодаря ей банк может развернуть мобильный сервис для бухгалтерского сопровождения малого бизнеса и ИП, у которых нет на эти задачи штатных сотрудников.

Интеграция в Android

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

Вы переносите библиотеки (архитектурные срезы), бандл (набор документов, необходимых для распознавания) и jar-файл (интерфейс библиотеки) к себе в приложение. Подключаете jar-файл в вашей конфигурации gradle и после этого вы уже можете использовать наше API.

			// Подключение библиотеки и создание инстанса
System.loadLibrary("jnidocengine");
instance = com.smartengines.doc.DocEngine.Create(config_data, true);
//  Задаем настройки распознавания
DocSessionSettings sessionSettings = engine.CreateSessionSettings();
// Задаем режим и маску документа
sessionSettings.SetCurrentMode(SettingsStore.currentMode);
sessionSettings.AddEnabledDocumentTypes(name);
// Создаем сессию
session = engine.SpawnSession(sessionSettings, Settings.signature);

		

На этом этапе мы должны подготовить изображение для передачи в сессию. Мы создаем изображение класса se.common.Image с помощью соответствующих методов API.

Например, вы выбираете из галереи что-то в формате HEIC и система возвращает вам bitmap

			Image image = Image.createFromBitmap(imageData);
// Создаем настройки обработки
DocProcessingSettings ps = session.CreateProcessingSettings();
session.ProcessImage(image,ps);
DocResult finalResult = session.GetCurrentResult();

		

Объект result содержит в себе не только распознанные поля документа, но и изображение документа: исправленное по перспективе и обрезанное по шаблону, уровень уверенности распознавания каждого поля и т.п.

Интеграция в iOS

Процесс интеграции в iOS-приложение тоже не вызывает сложностей, но имеет несколько вариантов из-за долгого отсутствия в экосистеме нормального пакетного менеджера зависимостей.

Первый вариант интеграции – ручной.

Вы перетаскиваете себе в проект две папки, одна из них содержит xcframework, обертку на objc и бандл. Вторая - готовый UI-контроллер, который можно вызывать из своего проекта.

Также необходимо в проекте прописать пути к заголовкам обертки и указать путь к файлу *-Bridging-Header.h, для раскрытия делегатов в swift из нашего контроллера.

Более удобные для интеграции SPM и Cocoapods мы тоже поддерживаем.

Сценарий взаимодействие с библиотекой на iOS точно такой же как и на Android, но в iOS мы имеем больше инкапсулированной логики. Для начала следует добавить в ваш класс два протокола SmartDocumentEngineDelegate, SmartDocumentEngineInitializationDelegate

			```swift
// Инициализируем движок
  override func viewDidLoad() {
    super.viewDidLoad()
    let bundlePaths = Bundle.main.paths(forResourcesOfType: "se", inDirectory: "data")
    guard let path = bundlePaths.first else {
    engineInstance.setInitializationDelegate(self)
// инициалищация движка
engineInstance.initializeEngine(path)
// Задаем режим
engineInstance.sessionSettings!.setCurrentModeTo("default")

// Задаем маску
engineInstance.sessionSettings!.addEnabledDocumentTypes(withMask: “rus.act”)
  }

```

		

Приведем сразу коллбек imagePicker, где реализована основная логика распознавания после выбора изображения из галереи.

			  func imagePickerController(_ picker: UIImagePickerController,
                             didFinishPickingMediaWithInfo info: [String : Any]) {
    picker.dismiss(animated: true, completion: {
      guard let image = info[UIImagePickerControllerOriginalImage] as? UIImage else { return }
      DispatchQueue.main.async { [weak self] in
        guard let self = self else { return }
// Создание сессии
        self.engineInstance.initSession()
// Распознавание
        self.engineInstance.processImage(from: image)
     }
    })
  }
```
		

Ожидать результата следует в делегате.

			```swift
   func smartDocumentEngineObtainedSingleImageResult(_ result: SEDocResultRef) {
    print("Got result with \(result.getDocumentsCount()) documents")
  }

```

		

Объект результата по структуре идентичен объекту, который вы получаете в Android.

Подведем итоги

Как вы видите, интеграция нашего распознающего ИИ в мобильные приложения происходит быстро и бесшовно, а механика для iOS и Android отличается незначительно.

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

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

Следите за новыми постами
Следите за новыми постами по любимым темам
138 открытий3К показов