Spaces:
Running
Running
File size: 2,594 Bytes
6084325 81c5eba 8b06480 9f0ef40 81c5eba 6084325 784d954 86ef4a9 784d954 81c5eba 86ef4a9 8102829 86ef4a9 8102829 6084325 550ae51 81c5eba 44c3663 81c5eba 86ef4a9 550ae51 9e1cd24 6084325 784d954 6084325 81c5eba 6084325 550ae51 86ef4a9 550ae51 6084325 550ae51 9f6b576 81c5eba 9310f69 81c5eba 9310f69 550ae51 056d44f 08657ec 0125c43 |
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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
import gradio as gr
import tempfile
import qrcode
from PIL import Image
import numpy as np
import cv2
def generate_qr(data: str) -> tuple:
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data(data)
qr.make(fit=True)
img = qr.make_image(fill="black", back_color="white")
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".png")
img.save(temp_file.name, format="PNG")
temp_file.close() # Ensure file is written to disk
return temp_file.name, img # Return the file path and the PIL image
def read_qr(img: Image.Image) -> str:
img = np.array(img)
detector = cv2.QRCodeDetector()
data, _, _ = detector.detectAndDecode(img)
return data if data else "No QR code found."
def create_gradio_interface():
def generate_qr_interface(data: str):
qr_file, qr_image = generate_qr(data)
return qr_image, qr_file # Show image and provide download link
def read_qr_interface(img: Image.Image):
decoded_data = read_qr(img)
return decoded_data # Return decoded text
generate_interface = gr.Interface(
fn=generate_qr_interface,
inputs=gr.Textbox(placeholder="Enter text or URL here...", label="Data to Encode"),
outputs=[
gr.Image(label="Generated QR Code"), # Display the QR code image
gr.File(label="Download QR Code"), # Downloadable link for the QR code file
],
title="Generate QR Code",
description="Quickly create a QR code from any text or URL.",
)
read_interface = gr.Interface(
fn=read_qr_interface,
inputs=gr.Image(type="pil", label="Upload QR Code Image"),
outputs=gr.Textbox(label="Decoded Data"),
title="Read QR Code",
description="Upload an image with a QR code to decode the embedded data.",
)
with gr.Blocks() as demo:
gr.Markdown("## QR Code Tool: Generate and Decode with Ease")
with gr.Tab("Generate QR Code"):
generate_interface.render()
with gr.Tab("Read QR Code"):
with gr.Row():
qr_text = gr.Textbox(label="Decoded Data") # Single box for decoded data
copy_button = gr.Button("Copy to Clipboard")
read_interface.render()
copy_button.click(
lambda text: gr.Textbox.update(value="Copied to Clipboard!"),
qr_text,
qr_text,
)
demo.launch(share=True)
create_gradio_interface()
|