Spaces:
Sleeping
Sleeping
Upload app.py
Browse files- 2.CNN/app.py +19 -24
2.CNN/app.py
CHANGED
|
@@ -725,7 +725,7 @@ def enrich_diagnostics(stats, probs):
|
|
| 725 |
return stats
|
| 726 |
|
| 727 |
|
| 728 |
-
def predict_number(main_canvas
|
| 729 |
ensure_model_loaded()
|
| 730 |
composed, seg_diag = compose_from_single_canvas(main_canvas)
|
| 731 |
if composed is None:
|
|
@@ -737,7 +737,6 @@ def predict_number(main_canvas, stroke_scale):
|
|
| 737 |
|
| 738 |
result = preprocess_composed_28x56(
|
| 739 |
composed,
|
| 740 |
-
stroke_scale=stroke_scale,
|
| 741 |
extra_diag=seg_diag,
|
| 742 |
)
|
| 743 |
if result is None:
|
|
@@ -775,15 +774,8 @@ with gr.Blocks() as demo:
|
|
| 775 |
)
|
| 776 |
|
| 777 |
with gr.Row():
|
| 778 |
-
with gr.Column(scale=1):
|
| 779 |
main_canvas = gr.Sketchpad(label="Draw Two Digits (00–99)")
|
| 780 |
-
stroke_slider = gr.Slider(
|
| 781 |
-
minimum=0.3,
|
| 782 |
-
maximum=1.2,
|
| 783 |
-
value=1.0,
|
| 784 |
-
step=0.05,
|
| 785 |
-
label="Stroke Intensity (scale)",
|
| 786 |
-
)
|
| 787 |
|
| 788 |
with gr.Column(scale=1):
|
| 789 |
pred_box = gr.Number(label="Predicted Number", precision=0, value=None)
|
|
@@ -796,29 +788,32 @@ with gr.Blocks() as demo:
|
|
| 796 |
preview = gr.Image(label="Model Input Preview (28x56)", image_mode="L")
|
| 797 |
mean_diff_view = gr.Image(label="Difference vs Training Mean", image_mode="L")
|
| 798 |
diagnostics_box = gr.Code(label="Diagnostics (JSON)", language="json")
|
| 799 |
-
|
| 800 |
-
|
| 801 |
-
|
| 802 |
-
|
| 803 |
-
|
| 804 |
-
|
| 805 |
-
|
| 806 |
-
|
| 807 |
-
|
| 808 |
-
|
| 809 |
-
|
| 810 |
-
|
|
|
|
|
|
|
|
|
|
| 811 |
|
| 812 |
predict_btn.click(
|
| 813 |
fn=predict_number,
|
| 814 |
-
inputs=[main_canvas
|
| 815 |
outputs=[pred_box, prob_table, preview, mean_diff_view, diagnostics_box],
|
| 816 |
)
|
| 817 |
# On Spaces, avoid per-stroke inference to prevent event floods
|
| 818 |
if not IS_SPACE:
|
| 819 |
main_canvas.change(
|
| 820 |
fn=predict_number,
|
| 821 |
-
inputs=[main_canvas
|
| 822 |
outputs=[pred_box, prob_table, preview, mean_diff_view, diagnostics_box],
|
| 823 |
)
|
| 824 |
|
|
|
|
| 725 |
return stats
|
| 726 |
|
| 727 |
|
| 728 |
+
def predict_number(main_canvas):
|
| 729 |
ensure_model_loaded()
|
| 730 |
composed, seg_diag = compose_from_single_canvas(main_canvas)
|
| 731 |
if composed is None:
|
|
|
|
| 737 |
|
| 738 |
result = preprocess_composed_28x56(
|
| 739 |
composed,
|
|
|
|
| 740 |
extra_diag=seg_diag,
|
| 741 |
)
|
| 742 |
if result is None:
|
|
|
|
| 774 |
)
|
| 775 |
|
| 776 |
with gr.Row():
|
| 777 |
+
with gr.Column(scale=1) as left_col:
|
| 778 |
main_canvas = gr.Sketchpad(label="Draw Two Digits (00–99)")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 779 |
|
| 780 |
with gr.Column(scale=1):
|
| 781 |
pred_box = gr.Number(label="Predicted Number", precision=0, value=None)
|
|
|
|
| 788 |
preview = gr.Image(label="Model Input Preview (28x56)", image_mode="L")
|
| 789 |
mean_diff_view = gr.Image(label="Difference vs Training Mean", image_mode="L")
|
| 790 |
diagnostics_box = gr.Code(label="Diagnostics (JSON)", language="json")
|
| 791 |
+
|
| 792 |
+
# Place buttons under the canvas, but wire them to clear outputs as well
|
| 793 |
+
with left_col:
|
| 794 |
+
with gr.Row():
|
| 795 |
+
predict_btn = gr.Button("Predict", variant="primary")
|
| 796 |
+
clear_btn = gr.ClearButton(
|
| 797 |
+
[
|
| 798 |
+
main_canvas,
|
| 799 |
+
pred_box,
|
| 800 |
+
prob_table,
|
| 801 |
+
preview,
|
| 802 |
+
mean_diff_view,
|
| 803 |
+
diagnostics_box,
|
| 804 |
+
]
|
| 805 |
+
)
|
| 806 |
|
| 807 |
predict_btn.click(
|
| 808 |
fn=predict_number,
|
| 809 |
+
inputs=[main_canvas],
|
| 810 |
outputs=[pred_box, prob_table, preview, mean_diff_view, diagnostics_box],
|
| 811 |
)
|
| 812 |
# On Spaces, avoid per-stroke inference to prevent event floods
|
| 813 |
if not IS_SPACE:
|
| 814 |
main_canvas.change(
|
| 815 |
fn=predict_number,
|
| 816 |
+
inputs=[main_canvas],
|
| 817 |
outputs=[pred_box, prob_table, preview, mean_diff_view, diagnostics_box],
|
| 818 |
)
|
| 819 |
|