Membuat Color Pallete dengan Machine Learning (Python)
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.
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 :)
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, KMeansimport 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