File size: 2,941 Bytes
7d1cd50
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import cv2
import os
import base64
import numpy as np
from PIL import ImageFont, ImageDraw, Image
import streamlit as st
from modules.Cartoon.main import cartoon
# from helper.utils import file_checker
# from helper.descriptor import file_info
# from helper.rcnn_utils import generate_rcnn_mask

img_extensions = ["jpg","png","jpeg"]

def get_binary_file_downloader_html(bin_file,file_label='File'):
    with open(bin_file,'rb') as f:
        data = f.read()
    bin_str = base64.b64encode(data).decode()
    href = f'<h3><a href="data:application/octet-stream;base64,{bin_str}" download="{os.path.basename(bin_file)}">Download {file_label}</a></h3>'
    return href

def image_transformations(result,filter,img_extension = "jpg"):
        result = result[:,:,:3]
        # filter_info(filter)
        if filter == "Basic Image Editing":
            gamma = st.slider("Gamma Correction",0.0,5.0,1.0,step = 0.1)
            saturation = st.slider("Saturation", 0.0, 2.0, 1.0, step=0.1)
            blurring = st.checkbox("Bluring", False)
            if blurring:
                col1,col2 = st.columns(2)
                blur_area = col1.slider("Blur Area",1,100,1,2)
                blur_intensity = col2.slider("Blur Intensity", 0, 500, 0, 1)
                result = cv2.GaussianBlur(result, (blur_area, 1), blur_intensity)

            apply_vignette = st.checkbox("Apply Vignette effect",False)
            if apply_vignette:
                vignette_effect = st.slider("Vignette Intensity",1,120,1)
                rows, cols = result.shape[:2]
                kernel_x = cv2.getGaussianKernel(cols, vignette_effect + 139)
                kernel_y = cv2.getGaussianKernel(rows, vignette_effect + 139)
                kernel = kernel_y*kernel_x.T
                filter = 255 * kernel / np.linalg.norm(kernel)
                vignette_img = np.copy(result)
                for i in range(3):
                    vignette_img[:,:,i] = vignette_img[:,:,i]*filter
                    result = vignette_img

            hsvImg = cv2.cvtColor(result, cv2.COLOR_BGR2HSV)
            hsvImg[..., 1] = np.clip(hsvImg[..., 1] * saturation, 0, 255)
            hsvImg[..., 2] = np.power((hsvImg[..., 2] / 255.0), 1 / (gamma + 0.1)) * 255.0
            result = cv2.cvtColor(hsvImg, cv2.COLOR_HSV2BGR)
        elif filter == "Cartoonie":
            line_size = st.slider("Number of edges",3,101,7,2)
            blurVal = st.slider("Blurr effect",3,101,7,2)
            totalCols = st.slider("Total Color in images",2,100,11,1)
            result = cartoon(result,[line_size,blurVal,totalCols])
        if np.all(result != None):
            st.image(result, use_column_width=True, clamp=True, channels="BGR")
            filename = img_extension[0] + "." + img_extension[-1]
            cv2.imwrite(filename, result)
            st.markdown(get_binary_file_downloader_html(filename,
            'From Here '),
            unsafe_allow_html=True)