QR-Read-Mod / app.py
Omnibus's picture
Update app.py
7b442a9
raw
history blame contribute delete
No virus
2.03 kB
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()