import gradio as gr import zxingcpp import numpy as np from PIL import Image import cv2 def decode(im,col,tol): img = cv2.imread(f'{im}') ''' gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) blur = cv2.medianBlur(gray, 5) sharpen_kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]]) sharpen = cv2.filter2D(blur, -1, sharpen_kernel) ''' try: results = zxingcpp.read_barcodes(img) return results[0].text except Exception: #qr_img=Image.open(im).convert("RGBA") qr_img=Image.open(im) datas = qr_img.getdata() newData = [] h1 = col.strip("#") rgb_tup = tuple(int(h1[i:i+2], 16) for i in (0, 2, 4)) for item in datas: if item[0] in range(rgb_tup[0]-tol,rgb_tup[0]+tol) and item[1] in range(rgb_tup[1]-tol,rgb_tup[1]+tol) and item[2] in range(rgb_tup[2]-tol,rgb_tup[2]+tol): newData.append((0,0,0)) else: newData.append((255,255,255)) qr_img.putdata(newData) qr_img.save('conv_im.png') img = cv2.imread('conv_im.png') try: results = zxingcpp.read_barcodes(img) print (results[0].text) return results[0].text except Exception: return "QR Code not Detected \nTry choosing the QR code color using the eyedropper in the Color Picker" with gr.Blocks() as app: with gr.Row(): with gr.Column(): in_im = gr.Image(label="QR Image to Decode",type='filepath') #out_im = gr.Image(type='filepath') with gr.Column(): with gr.Row(): choose_color = gr.ColorPicker(label="Choose QR color (eyedropper)") color_tol = gr.Slider(1,255, step=1,value=50,label="Color Detect Tolerance") dec_btn = gr.Button("Decode QR") text_out = gr.Textbox(label="Decoded Text") dec_btn.click(decode,[in_im,choose_color,color_tol],[text_out]) app.queue(concurrency_count=10).launch()