Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import cv2 | |
| import numpy as np | |
| import matplotlib.pyplot as plt | |
| from tensorflow.keras.datasets import mnist | |
| # Functions for MNIST processing steps | |
| def load_mnist(): | |
| (x_train, y_train), (x_test, y_test) = mnist.load_data() | |
| return x_test, y_test | |
| def get_grayscale(image): | |
| return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) | |
| def thresholding(src): | |
| return cv2.threshold(src, 127, 255, cv2.THRESH_BINARY)[1] | |
| def gaussian_blur(image): | |
| return cv2.GaussianBlur(image, (5, 5), 0) | |
| def edge_detection(image): | |
| return cv2.Canny(image, 100, 200) | |
| def process_mnist_image(img, steps): | |
| original_img = img.copy() | |
| step_images = {'Original': original_img} | |
| for step in steps: | |
| if step == "Grayscale Conversion": | |
| img = get_grayscale(img) | |
| elif step == "Thresholding": | |
| img = thresholding(img) | |
| elif step == "Gaussian Blur": | |
| img = gaussian_blur(img) | |
| elif step == "Edge Detection": | |
| img = edge_detection(img) | |
| step_images[step] = img | |
| return step_images | |
| def visualize_steps(img, steps): | |
| step_images = process_mnist_image(img, steps) | |
| fig, axes = plt.subplots(1, len(step_images), figsize=(15, 5)) | |
| for ax, (step, img) in zip(axes, step_images.items()): | |
| ax.imshow(img, cmap='gray') | |
| ax.set_title(step) | |
| ax.axis('off') | |
| plt.tight_layout() | |
| plt.savefig('mnist_processing_steps.png') | |
| return 'mnist_processing_steps.png' | |
| # Interactive tutorial steps | |
| tutorial_steps = [ | |
| "Grayscale Conversion", | |
| "Thresholding", | |
| "Gaussian Blur", | |
| "Edge Detection" | |
| ] | |
| # Interactive questions | |
| questions = [ | |
| { | |
| "question": "What is the first step in preprocessing MNIST images?", | |
| "options": ["Gaussian Blur", "Grayscale Conversion", "Edge Detection"], | |
| "answer": "Grayscale Conversion" | |
| }, | |
| { | |
| "question": "What does thresholding do in image preprocessing?", | |
| "options": ["Detects edges", "Blurs the image", "Binarizes the image"], | |
| "answer": "Binarizes the image" | |
| }, | |
| { | |
| "question": "What library is used to load the MNIST dataset?", | |
| "options": ["OpenCV", "TensorFlow", "Pytorch"], | |
| "answer": "TensorFlow" | |
| }, | |
| { | |
| "question": "What color space conversion is used in Grayscale Conversion?", | |
| "options": ["BGR to RGB", "RGB to GRAY", "BGR to GRAY"], | |
| "answer": "BGR to GRAY" | |
| }, | |
| { | |
| "question": "What is the purpose of Gaussian Blur?", | |
| "options": ["Detect edges", "Reduce noise", "Convert to grayscale"], | |
| "answer": "Reduce noise" | |
| } | |
| ] | |
| def quiz_interface(): | |
| def check_answer(question_idx, selected): | |
| if questions[question_idx]["answer"] == selected: | |
| return "Correct!" | |
| else: | |
| return "Incorrect. The correct answer is: " + questions[question_idx]["answer"] | |
| interfaces = [] | |
| for idx, question in enumerate(questions): | |
| radio = gr.Radio(choices=question["options"], label=question["question"]) | |
| button = gr.Button("Submit") | |
| output = gr.Textbox(label="Result") | |
| def create_submit_fn(idx): | |
| def submit(selected): | |
| return check_answer(idx, selected) | |
| return submit | |
| interfaces.append(gr.Interface( | |
| create_submit_fn(idx), | |
| radio, | |
| output, | |
| live=True | |
| )) | |
| return interfaces | |
| # Explanation text | |
| explanation_text = """ | |
| **Welcome to the MNIST Processing Tutorial!** | |
| This tutorial will guide you through the basic steps of preprocessing images from the MNIST dataset. | |
| **Steps in the MNIST Image Processing:** | |
| 1. **Grayscale Conversion:** Converts the image to grayscale to simplify the data. | |
| 2. **Thresholding:** Converts the grayscale image into a binary image to distinguish the digits more clearly. | |
| 3. **Gaussian Blur:** Applies a blur to reduce noise and detail in the image. | |
| 4. **Edge Detection:** Detects the edges of the digits to enhance the features for further processing or recognition tasks. | |
| **Interactive Tutorial:** | |
| Please upload an MNIST image and select the preprocessing steps to visualize their effects. | |
| """ | |
| (x_test, y_test) = load_mnist() | |
| image = gr.Image(shape=(28, 28), image_mode='L') | |
| steps = gr.CheckboxGroup(choices=tutorial_steps, label="Select and order the steps for MNIST processing") | |
| output = gr.Image(type='file', label="Processing Steps Visualization") | |
| explanation = gr.Markdown(explanation_text) | |
| mnist_app = gr.Interface( | |
| fn=visualize_steps, | |
| inputs=[image, steps], | |
| outputs=output, | |
| title="MNIST Image Processing", | |
| description=explanation_text, | |
| css=".gradio-container {background-color: lightgray} #radio_div {background-color: #FFD8B4; font-size: 40px;}" | |
| ) | |
| quiz_app = gr.TabbedInterface( | |
| [mnist_app] + quiz_interface(), | |
| ["MNIST Tool"] + [f"Question {i+1}" for i in range(len(questions))], | |
| title="MNIST Tutorial and Quiz" | |
| ) | |
| quiz_app.launch() | |