HarnithaS commited on
Commit
b1a176d
·
1 Parent(s): 32d0b45

thumbnail analysis code

Browse files
Files changed (4) hide show
  1. Upload_image.png +0 -0
  2. app.py +61 -0
  3. requirements.txt +6 -0
  4. saliency_map.py +27 -0
Upload_image.png ADDED
app.py ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import cv2
3
+ from saliency_map import avg_saliency
4
+ import numpy as np
5
+ from PIL import Image
6
+ import io
7
+
8
+ st.set_page_config(
9
+ page_title="Thumbnail Analyser",
10
+ page_icon="thumbnail_logo.png",
11
+ layout="wide", # wide layout reduces left and right margins
12
+ initial_sidebar_state="expanded"
13
+ )
14
+
15
+ def saliency_analysis(image,saliency_image,col2):
16
+ with saliency_image:
17
+ with st.spinner('Loading...'):
18
+ img, saliency_output = avg_saliency(image)
19
+ if saliency_output is not None:
20
+ pil_image = Image.fromarray(saliency_output)
21
+ if pil_image.mode != 'RGB':
22
+ pil_image = pil_image.convert('L')
23
+ saliency_image.image(pil_image, caption='Attention Spots', use_column_width=True)
24
+ return pil_image
25
+
26
+
27
+ def main():
28
+ st.markdown('<h1 style="text-align: center;">Thumbnail Analyser</h1>', unsafe_allow_html=True)
29
+
30
+
31
+ # Create two image containers
32
+ col1, col2 = st.columns(2)
33
+
34
+ # Placeholder images
35
+ image_placeholder = 'Upload_image.png'
36
+ original_image = col1.image(image_placeholder, use_column_width=True)
37
+ saliency_image = col2.image(image_placeholder, use_column_width=True)
38
+
39
+ # Upload images and replace placeholders
40
+ original_image_upload = col1.file_uploader("Upload Image", type=["jpg", "jpeg", "png"])
41
+
42
+
43
+ if original_image_upload is not None:
44
+ original_image.image(original_image_upload, use_column_width=True)
45
+ file_bytes = np.asarray(bytearray(original_image_upload.read()), dtype=np.uint8)
46
+ cv2_image = cv2.imdecode(file_bytes, cv2.IMREAD_COLOR)
47
+ pil_image = saliency_analysis(cv2_image,saliency_image,col2)
48
+ buffered = io.BytesIO()
49
+ pil_image.save(buffered, format="PNG")
50
+ buffered.seek(0)
51
+
52
+ col2.download_button(
53
+ label="Download Image",
54
+ data=buffered,
55
+ file_name="AttentionSpots.png",
56
+ mime="image/png",
57
+ key="download_button"
58
+ )
59
+
60
+ if __name__ == "__main__":
61
+ main()
requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ streamlit
2
+ opencv-contrib-python
3
+ saliency_map
4
+ numpy
5
+ PIL
6
+ io
saliency_map.py ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import cv2
2
+ import matplotlib.pyplot as plt
3
+ import numpy as np
4
+
5
+
6
+ def image_analysis(image, color):
7
+
8
+ lab_image = cv2.cvtColor(image, color)
9
+
10
+ saliency_map = cv2.saliency.StaticSaliencyFineGrained_create()
11
+ channels = list(cv2.split(lab_image))
12
+ (success, saliency_map)=saliency_map.computeSaliency(channels[0])
13
+ saliency_map = (saliency_map*255).astype("uint8")
14
+ return saliency_map
15
+
16
+ def avg_saliency(image):
17
+ final_saliency_matrix = np.zeros((image.shape[:2]))
18
+
19
+ color_codes = [0,2,4,6,32,36,40,44,50,52,66,68,74,76,82]
20
+
21
+ for code in color_codes:
22
+ final_saliency_matrix += image_analysis(image,code)
23
+
24
+ avg_ed_saliency_map = final_saliency_matrix//(len(color_codes))
25
+
26
+ return image, avg_ed_saliency_map
27
+