Microsoft Cognitive Services und Machine Learning am Beispiel “Belegscanner”

18. April 2018

Machine Learning erfreut sich derzeit großer Beliebtheit. Es ermöglicht uns, Lösungen für Probleme zu finden, die mit herkömmlichen Algorithmen manchmal nur schwer lösbar sind. Beispiele hierfür sind die Erkennung von Text in Bildern und die kontinuierliche Optimierung von Datenanalyseergebnissen.

Ein Nachteil von vielen Machine-Learning-Algorithmen ist allerdings deren Rechenbedarf. Hierdurch ist deren Einsatz, z. B. auf mobilen Geräten, oftmals nicht ohne Weiteres möglich. Eine Lösung ist das Ausführen dieser Algorithmen in der Cloud, wo genügend Rechenleistung verfügbar ist. Hier können z. B. die Cognitive Services von Microsoft zum Einsatz kommen.

Im folgenden Artikel möchten wir Möglichkeiten, Herausforderungen und Grenzen anhand einer praktischen Anwendung der Microsoft Cognitive Services erläutern. Hierfür haben wir einen mobilen Belegscanner implementiert, der automatisiert Informationen aus Kassenbelegen extrahiert.

Im Folgenden möchten wir zuerst auf die Microsoft Cognitive Services eingehen und anschließend erläutern, wie wir diese für unser Beispiel, den SDX Belegscanner, integriert haben.

Microsoft Azure Cognitive Services

Die Microsoft Cognitive Services sind eine Ansammlung von vorgefertigten Maschine-Learning-Algorithmen, die von Microsoft entwickelt und bereitgestellt werden. Zur Kommunikation werden verschiedene RESTful APIs angeboten, welche in 5 Kategorien unterteilt sind:

  • Bildanalyse
  • Einblicke und Wissen
  • Sprache
  • Spracheingabe
  • Suchen

Im Kontext unseres Belegscanners haben wir uns den OCR-Service aus der Kategorie „Bildanalyse“ näher angeschaut. Dieser extrahiert aus Bildern Text und stellt diesen in einer computerlesbaren Form zur Verfügung. Ideal also für die Erkennung eines Beleges, um daraus weitere Informationen zu erhalten!

Anhand des nachfolgenden Beispiels soll die Verwendung des OCR-Services exemplarisch gezeigt werden:

 

Zunächst wird der Beleg bzw. die Rechnung als Bild an den OCR-Service gesendet. Dieser erkennt darin den Text und gibt das Ergebnis strukturiert im JSON-Format zurück. Das Ergebnis enthält die einzelnen Regionen (BoundingBox) und Wörter innerhalb des Bildes. Diese können genutzt werden, um die Darstellung aufzubereiten oder um weitere Analysen darauf durchzuführen.

SDX Belegscanner

Nachdem wir einen groben Überblick über die Microsoft Cognitive Services und der Verwendung des OCR-Services gegeben haben, kommen wir nun zu unserem Praxisbeispiel, dem SDX Belegscanner.

Dieser ermöglicht es, Bilder von Kassenbelegen aufzunehmen, die darauf enthaltenen Informationen zu extrahieren und in geeigneter Weise dem Benutzer anzuzeigen. Für einen ersten Prototyp und der damit verbundenen Auswahl geeigneter Cognitive Services haben wir uns zunächst auf die Erkennung von Gesamtpreis, Datum und Name des Geschäfts beschränkt.

Der Ablauf zur Erkennung ist wie folgt:

  1. Aufnahme bzw. Auswahl des Kassenbeleges per mobiler App (Implementierung mit Xamarin.Forms)
  2. Senden von Bild und Einstellungsparametern an unsere eigens entwickelte Middleware (Web API)
  3. Middleware ruft OCR-Service auf, der das Bild in eine textuelle Form überführt
  4. Auf der Basis der textuellen Form werden nun drei unterschiedliche Verfahren angewandt, um die drei Informationen Gesamtpreis, Datum und Name des Geschäfts zu ermitteln.
  5. Konsolidierung der drei Informationen und Darstellung in der mobilen App.

Nachfolgend eine kurze Erläuterung, wie anhand der textuellen Form Gesamtpreis, Datum und der Name des Geschäfts ermittelt werden kann:

Datum

Für das Einkaufsdatum werden alle Wörter analysiert und versucht, ein Datum darauf zu erkennen.

Gesamtpreis

Beim Gesamtpreis wird nach Stichwörtern wie „Summe“ oder „Gesamtbetrag“ und anschließend nach einem Geldbetrag gesucht, der rechts neben diesem Stichwort platziert ist.

Name des Geschäfts (Kategorie)

Dies war die größte Herausforderung. Wir benötigten ein Verfahren, welches anhand von Eingabeparametern (textuelle Form, JSON-Format) den Namen des Geschäfts erkennt. Dabei sollte idealerweise bei neuen Kassenbelegen eine optimierte Vorhersage zur Kategorie getroffen werden. Die rein textuelle Analyse stieß hierbei an ihre Grenzen.

Um zukünftig aus den bereits aufgenommenen Kassenbelegen zu lernen und eine optimierte Vorhersage treffen zu können, haben wir uns für den Einsatz des Microsoft Azure Maschine Learning Studios entschieden, mit dessen Hilfe Trainingsmodelle und Vorhersagemodelle entworfen und veröffentlicht werden können. Anschließend kann das Modell als Webservice veröffentlicht und unserer Middleware zur Verfügung gestellt werden.

Aus des oben beschriebenen Vorgehensmodell ergibt sich die folgende Architektur, auf die anschließend näher eingegangen wird:

 

Mobile Clients: Diese ermöglichen die Erfassung von Kassenbelegen und die aufbereitete Darstellung der Analyseergebnisse. Mit Hilfe von Xamarin.Forms konnte die App für die drei Plattformen Android, iOS und UWP entwickelt werden.

ASP.NET Core WebAPI (Middleware): Die Middleware fungiert als Kernkomponente. Sie nimmt alle Anfragen von mobilen Clients entgegen, ruft selbst externe Services auf, führt Analysen auf den Daten aus und konsolidiert die Ergebnisse.

Azure Cognitive Services: Die Azure Cognitive Services enthalten den von uns verwendeten OCR-Service. Dieser Service extrahiert Text aus Bildern, in unserem Fall die Bilder der Kassenbelege.

Azure SQL Database: Die Azure SQL Datenbank nutzen wir, um die Ergebnisse der Analyse zu speichern und diese Daten für das Trainingsmodell im Azure Machine Learning Studio wiederzuverwenden.

Azure Machine Learning Studio: Das Azure Machine Learning Studio von Microsoft bietet die Möglichkeit, eigene Machine-Learning-Modelle in einer Weboberfläche zu erstellen und diese dann als Webservice in Azure zur Verfügung zu stellen.

Herausforderungen

Während der Entwicklung des Belegscanner-Prototypen gab es einige Herausforderungen, auf die im Folgenden eingegangen werden soll.

Ein Nachteil vieler Microsoft Cognitive Services ist, dass diese bereits vortrainiert sind und nicht zusätzlich mit eigenen Daten trainiert werden können. Dadurch lassen sie sich schlecht auf spezielle Probleme, wie z. B. das Erkennen von Text auf Belegen, optimieren und die Ergebnisse sind für den konkreten Einsatzzweck nicht immer optimal.

Eine Lösung dieses Problems ist die Verwendung von Azure Machine Learning Studio. Hiermit können eigene Machine-Learning-Modelle erstellt, trainiert und danach veröffentlicht werden. Diese Modelle können allerdings sehr komplex werden. In unserem Praxisbeispiel haben wir ein solches, auf unsere Bedürfnisse angepasstes Modell für die Erkennung des Geschäftsnamens verwendet.

Eine weitere Herausforderung stellte die Qualität Ergebnisse aus der OCR-Texterkennung dar. Abhängig von verschiedenen Faktoren kann der OCR-Service den Text aus Bildern besser oder schlechter erkennen. Wichtige Faktoren sind hierbei z. B. Größe und Qualität der Fotos, Lichtverhältnisse usw. Um diesen Effekten entgegenzuwirken und eine konstant gute Texterkennung zu garantieren, haben wir eine Bild-Vorverarbeitung implementiert. Diese bessert die Bilder auf, bevor diese zum OCR-Service geschickt werden.

Fazit

Mit Hilfe der Cognitive Services von Microsoft war es uns möglich, einen Belegscanner für mobile Clients in relativ kurzer Zeit zu entwickeln. Da die Cognitive Services bereits vortrainiert sind, entfällt dieser Aufwand für den Anwender.  Ein Nachteil ist, dass sie in der Regel nicht angepasst werden können. Durch den Betrieb der Cognitive Services in Azure sind sie besonders attraktiv für weniger leistungsstarke, mobile Geräte.

Neben dem hier verwendeten OCR-Service zur Texterkennung existieren noch zahlreiche andere Cognitive Services, die für diverse Anwendungsszenarien relevant sein können. Darüber hinaus bietet Microsoft mit Azure Machine Learning Studio ein weiteres, sehr mächtiges Werkzeug zum Erstellen und Konsumieren eigener Machine-Learning-Modelle. In unserem Praxisbeispiel haben wir dessen Funktionalität nur oberflächlich gestreift. Eine genauere Erläuterung aller Funktionen von Azure Machine Learning Studio ist einen oder sogar mehrere eigene Artikel wert.