Mal ganz kognitiv Cognitive Services von Microsoft - Sigs Datacom

Die Seite wird erstellt Stella Hoppe
 
WEITER LESEN
Mal ganz kognitiv Cognitive Services von Microsoft - Sigs Datacom
Produkte
Cognitive Services von Microsoft

Mal ganz kognitiv
von Tam Hanna

Microsoft spielte in den Bereichen Künstliche Intelligenz und Computer Vision schon früh „ganz vorne“ mit – der Kinect-Sensor der
ersten Generation hatte beispielsweise eine mehr als brauchbare Gesichts- sowie eine grammatikbasierte Spracherkennung.
Microsoft stellte bald fest, dass es nur wenig vernünftig ist, lediglich Hardware zu verkaufen. In kognitiven Diensten stecken viel
mehr aussichtsreiche Verdienstmöglichkeiten. An drei kleinen Beispielen demonstriert der Artikel die Möglichkeiten.
Richtig Geld macht man in der „schönen neuen Welt“ dadurch, dass man dem Entwickler die Hardware günstig überlässt, um
später mit dem Verkauf von nur schwer klonbaren Services Gewinne einzufahren. Algorithmen aus dem Bereich Machine Learning
(ML) sind für derartige Ökonomisierungsmodelle geradezu ideal geeignet: Es gibt kaum ein Thema, mit dem man mehr Zeit
verbringen kann als mit der korrekten Parametrisierung eines solchen Rechenverfahrens.
Mal ganz kognitiv Cognitive Services von Microsoft - Sigs Datacom
Mit den Cognitive Services nimmt man sich in Redmond dieser Problematik an. Es handelt sich dabei um eine Gruppe von – durch
die Bank – cloudbasierten Diensten, die Entwicklern ein wahres Potpourri der Möglichkeiten des Machine Learning an die Hand
geben. Aus der Logik folgt, dass Microsoft an „maximaler Marktbreite“ interessiert ist. Deshalb gibt es APIs nicht nur für
hauseigene Programmiersprachen – in so gut wie allen Fällen erfolgt die eigentliche Kommunikation per REST.
Wir wollen in diesem Artikel einen grundlegenden Blick auf die Cognitive Services werfen und dabei mehr darüber erfahren, wie
man mit ihnen interagiert. Als Entwicklungsumgebung kommt Eclipse in der Version Neon.2 zum Einsatz – da die Beispiele nicht
sonderlich kritisch sind, dürften ältere Versionen der IDE ohne große Probleme funktionieren.

Eine Frage der Aktivierung
Sowohl Cognitive Services als auch klassische Azure-Workloads beginnen ihr Leben in der Cloud. Öffnen Sie die unter [AzCS]
bereitstehende Portalseite, und loggen Sie sich ein. Da der Autor schon seit längerer Zeit mit Azure arbeitet, beschreiben wir hier
die Nutzung der Dienste als „Vollzahler“. Wer sich erstmals anmeldet, bekommt für die Dauer eines Monats rund 200 Dollar an
kostenlosen Ressourcen zur Verfügung gestellt.
Der einst als Project Oxford [MicrCS] bezeichnete Dienst bringt in manchen Fällen zusätzliche SDKs mit. Microsoft zeigt für Java
allerdings eher wenig Liebe – wenn überhaupt, gibt es im Hause Redmond nur Programmbeispiele. „Vollwertige“ SDKs gibt es –
neben Windows – auch für Node.js, Python, Go, Swift und – witzigerweise – Googles Handcomputerbetriebssystem Android.
Zur „Korrelation“ zwischen Anfragen und Verrechnungspunkten setzt Microsoft auf das Konzept des Accounts. Öffnen Sie das
unter [MicrAz] bereitstehende Azure-Backend und legen Sie eine neue Ressource vom Typ „AI / Machine-Learning -> Computer
Vision (Preview)“ an. Microsoft gewinnt an dieser Stelle keine Übersichtlichkeitspreise – manchmal ist die gewünschte Ressource
sofort sichtbar, während sie in anderen Fällen mit „More“ tiefer in den Auswahldialog einsteigen müssen.
Der Azure-Assistent fragt Sie im nächsten Schritt nach diversen Informationen: Wichtig ist, dass Sie neben der Vergabe eines
Namens in der Rubrik „Pricing Tear“ die Option „F0“ auswählen. Im Bereich der Ressourcengruppe haben Sie im Großen und
Ganzen freie Hand – es handelt sich nur um eine „Ordinalzahl“, die dem Backend das Zuordnen der Ressourcen zu Projekten
erleichtert.

    Abb. 1: Diese – von Installation zu Installation unterschiedlichen – Strings ermöglichen den Zugriff auf die
    Programmierschnittstelle von Computer Vision (Screenshot).

Nach dem Anklicken von „Create“ vergeht – wie bei Azure üblich – die eine oder andere Minute, bevor die Ressource zur Nutzung
bereitsteht. Öffnen Sie das neu angelegte Element im nächsten Schritt im Backend, und wechseln Sie in die Rubrik „Keys“.
Microsoft zeigt Ihnen dort – wie in Abbildung 1 demonstriert – zwei Schlüsselstrings an, über die Sie Ihr Programm beim Server
ausweisen können. Neben der auf 5.000 Anfragen pro Monat beschränkten kostenlosen Preisstufe gibt es mit „S0“ auch ein Pay-
As-You-Go-Modul. Die genauen Preise sind unter [AzCVPric] beschrieben, liegen allgemein (lies: bei weniger als einer Million
Transaktionen pro Monat) im Bereich 1 bis 1,5 US-Dollar pro 100 Anfragen.

Erstes Java-Projekt: Verschlagwortung von Bilddateien
Mal ganz kognitiv Cognitive Services von Microsoft - Sigs Datacom
Listing 1

Erzeugen Sie im nächsten Schritt auf Basis der Vorlage „Java Application“ ein neues Projekt – im Code zum Heft hört es auf den
Namen SIGSCV [SRC]. Microsoft schlägt die Nutzung von Maven vor. Wer diese automatisierte Paketverwaltung nicht einsetzen
möchte, kann die folgenden drei Komponenten auch von Hand herunterladen und in das Projekt integrieren (siehe Listing 1).

Während sich Core und der JSON-Parser ohne große Probleme finden lassen, sorgt der HTTPClient wegen seiner diversen
Abhängigkeiten für Probleme. Besuchen Sie die URL [HttpClient] und laden Sie das Archiv httpcomponents-client-4.5.5-bin.zip
herunter. Das Archiv bringt eine Gruppe von JARs mit, die allesamt zur Kompilation erforderlich oder zumindest hilfreich sind.

Für die Parametrisierung der Zugriffsklasse müssen wir kleine Änderungen im Backend vornehmen. Öffnen Sie im ersten Schritt
das Overview-Fenster, um die URL zu ermitteln. Wir haben es hier zum Zeitpunkt der Drucklegung mit einem kleinen Bug zu tun:
Das Backend generiert zwar für die verbesserte Version 2 gültige Schlüssel, kann aber laut [GitH] noch keine passenden URLs
generieren.

Als Workaround empfiehlt Microsoft deshalb, diese vorgeschlagene URL zu nehmen und in die Region zu „transferieren“, in der
die vorliegende Ressource liegt. Das Azure-Konto des Autors liegt in der Nähe eines wichtigen Beratungskunden in Australien.

    Listing 2

Im nächsten Schritt beginnen wir mit der eigentlichen Arbeit. Im Interesse der einfacheren Parametrierbarkeit exponieren wir den
Endpunkt, das zu analysierende Bild und den Schlüssel durch drei „globale“ Variablen. Der Autor verwendete hier den zweiten
Key – wenn Sie sich vertippen oder versehentlich einen falschen Endpunkt auswählen, so wirft das Programm zur Laufzeit eine
Fehlermeldung aus (siehe Listing 2).

    Listing 3

Der restliche Code ist im Großen und Ganzen gewöhnliches Hantieren mit dem HTTPClient. Im ersten Schritt legen wir einen
URIBuilder an, in dem wir neben der URL auch eine Gruppe von Parametern einschreiben (siehe Listing 3).
Mal ganz kognitiv Cognitive Services von Microsoft - Sigs Datacom
Listing 4

Microsoft erlaubt Entwicklern im Interesse der Reduzierung der Rechenlast, nicht alle Informationen anzufordern. So könnten Sie
beispielsweise Color oder Categories wegfallen lassen, wenn Sie sich nur für eine schlagwortartige Beschreibung des Bildmaterials
interessieren. Das Festlegen der Sprache ist zurzeit mehr Alibi als wichtig.
Im nächsten Schritt feuern wir die Anforderung in Richtung des Servers und nehmen die eingehenden Informationen an. Auch hier
gilt, dass der Code zwar lang ist, aber – zumindest für Kenner von Apaches HTTP-Client – keine wirklichen Überraschungen
aufweist (siehe Listing 4).

An dieser Stelle können wir das Programm ausführen und uns – nach rund 2 bis 3 Sekunden – am in Abbildung 2 gezeigten
Resultat erfreuen.

    Listing 5

Die „Genauigkeit“ der Schlagworte ist zum Zeitpunkt der Drucklegung dieser Ausgabe übrigens stark verbesserungsfähig.
Abbildung 3 stammt aus dem Instagram-Feed des Autors und zeigt eine Gruppe westlicher und sowjetischer Multimeter. Sendet
man die Inhalte in Richtung des Backends, so bekommt man folgendes – nur wenig befriedigendes – Ergebnis (siehe Listing 5).
Mal ganz kognitiv Cognitive Services von Microsoft - Sigs Datacom
Abb. 3: Auch wenn man es heute nicht gern zugibt: sowjetische Technik funktioniert!

Im Interesse der Fairness muss der Autor zugeben, dass es sich bei Abbildung 3 um ein sehr „eigenwilliges“ Bild handelt. In
Testbildern von Nahrungsmitteln, Personen oder Szenen aus dem gewöhnlichen Leben lieferten die Services – zumindest bis zu
einem gewissen Grad – brauchbare Ergebnisse. Für eine automatisierte Verschlagwortung von Fotos muss die Künstliche
Intelligenz allerdings noch viel lernen.

Zweites Java-Projekt: Erkennung des Textes!

    Listing 6

Die Verschlagwortung von Bilddateien ist insofern undankbar, als es vergleichsweise schwierig ist, eine „richtige“ von einer
„falschen“ Zuweisung zu unterscheiden. Bei der Arbeit mit OCR (Optical Character Recognition) tritt dieses Problem nicht auf.
Erzeugen Sie ein weiteres Projekt, und fügen Sie die vom vorigen Besuch bekannten JAR-Archive hinzu. Im nächsten Schritt
erzeugen wir eine neue Klasse namens OCRImage, die von JSONObject abgeleitet ist. Der Schlüssel wird vom Vorgänger
übernommen. Wichtig ist die Anpassung der URL – wir nutzen nun nämlich einen anderen Endpoint am Microsoft-Server (siehe
Listing 6).
Mal ganz kognitiv Cognitive Services von Microsoft - Sigs Datacom
Listing 7

Sonst erfolgt auch der OCR-Prozess durch eine gewöhnliche JSON-Transaktion, weshalb wir deren Code hier nicht zur Gänze
abdrucken. Interessant ist nur, dass wir nun einen anderen Parametersatz übergeben – bei der OCR erlaubt Microsoft die
Anmeldung der „Zielsprache“.
Da wir unser Programm so offen wie irgendwie möglich halten wollen, übergeben wir den String „unk“ – eine Konstante, die die
Umgebung darüber informiert, dass sie die Sprache des vorliegenden Texts erahnen muss.
Im nächsten Schritt können wir einen ersten Versuch wagen. Der Autor verwendet hierbei ein auf Wikipedia Commons gehostetes
Buch über Pferde, das englischsprachig ist, für das keine Urheberrechte mehr gelten und dessen Print ganz brauchbar ist (siehe
Listing 7).
Mal ganz kognitiv Cognitive Services von Microsoft - Sigs Datacom
Abb. 4: Das ist kein String! (Screenshot)

Wer das vorliegende Programm ausführt, sieht das in Abbildung 4 gezeigte Ergebnis. Microsoft unterscheidet sich von anderen
Herstellern wie ABBYY durch eine eigenwillige Herangehensweise: Anstatt einen möglichst „druckfertigen“ Text zu liefern,
Mal ganz kognitiv Cognitive Services von Microsoft - Sigs Datacom
retourniert die Programmierschnittstelle stattdessen eine Art Array, das die einzelnen Elemente des Dokuments geografisch
verortet. Sie könnten die BoundingBox-Informationen nutzen, um die einzelnen erkannten Wörter in der Grafik hervorzuheben.
Alternativ dazu können Sie aber auch versuchen, den Text zu rekonstruieren.

Das zurückgelieferte Datenmodell ist vergleichsweise einfach: Die „Regionen“ bestehen aus mehreren Lines-Elementen, die
jeweils eine Textzeile beschreiben. Witzigerweise gibt es innerhalb der Elemente Unterwörter, die die eigentlichen Wörter
anliefern. Das Zusammenbauen des fertigen Strings wäre dann eine reine Parsing-Aufgabe, mit der wir uns an dieser Stelle aber
nicht weiter auseinandersetzen möchten.

Mehr Cognitive Services!
Wer das weiter oben genannte Portal [AzCS] besucht, bemerkt, dass Microsoft die verschiedenen Dienstleistungen in insgesamt
fünf Kategorien unterteilt. Neben der schon verwendeten Vision-Rubrik gibt es mit Knowledge auch einen Dienst, der Ontologien
erzeugt und beispielsweise zur Generierung von intelligenten Vorschlägen verwendet werden kann.
In der Rubrik Language finden sich diverse Services, die natürliche Sprachen analysieren – denken Sie beispielsweise an die
Erkennung der „Laune“ des Benutzers. In der Kategorie Speech gibt es Werkzeuge, die gesprochenen Text transkribieren oder
anhand von Sprachsamples Benutzer authentifizieren – dieses wäre zum Beispiel für ein Messgerät vernünftig, das (analog zu
alten HP-Oszillografen) per Sprache steuerbar ist und so automatisch Benutzerprofile und andere Metadaten lädt.
Zu guter Letzt gibt es in der Rubrik Search noch eine Gruppe von Diensten, die die Bing-Suchmaschine einbinden – ob man Bing
wirklich nutzen möchte, ist aufgrund des permanent über der Business-Unit schwebenden Damoklesschwerts der Abkündigung
fraglich. Wir wollen – aus Spaß an der Freude – trotzdem eine weitere bildverarbeitende Applikation realisieren: diesmal allerdings
aus dem Bing-Portfolio.

Drittes Java-Projekt: Such-API

    Abb. 5: Hinter dieser Option verbirgt sich ein Kontextmenü mit hilfreichen Dateien. (Screenshot)

Das Backend unterteilt die Schlüssel „streng“ – für uns bedeutet dies, dass wir zur Nutzung des Such-API einen separaten
Schlüssel beantragen müssen. Klicken Sie also abermals auf „Create new Resource“, und wechseln Sie in die Rubrik „API +
Machine Learning“.
Da Microsoft lange die fünfte und die siebte Version der Bing-Programmierschnittstelle „nebeneinander“ angeboten hat, herrscht
zum Zeitpunkt der Drucklegung eine gewisse Duplizierung. Entscheiden Sie sich deshalb für „Bing Search V7“, und arbeiten Sie
den Installationsassistenten wie gewohnt ab. In Sachen „Pricing Tear“ wollen wir uns für „F0“ entscheiden, die Bing-Statistik-
Erweiterung muss unbedingt deaktiviert sein. Dies ist insofern wichtig, als sie auch in der „sonst kostenlosen“ Version des
Dienstes nicht unerhebliche Kosten verursacht.
Auch hier gilt, dass der Bereitstellungsprozess einige Zeit in Anspruch nimmt. Bis die im Backend angezeigten Schlüssel beim API-
Endpunkt gültig sind, können je nach Auslastung sogar zwischen zehn und 15 Minuten Wartezeit fällig werden. Während dieser
Totzeit können Sie in Eclipse ein neues Projektskelett anlegen – in den Versuchen des Autors hörte es auf den Namen SIGSBing.
Witzigerweise empfiehlt Microsoft in der offiziellen Dokumentation die Verwendung der von Google entwickelten GSON-Bibliothek:
Der Name steht für, man glaubt es kaum, Google JSON Library.
Wer – wie der Autor – eine Abneigung gegen Maven hat, besucht die URL [Sonatype] in einem Browser seiner Wahl. Klicken Sie
danach auf das Download-Symbol in der oberen rechten Ecke, um ein Pop-up-Menü zu aktivieren. Dort wählen Sie die Option
„Jar“, um eine weitere Bibliothek herunterzuladen (siehe Abbildung 5).
Listing 8

Das Bing-API zeigt sich in Sachen Parametrisierung kooperativer als dessen „Computer Vision“-Kollegen. So gibt es beispielsweise
nur einen einzelnen Endpunkt, der zwischen allen Instanzen und Servern aufgeteilt ist (siehe Listing 8).

    Listing 9

Ein „grundlegender“ Suchprozess lässt sich dann wie gewohnt über eine HTTPConnection realisieren. Problematisch ist nur, dass
der Autovervollständiger von Eclipse in manchen Fällen statt des Java.Io-Pakets ein inkompatibles Element aus der CORBA-
Umgebung erbeutet (siehe Listing 9).

Wichtig ist im vorliegenden Code eigentlich nur, dass Sie den an setRequestProperty übergebenen Schlüssel durch den Schlüssel
ersetzen müssen, der in Ihrer Version des Azure-Backends am Bildschirm erscheint. Sodann können Sie das Programm auch schon
ausführen – der Response-String enthält Informationen über die vom Server angelieferten URLs.

Achtung bei Fixkontingenten!
Der Autor dieser Zeilen verbrannte sich in Sachen Azure schon öfters die Hände, als er einen an sich kostenlosen Dienst
aktivierte. Microsoft platziert nämlich gerne „Add-ons“, die eine teure Grundgebühr aufweisen. Eine klassische Falle ist
beispielsweise der Streamingdienst oder das Statistik-Add-on, das auch bei einer einzigen Transaktion pro Verrechnungseinheit
schon einen Dollar kostet.

Fazit
Beim Kauf von Cloud-Services ist die Debatte normalerweise finanzieller Natur: Mietet man eine Ressource ein Jahr lang, so kann
man sie auch kaufen.
Im Fall von Microsofts Cognitive Services sieht die Situation komplett anders aus. Das liegt – unter anderem – daran, dass die
Entwicklung von Algorithmen mit Techniken aus dem Bereich Machine Learning ein immens aufwendiger und Rechenleistung
konsumierender Prozess ist. Bis man eines der – manchmal nur leidlich funktionierenden – Modelle nachgebaut hat, gehen
Tausende von Mannstunden ins Land.
In diesem Sinne hat man, insbesondere als kleines Unternehmen, oft nur wenige Alternativen. Da Microsoft Azure-Kunden im
Moment aber als „VIPs“ betrachtet, könnte man diese Möglichkeit vielleicht nutzen, um eine bessere Beziehung zu Big R
aufzubauen.
Literatur
[AzCS] Portalseite, https://azure.microsoft.com/en-us/services/cognitive-services/

[AzCVPric] Pricing Computer Vision API, Microsoft Azure,
https://azure.microsoft.com/de-de/pricing/details/cognitive-services/computer-vision/

[GitH] how do I obtain keys for computer vision 2.0, https://github.com/MicrosoFTDocs/azure-docs/issues/8669

[HttpClient] HttpComponents Client, http://tux.rainside.sk/apache//httpcomponents/httpclient/binary/

[MicrAz] Anmeldeportal zu Microsoft Azure, https://portal.azure.com/

[MicrCS] Was ist Cognitive Services, Microsoft Azure, 2.1.2017,
https://docs.microsoft.com/de-de/azure/cognitive-services/welcome

[Sonatype] The Central Repository Search Engine, https://search.maven.org/artifact/com.google. code.-GSON/-GSON/2.8.5/jar

[SRC] Workbench mit Beispielen zu Vision, Bing und OCR

Tam Hanna
Tam Hanna ist Gründer der Tamoggemon Holding k. s. Er beschäftigt sich mit der Programmierung
und Anwendung von Mobilcomputersystemen und steht gerne für Vorträge und Fragen zur Verfügung.

E-Mail: tamhan(at)tamoggemon.com

Bildnachweise:
Tam Hanna, Shutterstock

                                                           AI Trendletter

                                                           Impressum
                                                                 |
                                                        Kontakt & Anfrage
Sie können auch lesen