| | import spaces |
| | import sys |
| | import logging |
| | logging.basicConfig(level=logging.INFO) |
| | |
| |
|
| | import gradio as gr |
| | |
| | |
| | import matplotlib.pyplot as plt |
| | from aimodel import model_init, read_meter, visualization |
| | from test_rect import read_meter as read_meter_rect |
| | from PIL import Image |
| | from io import BytesIO |
| | import logging |
| | |
| | print("Loading model...") |
| | fl, fl_ft = model_init(hack=False) |
| | @spaces.GPU(duration=60) |
| | def process_image(input_image:Image, meter_type:str): |
| | if meter_type == "方形儀表": |
| | value, img = read_meter_rect(input_image, fl, fl_ft) |
| | return img, f"辨識結果: PA={value}", None |
| | assert meter_type == "圓形儀表" |
| | plt.clf() |
| | print("process_image") |
| | W, H = 640, 480 |
| | if input_image is None: |
| | return None, None |
| | meter_result = read_meter(input_image, fl, fl_ft) |
| | img, fig = visualization(meter_result) |
| | buf = BytesIO() |
| | fig.savefig(buf, format='png') |
| | buf.seek(0) |
| | fig_img = Image.open(buf) |
| | plt.clf() |
| | return img, f"辨識結果: PSI={meter_result.needle_psi:.1f} kg/cm²={meter_result.needle_kg_cm2:.2f} ", fig_img |
| |
|
| | with gr.Blocks(theme='Hev832/Applio') as demo: |
| |
|
| | gr.Markdown("## 指針辨識系統\n請選擇儀表類型,上傳圖片,或點擊Submit") |
| |
|
| | with gr.Row(): |
| | with gr.Column(): |
| | with gr.Row(): |
| | clear_button = gr.ClearButton() |
| | submit_button = gr.Button("Submit", variant="primary") |
| | meter_type_dropdown = gr.Dropdown(choices=["圓形儀表", "方形儀表"], label="選擇選項") |
| | image_input = gr.Image(type="pil", label="上傳圖片") |
| | with gr.Column(): |
| | number_output = gr.Textbox(label="辨識結果", placeholder="辨識結果") |
| | image_output = gr.Image(label="輸出圖片") |
| | plot_output = gr.Image(label="模型結果") |
| | gr.Examples( |
| | examples=[ |
| | ['images/img1.jpg', '圓形儀表'], |
| | ['images/img2.jpg', '圓形儀表'], |
| | ['images/img3.jpg', '圓形儀表'], |
| | ['images/img4.jpg', '圓形儀表'], |
| | ['images/img5.jpg', '方形儀表'], |
| | ], |
| | inputs=[image_input, meter_type_dropdown], |
| | outputs=[image_output, number_output, plot_output], |
| | fn=process_image, |
| | cache_examples=True, |
| | label="Examples" |
| | ) |
| |
|
| | clear_button.add([image_input, image_output, number_output]) |
| |
|
| | image_input.upload( |
| | fn=process_image, |
| | inputs=[image_input, meter_type_dropdown], |
| | outputs=[image_output, number_output, plot_output], |
| | queue=False |
| | ) |
| |
|
| | submit_button.click( |
| | fn=process_image, |
| | inputs=[image_input, meter_type_dropdown], |
| | outputs=[image_output, number_output, plot_output], |
| | ) |
| |
|
| | demo.launch(debug=False) |
| |
|