轮胎外观检测添加思谋语义分割模型检测工具
C3204
6 小时以前 98c0775fe3b61a37d90dd5756287f385a311adf0
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
using LB_VisionProcesses.Alogrithms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace LB_VisionProcesses.Processes
{
    /// <summary>
    /// 轮胎计数工具编辑器
    /// </summary>
    public partial class TyreCounterProcessEdit : TAlgorithmEdit
    {
        DataTable DataTableInputs = new DataTable();
        DataTable DataTableOutputs = new DataTable();
 
        public TyreCounterProcessEdit(TyreCounterProcess subject = null)
        {
            InitializeComponent();
            if (subject == null)
                subject = new TyreCounterProcess();
 
            this.Subject = subject;
        }
 
        private void TyreCounterProcessEdit_Load(object sender, EventArgs e)
        {
            LoadParas();
        }
 
        /// <summary>
        /// 加载参数
        /// </summary>
        public override void LoadParas()
        {
            if (Subject is TyreCounterProcess counter)
            {
                // 加载配置参数
                numericUpDownImagesPerTyre.Value = counter.ImagesPerTyre;
                comboBoxJudgeRule.SelectedItem = counter.JudgeRule.ToString();
                checkBoxAutoReset.Checked = counter.AutoReset;
 
                // 加载统计信息
                UpdateStatistics();
 
                // 绑定输入参数
                DataTableInputs.Columns.Add("Key", typeof(string));
                DataTableInputs.Columns.Add("Value", typeof(object));
                DataTableInputs.Rows.Clear();
 
                var inputs = new Dictionary<string, object>
                {
                    { "ImagesPerTyre", counter.ImagesPerTyre },
                    { "JudgeRule", counter.JudgeRule.ToString() },
                    { "AutoReset", counter.AutoReset }
                };
 
                foreach (var item in inputs)
                    DataTableInputs.Rows.Add(item.Key, item.Value);
 
                dataGridInputs.DataSource = DataTableInputs;
 
                // 绑定输出参数
                DataTableOutputs.Columns.Add("Key", typeof(string));
                DataTableOutputs.Columns.Add("Value", typeof(object));
                DataTableOutputs.Rows.Clear();
 
                var outputs = new Dictionary<string, object>
                {
                    { "CurrentTyreID", counter.CurrentTyreID },
                    { "CurrentImageIndex", counter.CurrentImageIndex },
                    { "IsTyreComplete", counter.IsTyreComplete },
                    { "TyreResult", counter.TyreResult },
                    { "TyreTotal", counter.TyreTotal },
                    { "TyreOK", counter.TyreOK },
                    { "TyreNG", counter.TyreNG },
                    { "TyreRateOK", counter.TyreRateOK }
                };
 
                foreach (var item in outputs)
                    DataTableOutputs.Rows.Add(item.Key, item.Value);
 
                dataGridOutputs.DataSource = DataTableOutputs;
 
                // 设置状态栏
                lblResult.Text = $"结果: {(counter.Result ? "OK" : "NG")}";
                lblResult.ForeColor = counter.Result ? Color.LightGreen : Color.LightCoral;
                lblMsg.Text = counter.Msg;
            }
        }
 
        /// <summary>
        /// 更新统计信息显示
        /// </summary>
        private void UpdateStatistics()
        {
            if (Subject is TyreCounterProcess counter)
            {
                txtCurrentTyreID.Text = counter.CurrentTyreID.ToString();
                txtCurrentImageIndex.Text = $"{counter.CurrentImageIndex}/{counter.ImagesPerTyre}";
                txtTyreTotal.Text = counter.TyreTotal.ToString();
                txtTyreOK.Text = counter.TyreOK.ToString();
                txtTyreNG.Text = counter.TyreNG.ToString();
                txtTyreRateOK.Text = $"{counter.TyreRateOK:F2}%";
            }
        }
 
        /// <summary>
        /// 更新输入参数
        /// </summary>
        public override void UpdataInputs()
        {
            if (Subject is TyreCounterProcess counter)
            {
                counter.ImagesPerTyre = (int)numericUpDownImagesPerTyre.Value;
                counter.JudgeRule = (TyreJudgeRule)Enum.Parse(typeof(TyreJudgeRule), comboBoxJudgeRule.SelectedItem?.ToString() ?? "AnyNG");
                counter.AutoReset = checkBoxAutoReset.Checked;
 
                // 更新输入参数表
                Subject.Params.Inputs["ImagesPerTyre"] = counter.ImagesPerTyre;
                Subject.Params.Inputs["JudgeRule"] = counter.JudgeRule.ToString();
                Subject.Params.Inputs["AutoReset"] = counter.AutoReset;
            }
        }
 
        private void btnSave_Click(object sender, EventArgs e)
        {
            UpdataInputs();
            lblMsg.Text = "参数已保存";
            lblMsg.ForeColor = Color.LightGreen;
        }
 
        private void btnReset_Click(object sender, EventArgs e)
        {
            if (Subject is TyreCounterProcess counter)
            {
                counter.ResetTyreCount();
                UpdateStatistics();
                LoadParas();
                lblMsg.Text = "计数器已重置";
                lblMsg.ForeColor = Color.LightGreen;
            }
        }
 
        private void btnRun_Click(object sender, EventArgs e)
        {
            UpdataInputs();
            Subject.Run();
            UpdateStatistics();
            LoadParas();
            lblResult.Text = $"结果: {(Subject.Result ? "OK" : "NG")}";
            lblResult.ForeColor = Subject.Result ? Color.LightGreen : Color.LightCoral;
            lblMsg.Text = Subject.Msg;
        }
    }
}