Saturday, December 16, 2017

Google Cloud Vision API


Google Cloud Vision API merupakan sebuah service dari Google Cloud Platform (GCP) yang bisa memberikan analisis terhadap suatu gambar. API ini dirilis pada 18 Mei 2017 dengan teknologi Machine Learning dan Big Data yang menjadi engine dibelakangnya.  API ini tersedia gratis untuk 1000 hit/bulan, jika melebihi itu akan terkena biaya yang sudah di tentukan oleh google (link).

Fiture yang diberikan oleh API ini adalah sebagai berikut:
Label Detection
Mendeteksi konten apa saja yang terkandung dalam suatu gambar, misal nya seperti terdapat mobil, motor, hewan, dll.

Face Detection
Mendeteksi muka yang terdapat dalam gambar. Diberikan juga analisis mengenai expresi dan mood wajah tersebut.

Explicit Content Detection
Mendeteksi apakah terdapat konten dewasa didalam suatu gambar

Logo Detection
Mendeteksi logo yang terdapat pada gambar, dan mengenalinya secara langsung sepertu logo Toyota, Honda, BMW, HP, dll.

Landmark Detection
Mendeteksi sebuah bangunan landmark yang terdapat di dalam sebuah foto, seperti Monas, Eiffel, dll.

Optical Character Recognition (OCR)
Mendeteksi text yang ada dalam sebuah gambar. Jadi bisa kita gunakan untuk membaca data dari foto scan KTP, SIM, dll.

Image Attributes
Memberikan info mengenai warna dominan dari suatu gambar, crop hint, dll.

Web Detection
Memberikan info mengenai website yang memiliki atau menggunakan gambar yang sama dengan gambar ini.

Cara Kerja

Aplikasi kita akan mengupload atau mengirimkan gambar ke API ini, dan akan mendapatkan response yang dalam bentuk JSON nya seperti berikut:


How To

1. Yang diperlukan sebelum bisa menggunakan API ini adalah memiliki account GCP.

2. Selanjutnya adalah membuat sebuah project di GCP, dan me-enable API ini untuk project tersebut.








3. Aplikasi kita perlu GOOGLE_APPLICATION_CREDENTIALS Key untuk bisa menggunakan API ini. Jadi kita perlu menggenerate nya terlebih dahulu.



Pilih type JSON, dan saat kita klik Create maka browser akan mendownload sebuah file.


4. Setelah mendapatkan key, kita set environment variable.
Untuk MacOS dengan menggunakan:
 export GOOGLE_APPLICATION_CREDENTIALS=/PATH/TO/KEY/FILE

Untuk Windows bisa dengan mensetup Environment Variable, dengan Variable "GOOGLE_APPLICATION_CREDENTIALS" dan Value "C:\\PATH\TO\KEY\FILE"


Demo

Pada demo kali ini kita akan menggunakan java, kita bisa menggunakan Maven atau Gradle untuk menghandle dependensi library nya.
Maven:
 <dependency>
 <groupId>com.google.cloud</groupId>
 <artifactId>google-cloud-vision</artifactId>
 <version>1.14.0</version>
</dependency>
Gradle:
 compile 'com.google.cloud:google-cloud-vision:1.14.0'
SBT:
 libraryDependencies += "com.google.cloud" % "google-cloud-vision" % "1.14.0"


Berikut adalah sample source code dari sebuah method yang menggunakan Cloud Vision API yang sudah saya modifikasi untuk menggunakan fiture Label, OCR, dan Face.
Untuk contoh asli nya bisa di dapat dari dokumentasi google (https://cloud.google.com/vision/docs/reference/libraries)
 
public JSONObject test(DataVO dataVO) throws Exception {

    JSONObject jsonObject = new JSONObject();

    // Inisiasi
    try (ImageAnnotatorClient vision = ImageAnnotatorClient.create()) {

        // Memproses image file ke memory
        Path path = Paths.get(dataVO.getFilePath());
        byte[] data = Files.readAllBytes(path);
        ByteString imgBytes = ByteString.copyFrom(data);

        // List feature yang diinginkan
        Feature feat = Feature.newBuilder()
                .setType(Type.LABEL_DETECTION)
                .build();
        Feature feat2 = Feature.newBuilder()
                .setType(Type.FACE_DETECTION)
                .build();
        Feature feat3 = Feature.newBuilder()
                .setType(Type.TEXT_DETECTION)
                .build();
        List<Feature> featureList = new ArrayList<>();
        featureList.add(feat);
        featureList.add(feat2);
        featureList.add(feat3);

        // membuat request yang terdiri dari image dan list feature yang diinginkan
        Image img = Image.newBuilder().setContent(imgBytes).build();
        AnnotateImageRequest request = AnnotateImageRequest.newBuilder()
                .addAllFeatures(featureList)
                .setImage(img)
                .build();


        // Builds the image annotation request
        List<AnnotateImageRequest> requests = new ArrayList<>();
        requests.add(request);


        // Memproses image file
        BatchAnnotateImagesResponse response = vision.batchAnnotateImages(requests);
        List<AnnotateImageResponse> responses = response.getResponsesList();


        // Mengolah respon dari Vision API
        for (AnnotateImageResponse res : responses) {

            List<String> labelList = new ArrayList<>();
            for (EntityAnnotation annotation : res.getLabelAnnotationsList()) {
                Map<Descriptors.FieldDescriptor, Object> labelMap = annotation.getAllFields();
                Iterator it = labelMap.entrySet().iterator();
                while (it.hasNext()) {
                    Map.Entry pair = (Map.Entry)it.next();
                    if (pair.getKey().toString().equals("google.cloud.vision.v1.EntityAnnotation.description")){
                        labelList.add(pair.getValue().toString());
                    }
                }
            }

            jsonObject.put("Label", labelList);

            TextAnnotation text = res.getFullTextAnnotation();
            jsonObject.put("FullTextAnnotation", text.getText());

            jsonObject.put("FaceAnnotationsCount", res.getFaceAnnotationsCount());
        }
    }

    return jsonObject;
}

image yang akan di gunakan untuk test kali ini adalah gambar berikut:

dan hasil yang kita dapatkan adalah:
 
{
    "FaceAnnotationsCount": 0,
    "Label": [
        "text",
        "cartoon",
        "font",
        "line",
        "human behavior",
        "product",
        "product design",
        "area",
        "communication",
        "conversation"
    ],
    "FullTextAnnotation": "WE ARE\nLOOKING FOR\nBack-End DeviOS Dev\nOracle SOA & Webcenter Dev\nSend your CV to\njobs@nostratech.com\n"
}

Bisa dilihat bahwa text yang terdapat di gambar terdetect dengan baik meskipun ada character \n sebagai penjelasan bahwa di aberganti baris.

Sekian demo Google Cloud Vision API dari saya, silahkan berkreasi dengan fitur-fitur yang di sediakan oleh API ini.



No comments:

Post a Comment