ch.asadzia.cognitive.SituationAnalysis.java Source code

Java tutorial

Introduction

Here is the source code for ch.asadzia.cognitive.SituationAnalysis.java

Source

package ch.asadzia.cognitive;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.FileEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.io.File;
import java.net.URI;
import ch.asadzia.cognitive.ServiceResult.Sentiment;

/**
 * Copyright (c) Asad Zia
 * Licensed under the MIT license. See LICENSE file in the project root for full license information.
 */
public class SituationAnalysis extends MsCognitiveService {
    public SituationAnalysis(File data) {
        super(data);
    }

    //An example of bad situations to look after image analysis, tagging and description operation.
    private static String badSituation[] = { "gun", "violence", "T-1000", "threat", "weapon" };

    //An example of good situations to look after image analysis, tagging and description operation.
    private static String goodSituation[] = { "baby", "flower", "happy", "friend", "fun" };

    public ServiceResult process() {

        HttpClient httpclient = HttpClients.createDefault();

        try {
            URIBuilder builder = new URIBuilder("https://api.projectoxford.ai/vision/v1.0/analyze");

            builder.setParameter("visualFeatures", "Categories,Tags,Description,Faces,Adult");

            URI uri = builder.build();
            HttpPost request = new HttpPost(uri);
            request.setHeader("Content-Type", "application/octet-stream");
            request.setHeader("Ocp-Apim-Subscription-Key", apikey);

            // Request body
            FileEntity reqEntity = new FileEntity(imageData);
            request.setEntity(reqEntity);

            HttpResponse response = httpclient.execute(request);
            HttpEntity entity = response.getEntity();

            if (entity != null) {
                String responseStr = EntityUtils.toString(entity);

                if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
                    System.err.println(responseStr);
                    return null;
                }

                ServiceResult result = translateSituation(responseStr);

                System.out.println(responseStr);

                return result;
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }

        return null;
    }

    private ServiceResult translateSituation(String string) {

        for (int i = 0; i < badSituation.length; i++) {
            if (string.contains(badSituation[i])) {
                return new ServiceResult(Sentiment.NEGATIVE, badSituation[i]);
            }

        }

        for (int i = 0; i < goodSituation.length; i++) {
            if (string.contains(goodSituation[i])) {
                return new ServiceResult(Sentiment.POSITIVE, goodSituation[i]);
            }

        }

        return new ServiceResult(Sentiment.NEUTRAL, "Not interesting");
    }

}