Blog AWS Indonesia

Menjelajahi Gambar di Media Sosial Menggunakan Amazon Rekognition dan Amazon Athena

Jika Anda seperti kebanyakan perusahaan, Anda ingin lebih memahami pelanggan dan citra merek Anda. Anda ingin melacak keberhasilan kampanye pemasaran Anda, dan topik yang menarik — atau frustrasi — bagi pelanggan Anda. Media sosial adalah hal yang sangat menjanjikan untuk menjadi sumber yang kaya dari jenis informasi ini, dan banyak perusahaan mulai mengumpulkan, mengumpulkan, dan menganalisis informasi dari platform seperti Twitter.

Namun, semakin banyak percakapan media sosial berpusat di sekitar gambar dan video; pada satu proyek terbaru, sekitar 30% dari semua tweet (kicauan) yang dikumpulkan termasuk satu atau lebih gambar. Gambar-gambar ini berisi informasi yang relevan yang tidak mudah diakses tanpa analisis.

Tentang tulisan ini
Waktu menyelesaikan 1 jam
Biaya yang dikeluarkan ~ US$5 (di saat publikasi blog post ini, tergantung region dan kondisi)
Level pelajaran Intermediate (200)
Layanan AWS Amazon Rekognition
Amazon Athena
Amazon Kinesis Data Firehose
Amazon S3
AWS Lambda

Gambaran Umum Solusi

Diagram berikut menunjukkan komponen solusi dan bagaimana gambar dan data yang diekstraksi secara mengalir di solusi ini:

Komponen ini tersedia melalui templat AWS CloudFormation.

  1. Twitter Search API mengumpulkan tweet.
  2. Amazon Kinesis Data Firehose mengirimkan tweet untuk disimpan di Amazon S3.
  3. Dengan adanya objek S3 dalam bucket atau direktori akan memicu fungsi Lambda.
  4. Lambda mengirimkan setiap teks tweet ke Amazon Comprehend untuk mendeteksi sentimen (positif atau negatif), entitas (objek dunia nyata seperti orang, tempat, dan barang komersial), dan referensi yang tepat untuk langkah-langkah seperti tanggal dan jumlah. Untuk informasi lebih lanjut, anda dapat melihat DetectSentiment dan DetectEntity di panduan pengembang untuk Amazon Comprehend.
  5. Lambda memeriksa setiap tweet untuk media jenis ‘photo’ di tweet extended_entities . Jika foto memiliki extention .JPG atau .PNG, Lambda akan memanggil Amazon Rekognition API berikut untuk setiap gambar:
    1. Detect_labels, untuk mendeteksi obyek seperti Person, Pedestrian, Vehicle, dan Car dari gambar.
    2. Detect_moderation_labels, untuk menentukan apakah gambar atau video yang disimpan berisi konten yang tidak aman, seperti konten dewasa yang eksplisit atau konten kekerasan.
    3. Jika detect_labels API mengembalikan hasil label Text, detect_text akan mengekstraksi garis, kata, atau huruf yang ditemukan dalam gambar.
    4. Jika detect_labels API mengembalikan hasil label Person, maka Lambda akan memanggil API berikut:
      1. detect_faces, untuk mendeteksi wajah dan menganalisisnya untuk fitur seperti kacamata hitam, jenggot, dan kumis.
      2. recognize_celebrities, untuk mendeteksi sebanyak mungkin selebriti dalam beberapa setting yang berbeda, makeup kosmetik, dan kondisi lainnya.
    5. Hasil dari semua panggilan untuk satu gambar digabungkan menjadi satu JSON record. Untuk informasi lebih lanjut tentang API ini, lihat Actions pada panduan pengembang untuk Amazon Rekognition.
  6. Hasil dari Lambda akan dikirim ke Kinesis Data Firehose. Kinesis Data Firehose mengumpulkan record-record tersebut dan menuliskannya ke dalam folder di S3 bucket tertentu.
  7. Anda dapat menggunakan Amazon Athena untuk membangun tabel dan view atas dataset S3, kemudian katalog definisi ini dalam data catalog di AWS Glue. Tabel dan definisi view menjadikan lebih mudah untuk query objek JSON yang kompleks di dalam dataset S3 ini.
  8. Setelah tweet diproses dan disimpan di S3, Anda dapat query data dengan Athena.
  9. Anda juga dapat menggunakan Amazon QuickSight untuk visualisasi data, atau Amazon SageMaker atau Amazon EMR untuk memproses data lebih lanjut. Untuk informasi lebih lanjut anda dapat membaca artikel Build a social media dashboard using machine learning and BI services. Sedangkan tulisan ini hanya akan menggunakan Athena.

Prasyarat

Prasyarat dalam ulasan ini adalah:

  • Memiliki akun AWS.
  • Memiliki app di Twitter. Untuk membuat app, maka anda dapat melihat Apps section di website Twitter untuk pengembang.
    • Buat consumer key (API key), consumer secret key (API secret), access token, dan access token secret. Solusi ini menggunakan data-data tersebut sebagai parameter dalam AWS CloudFormation stack.

Ulasan

Tulisan ini akan menjelaskan kepada anda langkah-langkah sebagai berikut:

  • Meluncurkan template AWS CloudFormation yang disediakan dan mengumpulkan tweet.
  • Memeriksa bahwa stack membuat dataset pada S3
  • Membuat view atas dataset menggunakan Athena.
  • Eksplorasi data

S3 menyimpan data mentah tweet dan keluaran dari Amazon Comprehend dan Amazon Rekognition akan dalam format JSON. Anda dapat menggunakan tabel dan definisi view di Athena untuk meratakan hasil JSON yang kompleks dan mengekstraksi field yang Anda inginkan. Pendekatan ini membuat data lebih mudah untuk diakses dan dipahami.

Meluncurkan templat AWS CloudFormation

Tulisan ini menyediakan template AWS CloudFormation yang membuat komponen ingestion seperti yang ada dalam diagram sebelumnya, kecuali untuk notifikasi S3 untuk Lambda (garis biru putus-putus dalam diagram).

  1. Di AWS Management Console, luncurkan AWS CloudFormation Template berikut.

    Ini akan meluncurkan stack AWS CloudFormation secara otomatis ke dalam region us-east-1.
  2. Di tulisan blog Build a social media dashboard using machine learning and BI services, di bagian “Build this architecture yourself”, ikuti langkah-langkahnya dengan perubahan sebagai berikut:
    1. Gunakan pranala Launch Stack dari tulisan ini.
    2. Jika basisdata AWS Glue socialanalyticsblog sudah ada (misalnya, jika Anda menyelesaikan ulasan dari posting sebelumnya), ubahlah nama basisdata saat meluncurkan stack AWS CloudFormation, dan menggunakan nama basisdata baru untuk solusi ini selanjutnya.
    3. Untuk bahasa Twitter, gunakan ‘en‘ (Bahasa Inggris) saja. Tulisan ini tidak menggunakan kemampuan Amazon Comprehend Translate untuk kesederhanaan dan untuk mengurangi biaya.
    4. Lewati bagian “Setting up S3 Notification – Call Amazon Translate/Comprehend from new Tweets.” Hal ini terjadi secara otomatis ketika meluncurkan stack AWS CloudFormation oleh fungsi lambda “Add Trigger”. Berhenti di bagian “Create the Athena Tables” dan selesaikan petunjuk berikut di tulisan ini sebagai gantinya.

Anda dapat memodifikasi istilah mana yang akan diambil dari Twitter streaming API untuk menjadi yang relevan bagi perusahaan Anda dan pelanggan Anda. Tulisan ini menggunakan beberapa istilah terkait Amazon.

Implementasi ini membuat dua panggilan Amazon Comprehend dan hingga lima panggilan Amazon Rekognition untuk setiap tweet. Biaya menjalankan implementasi ini berbanding lurus dengan jumlah tweet yang Anda kumpulkan. Jika Anda ingin mengubah persyaratan menjadi sesuatu yang dapat mengambil puluhan atau ratusan tweet per detik, untuk efisiensi dan manajemen biaya, pertimbangkan untuk melakukan panggilan batch atau menggunakan AWS Glue dengan pemicu untuk melakukan pemrosesan batch dibandingkan dengan pemrosesan stream.

Memeriksa Berkas S3

Setelah stack berjalan selama sekitar lima menit, dataset mulai muncul di S3 bucket (rTweetsBucket) yang dibuat oleh AWS Cloudformation. Setiap dataset direpresentasikan sebagai file-file berikut pada direktori terpisah di S3:

  • Raw – Data mentah tweets yang diterima dari Twitter.
  • Media – Keluaran dari hasil pemanggilan Amazon Rekognition API.
  • Entities – Hasil dari analisa entitas oleh Amazon Comprehend.
  • Sentiment – Hasil dari analisa sentimen oleh Amazon Comprehend.

Lihat tangkapan dari direktori berikut:

Untuk entity dan analisa sentimen, anda dapat melihat Build a social media dashboard using machine learning and BI services.

Bila Anda memiliki cukup data untuk dijelajahi (tergantung pada seberapa populer istilah yang dipilih dan seberapa sering mereka memiliki gambar), Anda dapat menghentikan produser aliran Twitter, dan menghentikan atau mematikan instans Amazon EC2, Ini menghentikan biaya Anda dari Amazon Comprehend, Amazon Rekognition, dan EC2.

Membuat View di Athena

Langkah selanjutnya adalah membuat basisdata Athena secara manual. Untuk informasi lebih lanjut di Getting Started pada panduan pengguna Athena.

Ini adalah waktu yang cocok untuk menggunakan fitur crawling dari AWS Glue pada arsitektur data lake anda. Crawler secara otomatis menemukan format data dan jenis data dari dataset Anda yang berbeda yang ada di S3 (serta database relasional dan data warehouse). Untuk informasi selengkapnya, lihat Defining Crawlers.

  1. Di console Athena, di bagian Query Editor, akses file sql ini. Stack AWS CloudFormation tersebut akan membuat basisdata dan tabel untuk Anda secara otomatis.
  2. Jalankan perintah view create ke dalam Athena Query Editor satu-persatu, kemudian eksekusi. Langkah ini membuat view dari tabel.

Dibandingkan dengan posting sebelumnya, tabel dan view media_rekognition disini adalah baru. Tabel tweet memiliki kolom baru extended_entities untuk metadata gambar dan video. Definisi dari tabel lainnya sama dengan tulisan sebelumnya.

Database Athena Anda akan terlihat mirip dengan screenshot berikut. Ada empat tabel, satu untuk masing-masing dataset pada S3. Ada juga tiga view, menggabungkan dan memperlihatkan rincian dari tabel media_rekognition:

  • Celeb_view yang fokus pada hasil dari API recognize_celebrities
  • Media_image_labels_query yang fokus pada hasil dari API detect_labels
  • Media_image_labels_face_query yang fokus pada hasil API detect_faces

Anda dapat mengeksplorasi tabel dan definisi view. Objek JSON itu kompleks, dan definisi ini menunjukkan berbagai kegunaan untuk query objek bersarang (nested object) dan larik (array) dengan jenis kompleks. Sekarang banyak dari query dapat relatif sederhana, hal ini karena berkat tabel dan definisi view yang mendasari merangkum kompleksitas JSON. Untuk informasi selengkapnya, lihat Querying Arrays with Complex Types and Nested Structures.

Eksplorasi hasil

Bagian ini menjelaskan tiga kasus penggunaan untuk data ini dan menyediakan SQL untuk mengekstrak data yang serupa. Karena istilah pencarian dan jangka waktu Anda berbeda dari yang ada di tulisan ini, hasil Anda akan berbeda. Tulisan ini menggunakan seperangkat istilah terkait Amazon. Kolektor tweet berjalan selama sekitar enam minggu dan mengumpulkan sekitar 9,5 juta tweet. Dari tweet, ada sekitar 0,5 juta foto, yaitu sekitar 5% dari tweet. Jumlah ini rendah dibandingkan dengan beberapa set lain dari istilah pencarian terkait bisnis, di mana sekitar 30% tweet berisi foto.

Tulisan ini mengulas untuk empat kasus penggunaan gambar:

  1. Buzz
  2. Label dan wajah
  3. Isi yang mencurigakan
  4. Menemukan selebriti

Buzz

Bidang topik utama yang diwakili oleh pranala (link) yang terkait dengan tweet sering memberikan pelengkap yang baik untuk topik konten bahasa tweet muncul melalui pemrosesan bahasa alami (natural language processing). Untuk informasi lebih lanjut Anda dapat membaca Build a social media dashboard using machine learning and BI services.

Kueri pertama adalah situs mana yang ditautkan dengan tweet. Kode berikut menunjukkan nama domain teratas yang ditautkan dari tweet:

SELECT lower(url_extract_host(url.expanded_url)) AS domain,count(*) AS countFROM(SELECT *FROM "tweets"CROSS JOIN UNNEST (entities.urls) t (url))GROUP BY  1ORDER BY  2 DESCLIMIT 10;

Tangkapan layar berikut menunjukkan 10 domain teratas:

Tautan ke situs web Amazon sering terjadi, dan beberapa properti berbeda diberi nama, seperti amazon.com, amazon.co.uk, dan goodreads.com.

Eksplorasi lebih lanjut menunjukkan bahwa banyak dari link ini ke halaman produk di situs Amazon. Sangat mudah untuk mengenali link ini karena mereka memiliki /dp/ (untuk halaman detail) di link. Anda bisa mendapatkan daftar link tersebut, gambar yang ada di dalamnya, dan baris pertama teks dalam gambar (jika ada), dengan kueri berikut:


SELECT tweetid,
         user_name,
         media_url,
         element_at(textdetections,1).detectedtext AS first_line,
         expanded_url,
         tweet_urls."text"
FROM 
    (SELECT id,
         user.name AS user_name,
         text,
         entities,
         url.expanded_url as expanded_url
    FROM tweets
    CROSS JOIN UNNEST (entities.urls) t (url)) tweet_urls
JOIN 
    (SELECT media_url,
         tweetid,
         image_labels.textdetections AS textdetections
    FROM media_rekognition) rk
    ON rk.tweetid = tweet_urls.id
WHERE lower(url_extract_host(expanded_url)) IN ('www.amazon.com', 'amazon.com', 'www.amazon.com.uk', 'amzn.to')
        AND NOT position('/dp/' IN url_extract_path(expanded_url)) = 0 -- url links to a product
LIMIT 50;

Tangkapan layar berikut menunjukkan beberapa baris dikembalikan oleh kueri ini. Kolom first_line menunjukan hasil dari API detect_text dari gambar yg URLnya ada di kolom media_url.

Banyak gambar yang berisi teks. Anda juga dapat mengidentifikasi produk yang ditautkan dengan tweet; banyak tweet adalah iklan produk oleh penjual, menggunakan gambar yang berhubungan langsung dengan produk mereka.

Label and wajah

Anda juga bisa mendapatkan konten visual dari gambar dengan melihat hasil dari panggilan API detect_labels pada Amazon Rekognition. Kueri berikut ini akan mendapatkan objek yang paling umum dari foto:

SELECT label_name,COUNT(*) AS countFROM media_image_labels_queryGROUP BY  label_nameORDER BY COUNT(*) descLIMIT 50;

Tangkapan layar berikut menunjukkan hasil dari permintaan tersebut. Label yang paling populer sejauh ini adalah Human atau Person, dengan Text, Advertisement, dan Poster. Novel ada juga di bagian bawah daftar. Hasil ini mencerminkan produk yang paling populer yang di-tweet tentang di situs buku web Amazon.

Anda dapat mengeksplorasi wajah lebih jauh dengan melihat hasil dari API detect_faces. API tersebut mengembalikan detail untuk setiap wajah dalam gambar, termasuk jenis kelamin, rentang usia, posisi wajah, apakah orang tersebut mengenakan kacamata hitam atau memiliki kumis, dan ekspresi di wajah mereka. Masing-masing fitur ini juga memiliki tingkat kepercayaan yang terkait dengannya. Untuk informasi selengkapnya, lihat DetectFaces di panduan pengembang Amazon Rekognition.

View media_image_labels_face_query membuka banyak fitur dari objek JSON yang kompleks yang dihasilkan dari panggilan API, membuat pemrosesan jadi lebih mudah.

Anda dapat mengeklorasi definisi View untuk media_image_labels_face_query , termasuk penggunaan reduce operator dari array (emotion,confidence) yang dikembalikan oleh Amazon Rekognition untuk mengidentifikasi dan mengembalikan kategori ekspresi dengan skor kepercayaan tertinggi yang terkait dengannya, dan mengaitkan nama top_emotion.

Lihatlah kode berikut ini:

reduce(facedetails.emotions, element_at(facedetails.emotions, 1), (s_emotion, emotion) -> IF((emotion.confidence > s_emotion.confidence), emotion, s_emotion), (s) -> s) top_emotion

Anda dapat menggunakan field top_emotion. Lihat kode berikut ini:

SELECT top_emotion.type AS emotion ,
         top_emotion.confidence AS emotion_confidence ,
         milfq.* ,"user".id AS user_id ,"user".screen_name ,"user".name AS user_name ,
        url.expanded_url AS urlFROM media_image_labels_face_query milfqINNER JOIN tweets
    ON tweets.id = tweetid, UNNEST(entities.urls) t (url)WHERE position('.amazon.' IN url.expanded_url) > 0;

Tangkapan layar berikut menunjukkan kolom dari tengah kueri yang luas ini, termasuk kacamata, rentang usia, dan di mana tepi wajah ini diposisikan. Detail terakhir ini berguna ketika beberapa wajah hadir dalam satu gambar, untuk membedakan antara wajah.

Anda dapat melihat ekspresi tertinggi yang ditemukan dari wajah-wajah ini dengan menggunakan code berikut:

SELECT top_emotion.type AS emotion,COUNT(*) AS "count"FROM media_image_labels_face_query milfqWHERE top_emotion.confidence > 50GROUP BY top_emotion.typeORDER BY 2 desc; 

Tangkapan dari hasil kueri berikut ini menunjukan bahwa CALM adalah ekspresi yang tertinggi, kemudian diikuti oleh HAPPY. Anehnya, ada yang jauh lebih sedikit ekspreksi bingung daripada ekspresi jijik.

Konten yang Mencurigakan

Topik yang sering menjadi perhatian adalah apakah ada konten dalam tweet, atau gambar terkait, yang harus dimoderasi. Salah satu API Amazon Rekognition dipanggil oleh Lambda untuk setiap gambar adalah moderation_labels, yang mengembalikan label yang menunjukkan kategori konten yang ditemukan, jika ada. Untuk informasi selengkapnya, lihat Detecting Unsafe Content.

Kode berikut akan menemukan tweet dengan gambar yang mencurigakan. Twitter juga menyediakan flag possibly_sensitive berdasarkan teks pada tweet.

SELECT tweetid,
    possibly_sensitive, 
transform(image_labels.moderationlabels, ml -> ml.name) AS moderationlabels,"mediaid", "media_url" , 
tweets.text,"url"."expanded_url" AS url ,(CASE WHEN ("substr"("tweets"."text", 1, 2) = 'RT') THENtrueELSE false END) "isretweet"FROM media_rekognitionINNER JOIN tweets
    ON ("tweets"."id" = "tweetid"), UNNEST("entities"."urls") t (url)WHERE cardinality(image_labels.moderationlabels) > 0OR possibly_sensitive = True;

Tangkapan layar berikut menunjukkan beberapa hasil pertama. Untuk sebagian besar entri ini, teks tweet atau gambar mungkin berisi konten sensitif, tetapi belum tentu keduanya. Memasukan kedua kriteria tersebut memberikan keamanan tambahan.

Perlu dicatat bahwa penggunaan konstruksi transform dalam kueri sebelumnya untuk memetakan atas array JSON label moderasi yang dikembalikan oleh Amazon Rekognition. Konstruksi ini memungkinkan Anda mengubah konten asli dari object moderationlabels (di array berikut ini) ke dalam daftar yang hanya berisi field nama:

[{confidence=52.257442474365234, name=Revealing Clothes, parentname=Suggestive}, {confidence=52.257442474365234, name=Suggestive, parentname=}]  

Anda dapat memfilter kueri ini untuk fokus pada jenis konten yang tidak aman tertentu dengan memfilter label moderasi tertentu. Untuk informasi selengkapnya, lihat Detecting Unsafe Content.

Banyak tweet ini memiliki pranala produk yang ditanamkan dalam URL. URL untuk situs Amazon.com memiliki pola: setiap URL dengan /dp/ di dalamnya adalah link ke halaman produk. Anda dapat menggunakannya untuk mengidentifikasi produk yang mungkin memiliki konten eksplisit yang terkait dengannya.

Eksplorasi selebriti

Salah satu API Amazon Rekognition yang Lambda panggil pada setiap gambar adalah recognize_celebrity. Untuk informasi lebih lanjut anda dapat melihat Recognizing Celebrities in an Image.

Kode berikut akan membantu untuk menentukan selebriti mana yang sering muncul dari dataset:

SELECT name as celebrity,COUNT (*) as countFROM celeb_viewGROUP BY  nameORDER BY  COUNT (*) desc;

Hasilnya menghitung contoh identifikasi selebriti, dan menghitung gambar dengan beberapa selebriti beberapa kali.

Sebagai contoh, misalnya ada selebriti dengan name JohnDoe. Untuk mengeksplorasi gambar lebih jauh maka kita dapat menggunakan kueri berikut ini. Kueri ini akan menemukan gambar yang terkait dengan tweet dimana ada JohnDoe yang muncul di teks atau di gambar.

SELECT cv.media_url,
         COUNT () AS count ,
         detectedtext
FROM celeb_view cv
LEFT JOIN      -- left join to catch cases with no text 
    (SELECT tweetid,
         mediaid,
         textdetection.detectedtext AS detectedtext
    FROM media_rekognition , UNNEST(image_labels.textdetections) t (textdetection)
    WHERE (textdetection.type = 'LINE'
            AND textdetection.id = 0) -- get the first line of text
    ) mr
    ON ( cv.mediaid = mr.mediaid
        AND cv.tweetid = mr.tweetid )
WHERE ( ( NOT position('johndoe' IN lower(tweettext)) = 0 ) -- JohnDoe IN text
        OR ( (NOT position('johndoe' IN lower(name)) = 0) -- JohnDoe IN image
AND matchconfidence > 75) )  -- with pretty good confidence
GROUP BY  cv.media_url, detectedtext
ORDER BY  COUNT() DESC;

API recognize_celebrity mencocokkan setiap gambar dengan selebriti yang muncul paling dekat. Ia mengembalikan nama selebriti dan informasi terkait, bersamaan dengan skor kepercayaan. Terkadang, hasilnya bisa kurang memuaskan; misalnya, jika wajah dipalingkan, atau saat orang tersebut mengenakan kacamata hitam, mereka bisa sulit dikenali dengan benar. Dalam kasus lain, API dapat memilih model gambar karena kesamaan mereka dengan selebriti. Ini mungkin bermanfaat untuk menggabungkan kueri ini dengan logika menggunakan respon dari face_details, untuk memeriksa kacamata ataupun posisi wajah.

Pembersihan

Untuk menghindari menimbulkan biaya di masa mendatang, hapuslah stack AWS CloudFormation, dan isi S3 bucket yang dibuat. Anda cukup masuk ke dalam konsol AWS CloudFormation, pilih stack yang dibuat, dan hapus.

Kesimpulan

Tulisan ini menunjukkan bagaimana untuk mulai mengeksplorasi apa yang pelanggan Anda katakan tentang Anda di media sosial menggunakan gambar. Kueri dalam posting ini hanyalah awal dari apa yang mungkin dilakukan. Untuk lebih memahami totalitas percakapan pelanggan Anda, Anda dapat menggabungkan kemampuan dari posting ini dengan hasil menjalankan pemrosesan bahasa alami (natural language processing) terhadap tweet.

Seluruh proses, analitik, dan pipeline pembelajaran mesin (machine learning) ini—dimulai dengan Kinesis Data Firehose, menggunakan Amazon Comprehend untuk melakukan analisis sentimen, Amazon Rekognition untuk menganalisis foto, dan Athena untuk kueri data, dan dimungkinkan tanpa menggunakan server apa pun.

Tulisan ini menambahkan layanan pembelajaran mesin lanjutan (advanced machine learning) (ML) ke pipeline pengumpulan Twitter, melalui beberapa panggilan sederhana dalam Lambda. Solusinya juga menyimpan semua data ke S3 dan menunjukkan bagaimana untuk query objek JSON yang kompleks menggunakan beberapa pernyataan SQL. Anda dapat melakukan analisis lebih lanjut pada data menggunakan Amazon EMR, Amazon SageMaker, Amazon Elasticsearch Service, atau layanan AWS lainnya. Batasannya hanyalah imajinasi anda.


Tulisan ini berasal dari artikel Exploring images on social media using Amazon Rekognition and Amazon Athena yang ditulis oleh Veronika Megler dan Chris Ghyzel dan diterjemahkan oleh Rudi Suryadi.

Petra Barus

Petra Barus

Petra Novandi Barus is Developer Advocate at Amazon Web Services based in Jakarta. He is passionate in helping startups and developers in Indonesia to reinvent on behalf their customers. Prior to AWS, Petra co-founded UrbanIndo.com as CTO. The startup became the largest real-estate portal in Indonesia and then was acquired by 99.co. During that time Petra had been a happy AWS customer for 8 years. Petra is also very active in local tech communities