马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
目次
起首你要界说v8的模子特性文件
下方是完备的模子编写函数
然后你要在控件窗体中界说应用这些方法以及函数
一、界说你的标签
二、下方是界说模块和坐标的方法
三、画框
完备推理函数代码块
结果展示
完备源码
训练着实和yolov10差不多 由于v10就是在v8的根本上做了优化
YoloV10 训练自己的数据集(推理,转化,C#摆设)_c# yolo-CSDN博客
起首你要界说v8的模子特性文件
下方是完备的模子编写函数
- protected List<Prediction> ParseOutput(DenseTensor<float> output, Image image)
- {
- DenseTensor<float> output2 = output;
- ConcurrentBag<Prediction> result = new ConcurrentBag<Prediction>();
- int width = image.Width;
- int height = image.Height;
- int w = width;
- int h = height;
- float num = (float)base.ModelInputWidth / (float)w;
- float num2 = (float)base.ModelInputHeight / (float)h;
- float val = num;
- float val2 = num2;
- float gain = Math.Min(val, val2);
- num = ((float)base.ModelInputWidth - (float)w * gain) / 2f;
- float num3 = ((float)base.ModelInputHeight - (float)h * gain) / 2f;
- float xPad = num;
- float yPad = num3;
- Parallel.For(0, output2.Dimensions[0], delegate (int i)
- {
- Parallel.For(0, (int)(output2.Length / output2.Dimensions[1]), delegate (int j)
- {
- float xMin = (output2[new int[3] { i, 0, j }] - output2[new int[3] { i, 2, j }] / 2f - xPad) / gain;
- float yMin = (output2[new int[3] { i, 1, j }] - output2[new int[3] { i, 3, j }] / 2f - yPad) / gain;
- float xMax = (output2[new int[3] { i, 0, j }] + output2[new int[3] { i, 2, j }] / 2f - xPad) / gain;
- float yMax = (output2[new int[3] { i, 1, j }] + output2[new int[3] { i, 3, j }] / 2f - yPad) / gain;
- xMin = Utils.Clamp(xMin, 0f, w);
- yMin = Utils.Clamp(yMin, 0f, h);
- xMax = Utils.Clamp(xMax, 0f, w - 1);
- yMax = Utils.Clamp(yMax, 0f, h - 1);
- Parallel.For(0, base.ModelOutputDimensions - 4, delegate (int l)
- {
- float num4 = output2[new int[3]
- {
- i,
- 4 + l,
- j
- }];
- if (!(num4 < base.Confidence))
- {
- result.Add(new Prediction
- {
- Label = base.Labels[l],
- Score = num4,
- Rectangle = new RectangleF(xMin, yMin, xMax - xMin, yMax - yMin)
- });
- }
- });
- });
- });
- return result.ToList();
- }
复制代码 然后你要在控件窗体中界说应用这些方法以及函数
一、界说你的标签
标签你也可以将其写成txt文件再用ReadAllText方法举行读取也是可以的
二、下方是界说模块和坐标的方法
三、画框
完备推理函数代码块
- private void showimg(OpenFileDialog dialog)
- {
- string imgpath = dialog.FileName;
- Image image = System.Drawing.Image.FromFile(imgpath);
- Form form = new Form();
- form.Text = dialog.SafeFileName + " " + image.Width + "x" + image.Height;
- PictureBox pictureBox = new PictureBox();
- pictureBox.Parent = form;
- //图像预测
- var predictions = yolov8.Predict(image);
- // Draw your boxes
- //using var graphics = Graphics.FromImage(image);
- foreach (var pred in predictions)
- {
- var originalImageHeight = image.Height;
- var originalImageWidth = image.Width;
- var x = Math.Max(pred.Rectangle.X, 0);
- var y = Math.Max(pred.Rectangle.Y, 0);
- Console.WriteLine(x);
- Console.WriteLine(y);
- var width = Math.Min(originalImageWidth - x, pred.Rectangle.Width);
- var height = Math.Min(originalImageHeight - y, pred.Rectangle.Height);
- // 框定义
- string text = $"{pred.Label.Name} [{pred.Score}]";
- using (Graphics graphics = Graphics.FromImage(image))
- {
- graphics.CompositingQuality = CompositingQuality.HighQuality;
- graphics.SmoothingMode = SmoothingMode.HighQuality;
- graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
- //
- Font drawFont = new Font("consolas", 11, FontStyle.Regular);
- SizeF size = graphics.MeasureString(text, drawFont);
- SolidBrush fontBrush = new SolidBrush(Color.Black);
- Point atPoint = new Point((int)x, (int)y - (int)size.Height - 1);
- //
- Pen pen = new Pen(Color.Yellow, 2.0f);
- SolidBrush colorBrush = new SolidBrush(Color.Yellow);
- // 画框
- graphics.FillRectangle(colorBrush, (int)x, (int)(y - size.Height - 1), (int)size.Width, (int)size.Height);
- graphics.DrawString(text, drawFont, fontBrush, atPoint);
- // Draw bounding box on image
- graphics.DrawRectangle(pen, x, y, width, height);
- }
- }
-
- pictureBox.Width = image.Width;
- pictureBox.Height = image.Height;
- pictureBox1.Image = (Bitmap)image.Clone();
- }
复制代码 结果展示
完备源码
C#+Yolov8+onnxnet6.0目标检测推理资源-CSDN文库
|