Mal ganz kognitiv Cognitive Services von Microsoft - Sigs Datacom
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
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.
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
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).
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).
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).
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).
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,
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