HansBug commited on
Commit
42c5e09
·
1 Parent(s): b741ff1

dev(narugo): save this

Browse files
Files changed (1) hide show
  1. app.py +35 -6
app.py CHANGED
@@ -2,6 +2,7 @@ import os
2
 
3
  import gradio as gr
4
  import numpy as np
 
5
  from PIL import Image
6
  from sklearn.cluster import KMeans
7
 
@@ -27,10 +28,12 @@ def get_main_colors(image: Image.Image, n: int = 28, pixels: int = 90000) -> Ima
27
 
28
  width, height = image.size
29
  raw = np.asarray(image).reshape(-1, 3)
30
- new_data = kmeans.cluster_centers_[kmeans.predict(raw)]
31
- new_data = new_data.round().astype(np.uint8).reshape((height, width, 3))
 
 
32
 
33
- return Image.fromarray(new_data, mode='RGB')
34
 
35
 
36
  def main_func(image: Image.Image, n: int, pixels: int, fixed_width: bool, width: int):
@@ -41,10 +44,29 @@ def main_func(image: Image.Image, n: int, pixels: int, fixed_width: bool, width:
41
  new_width, new_height = int(round(_width * r)), int(round(_height * r))
42
  new_image = new_image.resize((new_width, new_height), resample=Image.NEAREST)
43
 
44
- return new_image
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
 
46
 
47
  if __name__ == '__main__':
 
48
  with gr.Blocks() as demo:
49
  with gr.Row():
50
  with gr.Column():
@@ -59,12 +81,19 @@ if __name__ == '__main__':
59
  ch_submit = gr.Button(value='Submit', variant='primary')
60
 
61
  with gr.Column():
62
- ch_output = gr.Image(type='pil', label='Output Image')
 
 
 
 
 
 
 
63
 
64
  ch_submit.click(
65
  main_func,
66
  inputs=[ch_image, ch_clusters, ch_pixels, ch_fixed_width, ch_width],
67
- outputs=[ch_output],
68
  )
69
 
70
  demo.queue(os.cpu_count()).launch()
 
2
 
3
  import gradio as gr
4
  import numpy as np
5
+ import pandas as pd
6
  from PIL import Image
7
  from sklearn.cluster import KMeans
8
 
 
28
 
29
  width, height = image.size
30
  raw = np.asarray(image).reshape(-1, 3)
31
+ colors = kmeans.cluster_centers_.round().astype(np.uint8)
32
+ prediction = kmeans.predict(raw)
33
+ new_data = colors[prediction].reshape((height, width, 3))
34
+ new_image = Image.fromarray(new_data, mode='RGB')
35
 
36
+ return new_image
37
 
38
 
39
  def main_func(image: Image.Image, n: int, pixels: int, fixed_width: bool, width: int):
 
44
  new_width, new_height = int(round(_width * r)), int(round(_height * r))
45
  new_image = new_image.resize((new_width, new_height), resample=Image.NEAREST)
46
 
47
+ df = pd.DataFrame(data=np.asarray(new_image).reshape(-1, 3), columns=['r', 'g', 'b'])
48
+ df['id_'] = 1
49
+ table = df.groupby(['r', 'g', 'b'])['id_'].agg(['count']).reset_index().sort_values('count', ascending=False)
50
+ table['ratio'] = table['count'] / table['count'].sum()
51
+ hexes = []
52
+ for r, g, b in zip(table['r'], table['g'], table['b']):
53
+ hexes.append(f'#{r:02x}{g:02x}{b:02x}')
54
+ table['hex'] = hexes
55
+
56
+ new_table = pd.DataFrame({
57
+ 'Hex': table['hex'],
58
+ 'Pixels': table['count'],
59
+ 'Ratio': table['ratio'],
60
+ 'Red': table['r'],
61
+ 'Green': table['g'],
62
+ 'Blue': table['b'],
63
+ })
64
+
65
+ return new_image, new_table
66
 
67
 
68
  if __name__ == '__main__':
69
+ pd.set_option("display.precision", 3)
70
  with gr.Blocks() as demo:
71
  with gr.Row():
72
  with gr.Column():
 
81
  ch_submit = gr.Button(value='Submit', variant='primary')
82
 
83
  with gr.Column():
84
+ with gr.Tabs():
85
+ with gr.Tab('Output Image'):
86
+ ch_output = gr.Image(type='pil', label='Output Image')
87
+ with gr.Tab('Color Map'):
88
+ ch_color_map = gr.Dataframe(
89
+ headers=['Hex', 'Pixels', 'Ratio', 'Red', 'Green', 'Blue'],
90
+ label='Color Map'
91
+ )
92
 
93
  ch_submit.click(
94
  main_func,
95
  inputs=[ch_image, ch_clusters, ch_pixels, ch_fixed_width, ch_width],
96
+ outputs=[ch_output, ch_color_map],
97
  )
98
 
99
  demo.queue(os.cpu_count()).launch()