Membuat Color Pallete dengan Machine Learning (Python)

Rintaldi Ghazian Hindami
5 min readJan 5, 2020

--

Hai manteman!
Pada coretan kali ini, babang penulis akan membuat sebuha color pallete dengan Machine Learning.

Nah sebelumnya color Palette tuh apasih?
Color palette tu adalah papan warna yang biasa digunakan untuk memilih warna, biasanya digunakan oleh desainer grafis untuk memilih warna saat desain. jadi kira kira seperti ini pak.

Gambar palette warna dari mbah gugel

Nah, babang penulis ini juga bisa dikit dikit desain grafis jadi familiar lah sama yang namanya color palette ini, nah biasanya masalah yang sering dihadapi itu, kita bingung nih nentuin warna yang cocok gitu apalagi kalo mau ngubah gambar jadi kayak lukisan lukisan gitu, tapi di aplikasi Desain grafis semacam corel Draw, dan Photosop cuma tersedia color palette yang default gitu, ga senada sama gambar yang bakal di desain grafiskan.

Hm hm, kebanyakan ngobrol desain grafis nih, balik ke judul ya, jadi babang penulis pengen extract Color Palette gitu dari gambar dengan Python yang tentunya ini gunain machine learnig, kita bakal nyinggung dikit Unsupervised Machine Learning, seperti di tulisan penulis sebelumnya nih tentang ngenal dikit yang namanya Machine Learning, ga tau ? Boleh mampir dulu kakaa https://medium.com/@iamraldygh/mengenal-sedikit-machine-learning-a28178977d93 hehe.

Konsepnya sih nanti kita kasih gambar, let the machine do the works. Simplenya seperti itu. oke gausah lama lama lagi, enjoy the show

Langkah-Langkah Awal

Oke yang pertama, biasa buat dulu Folder untuk menyimpan File Pythonnya. Babang penulis naroh nya di directory C terus bikin folder dengan nama colorp. Alamatnya seperti ini C:\colorp.

Oke Foldernya sudah punya ya, langkah selanjutnya siapin bahan bahannya

Bukan bahan bahan masakan ya , hehe. Penulis menggunakan 3 Module Python utama

  • numpy -> library ini untuk prosesing data
  • matplotlin -> library ini untuk plotting data
  • sklearn -> library ini untuk clustering data

oke lanjut, selanjutnya kita akan memilih gambar yang akan kita proses utnuk mengekstrak palettenya, kita akan menggunakan gambar dari unsplash saja, karna gratis :)

https://images.unsplash.com/photo-1575761344173-aa186491c120?ixlib=rb-1.2.1&auto=format&fit=crop&w=750&q=80

Nah gambar diatas cukup bagus, penulis mendapatkannya di website unsplash, dengan menggunakan module requests kita tidak perlu mendownloadnya, cukup crawling datanya saja dengan mengcopy url gambar diatas. Lalu silahkan ketik syntaks seperti dibawah ini.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN, KMeans
import requests
from PIL import Image
from io import BytesIO
# Image read
r = requests.get("https://images.unsplash.com/photo-1575761344173-aa186491c120?ixlib=rb-1.2.1&auto=format&fit=crop&w=750&q=80")
img = Image.open(BytesIO(r.content))
# Create Figure Object
fig, ax = plt.subplots(1,1)
ax.imshow(img)
# No ticks
ax.set_xticks([])
ax.set_yticks([])
plt.tight_layout()
plt.show()
data = np.asarray(img, dtype="int32")
print(data.shape)

Sudah ? simpan dan berinama, disini penulis akan memberi nama impor.py dan simpan kedalam folder yang sudah kita buat tadi.

oke sudah ? lalu jalankan file python impor dalam command prompt mentemen

jika tidak ada masalah maka akan keluar output seperti berikut

Di close saja maka akan muncul output juga di cmd seperti ini

output tersebut menyatakan bahwa gambar sudah diubah dalam kategory array. oke Next,

Membuat Scatterplot

Selanjutnya ialah membuat scatter plot nih, tujuannya untuk melihat warna-warna apasih yang dominan agar bisa jadi acuan nih mau berapa palette yang kita buat , silahakan Syntaksnya kaka.

from mpl_toolkits.mplot3d import Axes3D# x, y, z axis and Color
x = data[:,:,0]
y = data[:,:,1]
z = data[:,:,2]
C = list(map(tuple, data.reshape(data.shape[0]*data.shape[1], 3)/255.0))
fig = plt.figure(figsize=(20,10))# plot 1 : simple scatter plot
ax1 = fig.add_subplot(121,projection=’3d’)
ax1.scatter(x,y,z)
ax1.set_title(‘Scatter Plot’)
# plot 2 : colored scatter plot
ax2 = fig.add_subplot(122,projection=’3d’)
ax2.scatter(x,y,z,c=C)
ax2.set_title(‘Colored Scatter Plot’)
plt.show()

oke? simpan kembali pada file impor.py. lalu di-run saja pada Cmd

oke, dari scatterplot yang didapatkan bisa dilihat didapatkan warna gradasi, karena color pallete yang kita inginkna tidak gradasi kita akan memecahnya menjadi 6 cluster biar sedap.

Clustering Warna

Color Palette yang kita inginkan akan memunculkan warna yang berbeda satu sama lain maka dari itu warna warna gradasi yang diadaptkan dari scatterplot harus kita clusterkan. Silahakan syntaks untuk mengclusterkannya dibawah ini. Penulis akan mebaginya dalam 6 cluster

points = data.reshape(data.shape[0]*data.shape[1], 3)/255.0kmeans = KMeans(n_clusters=6).fit(points)
kmeans.labels_
fig = plt.figure(figsize=(10,15))
for i in range(6):
ax = fig.add_subplot(3,2,i+1,projection='3d')
ax.set_xticks([])
ax.set_yticks([])
ax.set_zticks([])
C = list(map(tuple,points * (kmeans.labels_==i).reshape(-1,1)))
ax.scatter(x,y,z,c=C)
plt.show()

tambahkan kodingan diatas ke file impor.py tadi, lalu silahkan dijalankan.

nah sudah dapat diliat hasil dari clustering warna yang dilakukan oleh machine. jika ingin lebih banyak clusteringnya tinggal otak atik saja codingan diatas.

Akhirnya, Pembuatan Palette.

Setelah pengclusteran, langkah terakhir ialah pembuatan Palette warna, silahkan menyimak kodingan dibawah ini

fig, ax = plt.subplots(1,2, figsize=(12,12))
ax[0].imshow(img)
# No ticks
ax[0].set_xticks([])
ax[0].set_yticks([])
# color palette with plt.Circle
for i in range(6):
circle = plt.Circle((0.05, (i+1.4)/8), 0.04, color=(points * (kmeans.labels_==i).reshape(-1,1)).sum(axis=0) / sum((kmeans.labels_==i)))
ax[1].add_artist(circle)
# make xy scale equal & axis off
plt.gca().set_aspect('equal', adjustable='box')
plt.axis('off')
plt.tight_layout()
plt.show()

Kembali simpan kodingan tersebut pada file impor.py yang sudah dibuat, lalu dijalankan

Nah, vvoilaa. color palettenya sudah berhasil dibuat. dari gambar sudah dapat diekstrasi warna warna yang menurut ML adalh warna yang dominan.

Hm hm, sekian dulu Contoh pembuatan Color Palette menggunakan Python, bisa dirasakan bahwa Unsupervised Learning menentukan warna dengan sendirinya, jika kodingan diatas bisa dikembangkan sesuai dengan keinginan manteman, dengan sedikit mengutak atik kodingannya seperti jika ingin menambahkan warna pada palettenya jika kurang puas dengan 6 pallette saja. well untill next time.
Ciao manteman!

Sumber :

https://www.kaggle.com/subinium/easy-way-to-make-color-palette-with-ml/notebook

--

--

Rintaldi Ghazian Hindami
Rintaldi Ghazian Hindami

Written by Rintaldi Ghazian Hindami

Some Folk Trying to be expertise in Data Analytics

No responses yet