Zengyf-CVer commited on
Commit
ae2a0be
1 Parent(s): dc3c9dd

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +204 -87
app.py CHANGED
@@ -1,10 +1,11 @@
1
- # Gradio YOLOv8 Det v1.3.0
2
  # 创建人:曾逸夫
3
- # 创建时间:2023-12-15
4
- # pip install gradio>=4.9.1
5
  # python gradio_yolov8_det_v1.py
6
 
7
 
 
8
  import argparse
9
  import csv
10
  import random
@@ -36,9 +37,6 @@ from PIL import Image, ImageDraw, ImageFont
36
 
37
  from util.fonts_opt import is_fonts
38
 
39
- # Gradio YOLOv8 Det版本
40
- GYD_VERSION = "Gradio YOLOv8 Det v1.2.1"
41
-
42
  # 文件后缀
43
  suffix_list = [".csv", ".yaml"]
44
 
@@ -63,9 +61,9 @@ GYD_SUB_TITLE = """
63
  """
64
 
65
  EXAMPLES_DET = [
66
- ["./img_examples/bus.jpg", "yolov8s", "cpu", 640, 0.6, 0.5, 100, "所有尺寸"],
67
- ["./img_examples/giraffe.jpg", "yolov8l", "cpu", 320, 0.5, 0.45, 100, "所有尺寸"],
68
- ["./img_examples/zidane.jpg", "yolov8m", "cpu", 640, 0.6, 0.5, 100, "所有尺寸"],
69
  [
70
  "./img_examples/Millenial-at-work.jpg",
71
  "yolov8x",
@@ -74,9 +72,10 @@ EXAMPLES_DET = [
74
  0.5,
75
  0.5,
76
  100,
 
77
  "所有尺寸",
78
  ],
79
- ["./img_examples/bus.jpg", "yolov8s-seg", "cpu", 640, 0.6, 0.5, 100, "所有尺寸"],
80
  [
81
  "./img_examples/Millenial-at-work.jpg",
82
  "yolov8x-seg",
@@ -85,17 +84,18 @@ EXAMPLES_DET = [
85
  0.5,
86
  0.5,
87
  100,
 
88
  "所有尺寸",
89
  ],
90
  ]
91
 
92
  EXAMPLES_CLAS = [
93
- ["./img_examples/img_clas/ILSVRC2012_val_00000008.JPEG", "yolov8s-cls"],
94
- ["./img_examples/img_clas/ILSVRC2012_val_00000018.JPEG", "yolov8l-cls"],
95
- ["./img_examples/img_clas/ILSVRC2012_val_00000023.JPEG", "yolov8m-cls"],
96
- ["./img_examples/img_clas/ILSVRC2012_val_00000067.JPEG", "yolov8m-cls"],
97
- ["./img_examples/img_clas/ILSVRC2012_val_00000077.JPEG", "yolov8m-cls"],
98
- ["./img_examples/img_clas/ILSVRC2012_val_00000247.JPEG", "yolov8m-cls"],
99
  ]
100
 
101
  GYD_CSS = """#disp_image {
@@ -103,8 +103,11 @@ GYD_CSS = """#disp_image {
103
  }"""
104
 
105
 
 
 
 
106
  def parse_args(known=False):
107
- parser = argparse.ArgumentParser(description=GYD_VERSION)
108
  parser.add_argument(
109
  "--model_name", "-mn", default="yolov8s", type=str, help="model name"
110
  )
@@ -315,9 +318,18 @@ def seg_output(img_path, seg_mask_list, color_list, cls_list):
315
 
316
  # 目标检测和图像分割模型加载
317
  def model_det_loading(
318
- img_path, device_opt, conf, iou, infer_size, max_det, yolo_model="yolov8n.pt"
 
 
 
 
 
 
 
319
  ):
320
  model = YOLO(yolo_model)
 
 
321
 
322
  results = model(
323
  source=img_path,
@@ -325,6 +337,7 @@ def model_det_loading(
325
  imgsz=infer_size,
326
  conf=conf,
327
  iou=iou,
 
328
  max_det=max_det,
329
  )
330
  results = list(results)[0]
@@ -332,17 +345,25 @@ def model_det_loading(
332
 
333
 
334
  # 图像分类模型加载
335
- def model_cls_loading(img_path, yolo_model="yolov8s-cls.pt"):
336
  model = YOLO(yolo_model)
337
 
338
- results = model(source=img_path)
339
  results = list(results)[0]
340
  return results
341
 
342
 
343
  # YOLOv8图片检测函数
344
  def yolo_det_img(
345
- img_path, model_name, device_opt, infer_size, conf, iou, max_det, obj_size
 
 
 
 
 
 
 
 
346
  ):
347
  global model, model_name_tmp, device_tmp
348
 
@@ -363,8 +384,10 @@ def yolo_det_img(
363
  iou,
364
  infer_size,
365
  max_det,
 
366
  yolo_model=f"{model_name}.pt",
367
  )
 
368
  # 检测参数
369
  xyxy_list = predict_results.boxes.xyxy.cpu().numpy().tolist()
370
  conf_list = predict_results.boxes.conf.cpu().numpy().tolist()
@@ -520,9 +543,11 @@ def yolo_det_img(
520
 
521
 
522
  # YOLOv8图片分类函数
523
- def yolo_cls_img(img_path, model_name):
524
  # 模型加载
525
- predict_results = model_cls_loading(img_path, yolo_model=f"{model_name}.pt")
 
 
526
 
527
  det_img = Image.open(img_path)
528
  clas_ratio_list = predict_results.probs.top5conf.tolist()
@@ -572,8 +597,6 @@ def main(args):
572
  button_secondary_background_fill_hover="*neutral_200",
573
  )
574
 
575
- custom_css = GYD_CSS
576
-
577
  # ------------ Gradio Blocks ------------
578
  with gr.Blocks(theme=custom_theme, css=custom_css) as gyd:
579
  with gr.Row():
@@ -581,110 +604,203 @@ def main(args):
581
  with gr.Row():
582
  gr.Markdown(GYD_SUB_TITLE)
583
  with gr.Row():
584
- with gr.Tabs():
585
- with gr.TabItem("目标检测与图像分割"):
586
- with gr.Row():
 
587
  with gr.Column(scale=1):
588
  with gr.Row():
589
- inputs_img = gr.Image(image_mode="RGB", type="filepath", label="原始图片")
 
 
590
  with gr.Row():
591
- device_opt = gr.Radio(choices=["cpu", "0", "1", "2", "3"], value="cpu", label="设备")
 
 
 
 
592
  with gr.Row():
593
- inputs_model = gr.Dropdown(choices=model_names, value=model_name, type="value", label="模型")
 
 
 
 
 
594
  with gr.Accordion("高级设置", open=True):
595
  with gr.Row():
596
- inputs_size = gr.Slider(320, 1600, step=1, value=inference_size, label="推理尺寸")
597
- max_det = gr.Slider(1, 1000, step=1, value=max_detnum, label="最大检测数")
 
 
 
 
 
 
 
 
 
 
 
 
598
  with gr.Row():
599
- input_conf = gr.Slider(0, 1, step=slider_step, value=nms_conf, label="置信度阈值")
600
- inputs_iou = gr.Slider(0, 1, step=slider_step, value=nms_iou, label="IoU 阈值")
 
 
 
 
 
 
 
 
 
 
 
 
601
  with gr.Row():
602
- obj_size = gr.Radio(choices=["所有尺寸", "小目标", "中目标", "大目标"], value="所有尺寸", label="目标尺寸")
 
 
 
 
 
 
 
 
 
 
 
 
 
603
  with gr.Row():
604
  gr.ClearButton(inputs_img, value="清除")
605
- det_btn_img = gr.Button(value='检测', variant="primary")
 
 
 
 
606
  with gr.Column(scale=1):
607
  # with gr.Row():
608
  # outputs_img = gr.Image(type="pil", label="检测图片")
609
  with gr.Row():
610
- outputs_img_slider = ImageSlider(position=0.5, label="检测图片")
 
 
611
  with gr.Row():
612
  outputs_imgfiles = gr.Files(label="图片下载")
613
  with gr.Row():
614
  outputs_objSize = gr.Label(label="目标尺寸占比统计")
615
  with gr.Row():
616
  outputs_clsSize = gr.Label(label="类别检测占比统计")
 
 
617
  with gr.Row():
618
  gr.Examples(
619
  examples=EXAMPLES_DET,
620
  fn=yolo_det_img,
621
  inputs=[
622
- inputs_img, inputs_model, device_opt, inputs_size, input_conf, inputs_iou, max_det,
623
- obj_size],
 
 
 
 
 
 
 
 
624
  # outputs=[outputs_img, outputs_objSize, outputs_clsSize],
625
- cache_examples=False)
 
626
 
627
- with gr.TabItem("图像分类"):
628
- with gr.Row():
 
629
  with gr.Column(scale=1):
630
  with gr.Row():
631
- inputs_img_cls = gr.Image(image_mode="RGB", type="filepath", label="原始图片")
 
 
632
  with gr.Row():
633
- inputs_model_cls = gr.Dropdown(choices=[
634
- "yolov8n-cls", "yolov8s-cls", "yolov8l-cls", "yolov8m-cls", "yolov8x-cls"],
635
- value="yolov8s-cls",
636
- type="value",
637
- label="模型")
 
 
 
 
 
 
 
 
 
 
 
 
 
638
  with gr.Row():
639
  gr.ClearButton(inputs_img, value="清除")
640
- det_btn_img_cls = gr.Button(value='检测', variant="primary")
 
 
 
 
641
  with gr.Column(scale=1):
642
  with gr.Row():
643
  outputs_img_cls = gr.Image(type="pil", label="检测图片")
644
  with gr.Row():
645
  outputs_ratio_cls = gr.Label(label="图像分类结果")
 
 
646
  with gr.Row():
647
  gr.Examples(
648
  examples=EXAMPLES_CLAS,
649
  fn=yolo_cls_img,
650
- inputs=[inputs_img_cls, inputs_model_cls],
 
 
 
 
651
  # outputs=[outputs_img_cls, outputs_ratio_cls],
652
- cache_examples=False)
653
-
654
 
655
  with gr.Accordion("Gradio YOLOv8 Det 安装与使用教程"):
656
- gr.Markdown(
657
- """## Gradio YOLOv8 Det 安装与使用教程
658
- ```shell
659
- conda create -n yolo python==3.8
660
- conda activate yolo # 进入环境
661
- git clone https://gitee.com/CV_Lab/gradio-yolov8-det.git
662
- cd gradio-yolov8-det
663
- pip install -r ./requirements.txt -U
664
- ```
665
- ```shell
666
- # 共享模式
667
- python gradio_yolov8_det_v1.py -is # 在浏览器中以共享模式打开,https://**.gradio.app/
668
- # 自定义模型配置
669
- python gradio_yolov8_det_v1.py -mc ./model_config/model_name_all.yaml
670
- # 自定义下拉框默认模型名称
671
- python gradio_yolov8_det_v1.py -mn yolov8m
672
- # 自定义类别名称
673
- python gradio_yolov8_det_v1.py -cls ./cls_name/cls_name_zh.yaml (目标检测与图像分割)
674
- python gradio_yolov8_det_v1.py -cin ./cls_name/cls_imgnet_name_zh.yaml (图像分类)
675
- # 自定义NMS置信度阈值
676
- python gradio_yolov8_det_v1.py -conf 0.8
677
- # 自定义NMS IoU阈值
678
- python gradio_yolov8_det_v1.py -iou 0.5
679
- # 设置推理尺寸,默认为640
680
- python gradio_yolov8_det_v1.py -isz 320
681
- # 设置最大检测数,默认为50
682
- python gradio_yolov8_det_v1.py -mdn 100
683
- # 设置滑块步长,默认为0.05
684
- python gradio_yolov8_det_v1.py -ss 0.01
685
- ```
686
- """
687
- )
 
688
 
689
  det_btn_img.click(
690
  fn=yolo_det_img,
@@ -696,6 +812,7 @@ def main(args):
696
  input_conf,
697
  inputs_iou,
698
  max_det,
 
699
  obj_size,
700
  ],
701
  outputs=[
@@ -708,7 +825,7 @@ def main(args):
708
 
709
  det_btn_img_cls.click(
710
  fn=yolo_cls_img,
711
- inputs=[inputs_img_cls, inputs_model_cls],
712
  outputs=[outputs_img_cls, outputs_ratio_cls],
713
  )
714
 
@@ -726,4 +843,4 @@ if __name__ == "__main__":
726
  favicon_path="./icon/logo.ico", # 网页图标
727
  show_error=True, # 在浏览器控制台中显示错误信息
728
  quiet=True, # 禁止大多数打印语句
729
- )
 
1
+ # Gradio YOLOv8 Det v1.3.1
2
  # 创建人:曾逸夫
3
+ # 创建时间:2024-01-03
4
+ # pip install gradio>=4.12.0
5
  # python gradio_yolov8_det_v1.py
6
 
7
 
8
+ import __init__
9
  import argparse
10
  import csv
11
  import random
 
37
 
38
  from util.fonts_opt import is_fonts
39
 
 
 
 
40
  # 文件后缀
41
  suffix_list = [".csv", ".yaml"]
42
 
 
61
  """
62
 
63
  EXAMPLES_DET = [
64
+ ["./img_examples/bus.jpg", "yolov8s", "cpu", 640, 0.6, 0.5, 100, [], "所有尺寸"],
65
+ ["./img_examples/giraffe.jpg", "yolov8l", "cpu", 320, 0.5, 0.45, 100, [], "所有尺寸"],
66
+ ["./img_examples/zidane.jpg", "yolov8m", "cpu", 640, 0.6, 0.5, 100, [], "所有尺寸"],
67
  [
68
  "./img_examples/Millenial-at-work.jpg",
69
  "yolov8x",
 
72
  0.5,
73
  0.5,
74
  100,
75
+ [],
76
  "所有尺寸",
77
  ],
78
+ ["./img_examples/bus.jpg", "yolov8s-seg", "cpu", 640, 0.6, 0.5, 100, [], "所有尺寸"],
79
  [
80
  "./img_examples/Millenial-at-work.jpg",
81
  "yolov8x-seg",
 
84
  0.5,
85
  0.5,
86
  100,
87
+ [],
88
  "所有尺寸",
89
  ],
90
  ]
91
 
92
  EXAMPLES_CLAS = [
93
+ ["./img_examples/img_clas/ILSVRC2012_val_00000008.JPEG", "cpu", "yolov8s-cls"],
94
+ ["./img_examples/img_clas/ILSVRC2012_val_00000018.JPEG", "cpu", "yolov8l-cls"],
95
+ ["./img_examples/img_clas/ILSVRC2012_val_00000023.JPEG", "cpu", "yolov8m-cls"],
96
+ ["./img_examples/img_clas/ILSVRC2012_val_00000067.JPEG", "cpu", "yolov8m-cls"],
97
+ ["./img_examples/img_clas/ILSVRC2012_val_00000077.JPEG", "cpu", "yolov8m-cls"],
98
+ ["./img_examples/img_clas/ILSVRC2012_val_00000247.JPEG", "cpu", "yolov8m-cls"],
99
  ]
100
 
101
  GYD_CSS = """#disp_image {
 
103
  }"""
104
 
105
 
106
+ custom_css = "./gyd_style.css"
107
+
108
+
109
  def parse_args(known=False):
110
+ parser = argparse.ArgumentParser(description=__init__.__version__)
111
  parser.add_argument(
112
  "--model_name", "-mn", default="yolov8s", type=str, help="model name"
113
  )
 
318
 
319
  # 目标检测和图像分割模型加载
320
  def model_det_loading(
321
+ img_path,
322
+ device_opt,
323
+ conf,
324
+ iou,
325
+ infer_size,
326
+ max_det,
327
+ inputs_cls_name,
328
+ yolo_model="yolov8n.pt",
329
  ):
330
  model = YOLO(yolo_model)
331
+ if inputs_cls_name == []:
332
+ inputs_cls_name = None
333
 
334
  results = model(
335
  source=img_path,
 
337
  imgsz=infer_size,
338
  conf=conf,
339
  iou=iou,
340
+ classes=inputs_cls_name,
341
  max_det=max_det,
342
  )
343
  results = list(results)[0]
 
345
 
346
 
347
  # 图像分类模型加载
348
+ def model_cls_loading(img_path, device_opt, yolo_model="yolov8s-cls.pt"):
349
  model = YOLO(yolo_model)
350
 
351
+ results = model(source=img_path, device=device_opt)
352
  results = list(results)[0]
353
  return results
354
 
355
 
356
  # YOLOv8图片检测函数
357
  def yolo_det_img(
358
+ img_path,
359
+ model_name,
360
+ device_opt,
361
+ infer_size,
362
+ conf,
363
+ iou,
364
+ max_det,
365
+ inputs_cls_name,
366
+ obj_size,
367
  ):
368
  global model, model_name_tmp, device_tmp
369
 
 
384
  iou,
385
  infer_size,
386
  max_det,
387
+ inputs_cls_name,
388
  yolo_model=f"{model_name}.pt",
389
  )
390
+
391
  # 检测参数
392
  xyxy_list = predict_results.boxes.xyxy.cpu().numpy().tolist()
393
  conf_list = predict_results.boxes.conf.cpu().numpy().tolist()
 
543
 
544
 
545
  # YOLOv8图片分类函数
546
+ def yolo_cls_img(img_path, device_opt, model_name):
547
  # 模型加载
548
+ predict_results = model_cls_loading(
549
+ img_path, device_opt, yolo_model=f"{model_name}.pt"
550
+ )
551
 
552
  det_img = Image.open(img_path)
553
  clas_ratio_list = predict_results.probs.top5conf.tolist()
 
597
  button_secondary_background_fill_hover="*neutral_200",
598
  )
599
 
 
 
600
  # ------------ Gradio Blocks ------------
601
  with gr.Blocks(theme=custom_theme, css=custom_css) as gyd:
602
  with gr.Row():
 
604
  with gr.Row():
605
  gr.Markdown(GYD_SUB_TITLE)
606
  with gr.Row():
607
+ with gr.Tabs():
608
+ with gr.TabItem("目标检测与图像分割"):
609
+ with gr.Row():
610
+ with gr.Group(elem_id="show_box"):
611
  with gr.Column(scale=1):
612
  with gr.Row():
613
+ inputs_img = gr.Image(
614
+ image_mode="RGB", type="filepath", label="原始图片"
615
+ )
616
  with gr.Row():
617
+ device_opt = gr.Radio(
618
+ choices=["cpu", 0, 1, 2, 3],
619
+ value="cpu",
620
+ label="设备",
621
+ )
622
  with gr.Row():
623
+ inputs_model = gr.Dropdown(
624
+ choices=model_names,
625
+ value=model_name,
626
+ type="value",
627
+ label="模型",
628
+ )
629
  with gr.Accordion("高级设置", open=True):
630
  with gr.Row():
631
+ inputs_size = gr.Slider(
632
+ 320,
633
+ 1600,
634
+ step=1,
635
+ value=inference_size,
636
+ label="推理尺寸",
637
+ )
638
+ max_det = gr.Slider(
639
+ 1,
640
+ 1000,
641
+ step=1,
642
+ value=max_detnum,
643
+ label="最大检测数",
644
+ )
645
  with gr.Row():
646
+ input_conf = gr.Slider(
647
+ 0,
648
+ 1,
649
+ step=slider_step,
650
+ value=nms_conf,
651
+ label="置信度阈值",
652
+ )
653
+ inputs_iou = gr.Slider(
654
+ 0,
655
+ 1,
656
+ step=slider_step,
657
+ value=nms_iou,
658
+ label="IoU 阈值",
659
+ )
660
  with gr.Row():
661
+ inputs_cls_name = gr.Dropdown(
662
+ choices=model_cls_name_cp,
663
+ value=[],
664
+ multiselect=True,
665
+ allow_custom_value=True,
666
+ type="index",
667
+ label="类别选择",
668
+ )
669
+ with gr.Row():
670
+ obj_size = gr.Radio(
671
+ choices=["所有尺寸", "小目标", "中目标", "大目标"],
672
+ value="所有尺寸",
673
+ label="目标尺寸",
674
+ )
675
  with gr.Row():
676
  gr.ClearButton(inputs_img, value="清除")
677
+ det_btn_img = gr.Button(
678
+ value="检测", variant="primary"
679
+ )
680
+
681
+ with gr.Group(elem_id="show_box"):
682
  with gr.Column(scale=1):
683
  # with gr.Row():
684
  # outputs_img = gr.Image(type="pil", label="检测图片")
685
  with gr.Row():
686
+ outputs_img_slider = ImageSlider(
687
+ position=0.5, label="检测图片"
688
+ )
689
  with gr.Row():
690
  outputs_imgfiles = gr.Files(label="图片下载")
691
  with gr.Row():
692
  outputs_objSize = gr.Label(label="目标尺寸占比统计")
693
  with gr.Row():
694
  outputs_clsSize = gr.Label(label="类别检测占比统计")
695
+
696
+ with gr.Group(elem_id="show_box"):
697
  with gr.Row():
698
  gr.Examples(
699
  examples=EXAMPLES_DET,
700
  fn=yolo_det_img,
701
  inputs=[
702
+ inputs_img,
703
+ inputs_model,
704
+ device_opt,
705
+ inputs_size,
706
+ input_conf,
707
+ inputs_iou,
708
+ max_det,
709
+ inputs_cls_name,
710
+ obj_size,
711
+ ],
712
  # outputs=[outputs_img, outputs_objSize, outputs_clsSize],
713
+ cache_examples=False,
714
+ )
715
 
716
+ with gr.TabItem("图像分类"):
717
+ with gr.Row():
718
+ with gr.Group(elem_id="show_box"):
719
  with gr.Column(scale=1):
720
  with gr.Row():
721
+ inputs_img_cls = gr.Image(
722
+ image_mode="RGB", type="filepath", label="原始图片"
723
+ )
724
  with gr.Row():
725
+ device_opt_cls = gr.Radio(
726
+ choices=["cpu", "0", "1", "2", "3"],
727
+ value="cpu",
728
+ label="设备",
729
+ )
730
+ with gr.Row():
731
+ inputs_model_cls = gr.Dropdown(
732
+ choices=[
733
+ "yolov8n-cls",
734
+ "yolov8s-cls",
735
+ "yolov8l-cls",
736
+ "yolov8m-cls",
737
+ "yolov8x-cls",
738
+ ],
739
+ value="yolov8s-cls",
740
+ type="value",
741
+ label="模型",
742
+ )
743
  with gr.Row():
744
  gr.ClearButton(inputs_img, value="清除")
745
+ det_btn_img_cls = gr.Button(
746
+ value="检测", variant="primary"
747
+ )
748
+
749
+ with gr.Group(elem_id="show_box"):
750
  with gr.Column(scale=1):
751
  with gr.Row():
752
  outputs_img_cls = gr.Image(type="pil", label="检测图片")
753
  with gr.Row():
754
  outputs_ratio_cls = gr.Label(label="图像分类结果")
755
+
756
+ with gr.Group(elem_id="show_box"):
757
  with gr.Row():
758
  gr.Examples(
759
  examples=EXAMPLES_CLAS,
760
  fn=yolo_cls_img,
761
+ inputs=[
762
+ inputs_img_cls,
763
+ device_opt_cls,
764
+ inputs_model_cls,
765
+ ],
766
  # outputs=[outputs_img_cls, outputs_ratio_cls],
767
+ cache_examples=False,
768
+ )
769
 
770
  with gr.Accordion("Gradio YOLOv8 Det 安装与使用教程"):
771
+ with gr.Group(elem_id="show_box"):
772
+ gr.Markdown(
773
+ """## Gradio YOLOv8 Det 安装与使用教程
774
+ ```shell
775
+ conda create -n yolo python==3.8
776
+ conda activate yolo # 进入环境
777
+ git clone https://gitee.com/CV_Lab/gradio-yolov8-det.git
778
+ cd gradio-yolov8-det
779
+ pip install -r ./requirements.txt -U
780
+ ```
781
+ ```shell
782
+ # 共享模式
783
+ python gradio_yolov8_det_v1.py -is # 在浏览器中以共享模式打开,https://**.gradio.app/
784
+ # 自定义模型配置
785
+ python gradio_yolov8_det_v1.py -mc ./model_config/model_name_all.yaml
786
+ # 自定义下拉框默认模型名称
787
+ python gradio_yolov8_det_v1.py -mn yolov8m
788
+ # 自定义类别名称
789
+ python gradio_yolov8_det_v1.py -cls ./cls_name/cls_name_zh.yaml (目标检测与图像分割)
790
+ python gradio_yolov8_det_v1.py -cin ./cls_name/cls_imgnet_name_zh.yaml (图像分类)
791
+ # 自定义NMS置信度阈值
792
+ python gradio_yolov8_det_v1.py -conf 0.8
793
+ # 自定义NMS IoU阈值
794
+ python gradio_yolov8_det_v1.py -iou 0.5
795
+ # 设置推理尺寸,默认为640
796
+ python gradio_yolov8_det_v1.py -isz 320
797
+ # 设置最大检测数,默认为50
798
+ python gradio_yolov8_det_v1.py -mdn 100
799
+ # 设置滑块步长,默认为0.05
800
+ python gradio_yolov8_det_v1.py -ss 0.01
801
+ ```
802
+ """
803
+ )
804
 
805
  det_btn_img.click(
806
  fn=yolo_det_img,
 
812
  input_conf,
813
  inputs_iou,
814
  max_det,
815
+ inputs_cls_name,
816
  obj_size,
817
  ],
818
  outputs=[
 
825
 
826
  det_btn_img_cls.click(
827
  fn=yolo_cls_img,
828
+ inputs=[inputs_img_cls, device_opt_cls, inputs_model_cls],
829
  outputs=[outputs_img_cls, outputs_ratio_cls],
830
  )
831
 
 
843
  favicon_path="./icon/logo.ico", # 网页图标
844
  show_error=True, # 在浏览器控制台中显示错误信息
845
  quiet=True, # 禁止大多数打印语句
846
+ )