Archiv der Kategorie: Technik

Die Arbeit nach der Aufnahme: Helfen Cloud-Dienste zur Bildanalyse?

Wie finde ich ein bestimmtes Bild wieder? Das Durchstöbern zahlreicher Ordner auf der Festplatte kann sehr müßig werden, insbesondere wenn der Bildbestand auf mehrere Zehntausend Bilder angewachsen ist. Die Suche wird stark vereinfacht, wenn die Bilder in einer Datenbank beschrieben werden, mit Informationen zum Ort und dem Tag der Aufnahme sowie einer möglichst genauen Beschreibung des Bildinhaltes.

Allerdings: Nicht das (Aus-) Sortieren der unterwegs gemachten Bilder oder deren Nachbearbeitung mit Programmen wie Lightroom oder Photoshop verschlingt die meiste Zeit. Den größten Arbeitsaufwand verursacht die eingangs erwähnte textuelle Beschreibung der Bilder.

Während das Datum und der Ort der Aufnahme schnell festgestellt sind, braucht die Beschreibung des Bildinhalts mehr Zeit. Fortschritte gibt es auch hier: Mit Webseiten wie Wikipedia und wikimapia geht die inhaltliche Recherche einfacher und schneller im Vergleich zu den früher verwendeten Stadtplänen und Reiseführern. Zusätzliche, sogenannte Metainformationen, fehlen dann noch immer. Meinen Versuch dies „von Hand“ zu machen, habe ich vor Jahren aufgegeben. Es war das berühmte Fass ohne Boden. (Um was es sich bei Metainformationen handelt, wird im Laufe dieses Textes klar, hoffe ich.)

Cloud-Dienste zur Bildanalyse

Eine Möglichkeit Bildbeschreibungen mit Metainformationen anzureichern, ermöglichen Cloud-Dienste wie sie die IT-Riesen Google, Microsoft und Amazon anbieten. Wie funktionieren Google Vision, Microsoft Cognitive Services und Amazon Rekognition?

Allen Cloud-Diensten gemeinsam ist, dass sie für unterschiedliche Programmiersprachen Programmierschnittstellen anbieten. Ich nutze als Programmierumgebung das auf JavaScript basierte node.js. Um die genannten Cloud-Dienste nutzen zu können ist eine Anmeldung bei diesen erforderlich. Für eine gewisse Zeit bzw. für einen gewissen Umfang ist die Nutzung der Dienste frei, danach fallen Gebühren an.

Nachfolgend skiziere ich kurz die Funktionsweise der drei genannten Cloud-Dienste. Eine ausführliche Dokumentation findet sich auf den Webseiten von Google Cloud, Microsoft Azure und Amazon Web Services.

Google Vision

Nach der Anmeldung in der Google Cloud erhält man zur Nutzung der angebotenen Dienste eine Credential-Datei credential.json, die man seinem System über die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS bekannt macht. Zur Nutzung mit node.js muss das Paket @google-cloud/vision installiert werden. Die Grundstruktur des node.js-Programms ist sehr kurz:

const vision = require('@google-cloud/vision');
const client = new vision.ImageAnnotatorClient();

var request = {
    image: { source: { filename: '1202064.jpg' } },
    features: [{ type: "LABEL_DETECTION", maxResults: 20 }]
};

client.annotateImage(request).then(results => {
    const labels = results[0].labelAnnotations;
    labels.forEach(label => console.log(label.description + '|' + Math.round(label.score * 1000.0)));
}

Zurück bekommt man eine Liste von Labels, die jeweils mit einem Score bewertet werden. Der Score hat einen Wert zwischen 0 und 1. Um so höher dieser Score ist, desto sicherer ist das Google-System, dass dieser Label auch korrekt ist. Für eine bessere Übersichtlichkeit multipliziere ich den Score mit 1000. Beispiele zu Labels und Scores finden sich weiter unten.

Microsoft Cognitive Services

Bei Microsoft Azure erhält man Zugriff auf die Programmierschnittstellen durch alphanumerische Schlüssel, die direkt im Programmcode verwendet werden können. Für das node.js-Programm muss das Paket azure-cognitiveservices-vision installiert werden.

const Vision = require('azure-cognitiveservices-vision');
const CognitiveServicesCredentials = require('ms-rest-azure').CognitiveServicesCredentials;
let credentials = new CognitiveServicesCredentials('xxx');
let computerVisionApiClient = new Vision.ComputerVisionAPIClient(credentials, "westeurope");

let result = computerVisionApiClient.analyzeImage(
    'https://www.juergen-reichmann.de/images/pics/1202000/1202064.jpg',
    { visualFeatures: ['Tags'] },
    function (err, result) {
        const tags = result.tags;
        tags.forEach(tag => console.log(tag.name + '|' + Math.round(tag.confidence * 1000.0)));
    }
);

Was bei Google Labels sind, wird bei Microsoft als Tag bezeichnet. Inhaltlich ist es das gleiche. Der dem Google-Score-Wert entsprechende Confidence-Wert eines Tags liegt zwischen 0 und 1 (und wird für die nachfolgende Vergleichbarkeit auf Werte zwischen 0 und 1000 skaliert).

Amazon Rekognition

Der Amazon Web Service bietet wie Google eine Credential-Datei um auf seine Dienste zugreifen zu können. Diese wird an einem bestimmten Ort – unter Linux ist dies ~/.aws/credentials – auf seinem lokalen Rechner hinterlegt.

Google und Microsoft bekommen die Daten des zu analysierenden Bildes entweder über eine URL (im Beispiel „https://www.juergen-reichmann.de/images/pics/1202000/1202064.jpg“) oder durch direkten Upload der Bilddatei zur Verfügung gestellt. Geringfügig komplizierter gestaltet sich der Vorgang bei Amazon. Hier muss die entsprechende Bilddatei zuerst im Amazon-eigenen Simple Storage Service (S3) gespeichert werden.

Zur Verwendung mit node.js wird das Paket aws-sdk benötigt.

const AWS = require('aws-sdk');
AWS.config.update({region: 'us-east-1'});
const rekognition = new AWS.Rekognition();
const fs = require('fs');
const s3 = new AWS.S3();

const bucketName = 'rekog-upload-3';
var bucketParams = { Bucket: bucketName };

function base64_encode(file) {
    var bitmap = fs.readFileSync(file);
    return new Buffer(bitmap).toString('base64');
}

s3.createBucket(bucketParams, function(err) {
    var s3Bucket = new AWS.S3( { params: {Bucket: bucketName} } );
    var imageName = '1202064';
    var data = { Key: imageName, Body: Buffer.from(base64_encode('1202064.jpg'), 'base64') };
    
    s3Bucket.putObject(data, function(err, data){
        var params = {
            Image: { S3Object: { Bucket: bucketName, Name: imageName } },
            MaxLabels: 100,
            MinConfidence: 20
        };
        
        rekognition.detectLabels(params, function(err, data) {
            const labels = data.Labels;
            labels.forEach(label => console.log(label.Name.toLowerCase() + '|' + Math.round(label.Confidence * 10.0)));
        });
    });
});

Bei Amazon heißt der Label Label wie bei Google, die Bewertung desselbigen Confidence wie bei Microsoft. Allerdings liegt der Confidence-Wert bei Amazon zwischen 0 und 100.

Allen drei hier vorgestellten Cloud-Diensten gemeinsam ist, dass sie ihre Ergebnisse auf Englisch zurückliefern. Benötigt man die Ergebnisse in einer anderen Sprache, lassen sich diese beispielsweise mit der Google Cloud Translation API automatisiert übersetzen.

Beispiele

Um die Qualität der drei Bildanalysedienste beurteilen zu können, habe ich Beispielbilder mit unterschiedlichen Motiven ausgewählt. Die Ergebnisse (und mehr noch meine Schlussfolgerungen) haben aufgrund der geringen Stichprobenauswahl keinen wissenschaftlichen Anspruch, liefern aber interessante Erkenntnisse. Bei Google und Amazon tauchen nur Labels (Tags) auf, die einen Scorce- bzw. Confidence-Wert von größer als 500 haben.

Beispiel 1: High Street und Carfax Tower Oxford

Eine Straßenszene in der englischen Universitätsstadt Oxford, eingerahmt von historischen Bauten.

High Street und Carfax Tower Oxford

High Street und Carfax Tower Oxford


GoogleMicrosoftAmazon
town917building1000architecture829
city897outdoor1000building829
sky828sky991city829
urban area812road976downtown829
town square797street959plaza829
medieval architecture787people926town829
building786walking899town square829
street784city841urban829
history696group585clock tower675
tourist attraction621way565tower675
metropolis598square539crowd634
facade594crowd486human634
tower594town398person634
plaza586gathered308bell tower569
bell tower556pedestrians264landscape520
middle ages548day101nature520
steeple548outdoors520
tourism547scenery520
tours518cathedral518
château512church518
worship518
castle517
road510
street510

Sofort auffallend ist die hohe Qualität der Ergebnisse. Bis auf wenige Ausnahmen sind die gefundenen Labels korrekt.

Beispiel 2: Loch Lomond and The Trossachs National Park

Ein gänzlich anderes Motiv: Ein Landschaftsbild aus Schottland.

Loch Lomond and The Trossachs National Park

Loch Lomond and The Trossachs National Park


GoogleMicrosoftAmazon
reflection978mountain999lake977
water963outdoor998outdoors977
nature951water996water977
lake950sky993mountain562
loch933nature955mountain range562
mountain917lake919nature562
sky917pond566peak562
highland906surrounded533glacier527
wilderness892day120ice527
reservoir866snow527
fjord809flora512
mountain range791grass512
cloud785plant512
lake district782
fell779
mount scenery746
tree736
bank733
water resources724
river706

Auch in diesem Beispiel ist die Trefferquote sehr hoch. Es bestätigt sich der Eindruck von Beispiel 1, dass die Ergebnisliste von Microsoft im Vergleich zu den beiden Konkurrenten deutlich kürzer ist.

Beispiel 3: Berlin-Pankow

Wiederum eine völlig andere Bildsituation. Diesmal eine Luftbildaufnahme aus einem Berliner Außenbezirk.

Berlin-Pankow

Berlin-Pankow


GoogleMicrosoftAmazon
aerial photography974outdoor996aerial view993
urban area967sky987landscape993
city951mountain727nature993
bird's eye view934overlooking548outdoors993
metropolitan area920scenery993
suburb917building884
residential area819urban884
photography808freeway871
metropolis805road871
cityscape778city868
urban design764town868
sky752downtown798
skyline566architecture676
building556housing676
monastery676
campus629
brick628
neighborhood606
office building601
intersection569
castle566
house566
mansion566
palace566
court548
apartment building527
high rise527
park526
plaza522
town square522
countryside518
flora518
plant518
conifer513
tree513
yew513
metropolis511
convention center509
fence508
hedge508
field508

Die Microsoft-Ergebnisliste ist mit Abstand am kürzesten, nur vier Labels wurden gefunden, einer davon – mountain – nicht nachvollziehbar, ein weiterer – sky – nur bedingt relevant. Auch der Luftbild-Charakter – bei Google und Amazon jeweils die Nummer 1 auf der Liste – detektiert Microsoft nicht. Daneben fällt die sehr lange Liste von Amazon auf. Ihre inhaltliche Qualität lässt erst am Ende etwas nach. Die Wertungen dort sind allerdings auch nicht mehr sehr hoch.

Beispiel 4: Wembley-Stadion London 2013

Eine Szene mit jubelnden Spielern des FC Bayern München nach dem Gewinn des Champion League Finales im Londoner Wembley-Stadion.

Wembley-Stadion (Wembley Stadium) London 2013: Nach dem UEFA Champions League Finale FC Bayern München - Borussia Dortmund

Wembley-Stadion (Wembley Stadium) London 2013: Nach dem UEFA Champions League Finale FC Bayern München – Borussia Dortmund


GoogleMicrosoftAmazon
sport venue985grass1000human993
team sport970person972people993
stadium949field962person993
sports944soccer961trophy991
player941outdoor890mascot989
canadian football920group675football962
football player890sport668soccer962
ball game888grassy629sport962
team876football242sports962
grass845team962
gridiron football839team sport962
structure832crowd542
soccer specific stadium776flora524
plant770grass524
competition event768plant524
games765clothing508
tournament759hat508
soccer696
american football676
arena654

Google liegt in der Anzahl der Labels vorne, allerdings sind ein paar davon nicht korrekt (canadian football, gridiron football, american football).

Beispiel 5: Times Square New York bei Nacht

Das besondere an diesem Beispielbild ist, dass es bei Nacht entstanden ist.

Times Square New York City

Times Square New York City


GoogleMicrosoftAmazon
metropolitan area986building994human987
metropolis960street979people987
city958outdoor979person987
night955night931building745
urban area950city895city745
landmark942walking777town745
cityscape931busy350urban745
infrastructure863crowd5silhouette745
neon sign848downtown705
neon838architecture575
downtown799plaza575
skyscraper784town square575
street778metropolis520
electronic signage750night life518
lighting739high rise516
darkness656road514
tourist attraction621street514
sky552poster508
advertising552
building517

Den nächtlichen Charakter der Aufnahme erkennen alle, bei der Anzahl der Labels liegen Google und Amazon wieder deutlich vor Microsoft. Völlige Fehlinterpretationen finden sich bei keinem.

Praktische Anwendung

Fotografieren und Reisen sind zwei Dinge, die mir sehr wichtig sind. Fotografieren geht schon auch mal ohne auf einer Reise zu sein. Aber eine Reise ohne einen Fotoapparat, dieser Gedanke fällt mir sehr schwer (und alle, die jemals mit mir unterwegs waren, können ein Lied davon singen…).

Nach einer Vorkontrolle des aufgenommenen Bildmaterials, wird dieses thematisch auf Ordner meiner heimischen Festplatte verteilt. Diese Themen bilden die Grundlage dessen, was ich später auf meiner Webseite als Bilderserie bezeichne. Den Inhalt eines solchen Themenordners bearbeite ich mit Adobe Lightroom (selten kommt noch Adobe Photoshop zur Anwendung) nach. Die Nachbearbeitung hat keine inhaltlichen Bildänderungen zur Folge, vielmehr korrigiere ich schiefe Horizonte, schneide etwas an den Bildrändern ab und erhöhe den Kontrast von zu flauen Bildern. Das eine oder andere Bild wandert auch noch in die digitale Mülltonne.

Sind die Bilder eines Themenordners komplett bearbeitet, kommt der schreibende Teil. Jedes (nicht-gelöschte und nachbearbeitete) Bild bekommt dabei einen Eintrag in meiner Bilddatenbank. Dazu gehört eine eindeutige Bildnummer (die ich seit meinem allerersten Dia fortschreibe), eine Referenz auf die digitale Bilddatei, Datum und Ort der Aufnahme sowie Informationen zum gezeigten Inhalt (beispielsweise „High Street und Carfax Tower“ in Beispielbild 1). Parallel lese ich die technischen Information der Bilder (wie Belichtungszeit, Blende, ISO-Wert, GPS-Daten) aus den sog. EXIF-Daten der Aufnahmen und lege diese Information ebenfalls in der Bilddatenbank ab.

Für die Veröffentlichung auf einer meiner Webseiten wandern die ausgewählten Bilder – wie schon erwähnt – in eine Bilderserie. Das Beispiel des Oxford-Bildes liegt in der Serie „Oxfordshire – Oxford 1“. Jede solche Serie wird einem Land (in diesem Fall „Großbritannien“) oder einem Themenkomplex zugeordnet.

Ist eine Serie komplett, kommen die hier vorgestellten Cloud-Dienste zum Einsatz. Ich lasse alle Bilder einer Serie von diesen analysieren. Die detektierten Labels – dabei handelt es sich um die anfangs erwähnten Metainformationen – kontrolliere ich abschließend von Hand. Labels, die ich nicht für geeignet halte, entferne ich.

Entfernung von falsch detektierten Labels

Entfernung von falsch detektierten Labels

Abschließend wandern die Bilder zusammen mit den beschreibenden Information auf meine Webseite.

Webseite mit Bild und umfangreichen Informationen

Webseite mit Bild und umfangreichen Informationen

Zusammenfassung

Die Qualität der Bilderkennung der hier vorgestellten Cloud-Dienste von Google, Microsoft und Amazon hat mich positiv überrascht. Sie liefern eine Menge an zusätzlicher (Meta-) Information zu einem Bild und das mit einer erstaunlich hohen Treffsicherheit. In der Anzahl der gefundenen Labels fällt Microsoft gegenüber seinen Mitbewerbern zurück. Obwohl die Trefferanzahl bei Google und Amazon ähnlich ist, sind ihre inhaltlichen Schwerpunkte leicht unterschiedlich.

Die Nutzung der Programmierschnittstellen gestaltet sich – zumindest bei Nutzung von node.js – als einfach. Die benötigte Dokumentation ist nicht immer einfach auf den Webseiten von Google, Microsoft und Amazon zu finden, da täte an der einen oder anderen Stelle etwas mehr Ordnung gut. Man spürt deutlich, dass die Cloud-Welt ein sehr schnell wachsendes Geschäftsfeld ist. Hat man die entsprechende Webseite gefunden (am besten gleich bookmarken!), sind die Informationen aber ausführlich und verständlich.

Bei den Diensten handelt es sich um selbstlernende Systeme, d.h. ihre Ergebnisqualität soll sich im Laufe der Zeit allein durch die Anzahl der analysierten Bilddaten verbessern. Interessant wird sein, in einem gewissen zeitlichen Abstand die Beispielbilder erneut analysieren zu lassen und die Ergebnisse mit den hier vorgestellten zu vergleichen.