SMA on Instagram: Image Hashing - Mendeteksi Gambar Serupa


Social Media Analytics tidak selalu terkait data dalam bentuk teks. Idealnya teks dan gambar (bahkan video) secara simultan/bersamaan di olah untuk mendapatkan hasil analisa yang lebih baik. Ketika mengolah data dari media sosial Instagram, pengolahan data images semakin diperlukan, ketimbang (a more) text-based media sosial seperti twitter. Image processing is a big topic, untuk post kali ini minimal  kita akan membahas bagaimana mendeteksi gambar yang sama, serupa dan berbeda secara signifikan dengan mudah menggunakan fungsi hash. Hal ini sangat penting ketika menganalisa data dari media sosial seperti Instagram, Pinterest, atau Flickr.
Fungsi hash adalah sebuah pemetaan dari sebuah himpunan asal/domain (berupa teks/gambar/atau sembarang object) yang memiliki panjang/ukuran yang beragam ke suatu nilai/vektor/string yang (biasanya) memiliki panjang tetap. Hasil pemetaan-nya sering disebut sebagai nilai hash (terkadang disebut juga hash codesdigests, atau hashes).
Fungsi hash digunakan di banyak aplikasi, baik cryptography, database, sampai di data science dalam pengolahan data besar (Saya beberapa kali post tentang hal ini di Group Data Science di Facebook). Fungsi Hash juga bermacam-macam, salah satu yang paling tenar mungkin Secure Hash Algorithm 1 (SHA-1) dalam cryptographic hashing. Contoh fungsi hash lain yang akan dibahas (secara sekilas) di post ini adalah fungsi average hashing atau aHash yang akan digunakan untuk membandingkan 2 atau lebih gambar di post ini.   Konsepnya sederhana, aHash dilakukan dengan cara:
Resize Image => Reduce Colour => Hitung Average Intensity Value => Set bits comapping value
2 images kemudian dapat dihitung jaraknya dengan (misal) jarak Hamming untuk menentukan apakah 2 buah image serupa, sama, atau secara signifikan berbeda. Contoh lain hashing : Perception hashing (pHash), difference hashing (dHash), dan wavelet hashing (wHash).  Contoh Aplikasi: pertama-tama mari kita install modul yang dibutuhkan (dari terminal/command prompt):
pip install imagehash
Master modul ini dapat diakses di website ini: https://github.com/JohannesBuchner/imagehash
 license-nya BSD-2 yang mengizinkan penggunaan untuk komersil (sehingga ok juga untuk penelitian).
Kita akan menggunakan 4 images berikut untuk percobaan kita:
  1. Gambar awal (assumed to be original):
     
  2. Gambar dengan sedikit modifikasi:
     
  3. Gambar dengan modifikasi signifikan:
     
  4. Gambar yang secara signifikan berbeda:
     
Untuk mengolah ke-4 gambar diatas kita akan menggunakan perintah dasar berikut:
from PIL import Image 
import imagehash 
path = 'C:/Temp/' 
images = ['poster.jpg','poster_Small_mod.jpg', 'poster_Med_mod.jpg','kittens.jpg'] 
images = [path+f for f in images] 
hash1 = imagehash.average_hash(Image.open(images[0])) 
print('hash1 value = ',hash1) 
hash2 = imagehash.average_hash(Image.open(images[1])) 
print('hash2 value = ',hash2) 
print('Logical equality = ', hash1 == hash2) 
print('Difference Between Small Modified Images= ', abs(hash1 - hash2)) 
hash3 = imagehash.average_hash(Image.open(images[2])) 
print('Difference Between Medium-Large Modified Images= ', abs(hash1 - hash3)) 
hash4 = imagehash.average_hash(Image.open(images[3])) 
print('Difference Between Unrelated Images= ', abs(hash1 - hash4))
Outputnya adalah sebagai berikut:
hash1 value = 80d39fbdbdbdfd00 hash2 value = 80d39fbdbdbdfd80 Logical equality = False Difference Between Small Modified Images= 1 Difference Between Medium-Large Modified Images= 19 Difference Between Unrelated Images= 25
Terlihat ternyata, kita bisa dengan mudah mendeteksi duplikat, small-medium modification, hingga membandingkan 2 image yang berbeda. Tentu saja pembahasan tentang image hashing jauh lebih kompleks dan rumit, namun semoga post ini bisa menjadi pengantar singkat tentang image hashing dan aplikasinya di SMA. Silahkan share jika sekiranya bermanfaat, like kalau emang suka, dan kalem ajah kalau ndak ... :) 
Cheers,
</TES>®

Tidak ada komentar:

Posting Komentar

Relevant & Respectful Comments Only.