DiweshUIT/Spectrometer
2
1import os2os.system('pip install -e pycopy-colorsys')3from gradio.components import Label4import colorsys5import cv2 as cv6import gradio as gr7import matplotlib8import math9import matplotlib.pyplot as plt10import numpy as np11 12 13def image_mod(image):14 #plt.figure(figsize=(10,10))15 #image1 = cv.imread(r"/content/photo1.jpg")16 grey = cv.cvtColor(image, cv.COLOR_BGR2GRAY)17 #plt.imshow(grey)18 shape=(grey.shape)19 #pixelc=( grey.shape[0] * grey.shape[1])20 21 return grey22def greet(image):23 grey = cv.cvtColor(image, cv.COLOR_BGR2GRAY)24 #plt.imshow(grey)25 shape=(grey.shape)26 pixelc=( grey.shape[0] * grey.shape[1])27 return shape, pixelc28 29 30def avg(image):31 l=[]32 33#You're free to do a resize or not, just for the example34 cap = cv.resize(image, (340,480))35 for x in range (0,340,1):36 for y in range(0,480,1):37 color = cap[y,x]38 l.append(color)39 #print(color)40 n=len(l)41 l2 = [item[0] for item in l]42#print(l2)43 sumred=044#l2 = [item[1] for item in l]45 #print(l2)46 for ele in range(0, len(l2)):47 sumred = sumred + l2[ele]48 answer=sumred/n49 sumgreen=050 l3 = [item[1] for item in l]51 #print(l3)52 for ele in range(0, len(l3)):53 sumgreen = sumgreen + l3[ele]54 answer1=sumgreen/n55 sumblue=056 l4 = [item[2] for item in l]57#print(l4)58 for ele in range(0, len(l4)):59 sumblue = sumblue + l4[ele]60 answer2=sumblue/n61#print(answer2)62 newp=(answer1+answer2+answer)/363 red=answer #red ko blue see change64 green=answer265 blue=answer166 #rgb_to_name((0, 0, 0))67 fig=plt.figure()68 plt.imshow([[(math.ceil(red), math.ceil(blue), math.ceil(green))]])69 #plt.show()70 return plt71def wave(image):72 l=[]73 74#You're free to do a resize or not, just for the example75 cap = cv.resize(image, (340,480))76 for x in range (0,340,1):77 for y in range(0,480,1):78 color = cap[y,x]79 l.append(color)80 #print(color)81 n=len(l)82 l2 = [item[0] for item in l]83#print(l2)84 sumred=085#l2 = [item[1] for item in l]86 #print(l2)87 for ele in range(0, len(l2)):88 sumred = sumred + l2[ele]89 answer=sumred/n90 sumgreen=091 l3 = [item[1] for item in l]92 #print(l3)93 for ele in range(0, len(l3)):94 sumgreen = sumgreen + l3[ele]95 answer1=sumgreen/n96 sumblue=097 l4 = [item[2] for item in l]98#print(l4)99 for ele in range(0, len(l4)):100 sumblue = sumblue + l4[ele]101 answer2=sumblue/n102#print(answer2)103 newp=(answer1+answer2+answer)/3104 a1=math.ceil(answer)105 a2=math.ceil(answer1)106 a3=math.ceil(answer2)107 108 109 #rgb normal: range (0-255, 0-255, 0.255)110 blue=answer2 #red ko blue see change111 green=answer1112 red=answer #red ko blue see change113 #rgb normal: range (0-255, 0-255, 0.255) 114 #get rgb percentage: range (0-1, 0-1, 0-1 )115 red_percentage= red / float(255)116 green_percentage= green/ float(255) 117 blue_percentage=blue / float(255)118 119 120 #get hsv percentage: range (0-1, 0-1, 0-1)121 color_hsv_percentage=colorsys.rgb_to_hsv(red_percentage, green_percentage, blue_percentage) 122 #print('color_hsv_percentage: ', color_hsv_percentage)123 124 125 126 #get normal hsv: range (0-360, 0-255, 0-255)127 color_h=round(360*color_hsv_percentage[0])128 color_s=round(255*color_hsv_percentage[1])129 color_v=round(255*color_hsv_percentage[2])130 131 color_hsv=[color_h, color_s, color_h]132 l= 650 - 250 / 270 *color_h 133 #print('color_hsv: ', color_hsv)134 return l135 136 137 138demo4=gr.Interface(wave,gr.Image(label="Select your Image"),outputs=[gr.outputs.Textbox(label="Wave Length in nm (Nanometre)")],title="Nature of Wave Length Emitted")139#demo5=gr.Interface(avg,gr.Image(label="Average Color seen by Cameraman"),outputs="text",title="Color Analysis")140output3 = gr.Plot()141demo1 = gr.Interface(image_mod, gr.Image(label="UPLOAD YOUR IMAGE HERE",shape=(2000, 2000)),"image",title="Spectrometer")142demo3=gr.Interface(avg,gr.Image(label="Average Color seen by the camera"),outputs=[gr.Plot(label="Matplotlib Plot")],title="Expected Color Seen by Camera")143demo2 = gr.Interface(greet,gr.Image(label="UPLOAD YOUR IMAGE HERE"),outputs="text",title="Dimension and No.of Pixels")144demo = gr.TabbedInterface([demo1,demo2,demo3,demo4])145demo.launch()