C# Onnx Yolov5 水果识别,人员识别,物品识别 人工智能

目录

先上效果

来电废话,但实用

网络成功案例实践易失败的原因

万物检测涉及技术

 下载合集

关键代码

全部代码

实操vs2022安装关键

YOLO V5核心库编译

编写自己识别软件

更新相关依赖

标注字库文件

测试效果

名词解释YOLO

名词解释ONNX

源码

直播教学和作者


先上效果

来电废话,但实用

为何照做网络成功案例仍失败?软件与男女关系的启示 

在网络上看到的成功案例,往往只是呈现了表面的步骤和结果,而忽略了背后诸多复杂的细节和潜在的问题。
就像您提到的软件相关的情况,看似简单的操作,实际上涉及众多组件,版本的不匹配就如同齿轮无法精准咬合,导致整个系统无法顺畅运转。无法下载所需组件更是直接阻断了操作的进行,而系统对某些版本的不兼容,以及某些版本资源的稀缺,都使得我们难以完全复刻所谓的成功。
再以男女关系为例,两个优秀的个体并不意味着就能组成完美的组合。就如同不同规格的零件,尽管各自品质上乘,但如果规格不匹配,强行组合在一起,不仅无法发挥优势,还可能产生冲突和矛盾

网络成功案例实践易失败的原因

A.软件组件复杂
   看似简单,实则涉及众多组件。各个版本不匹配,影响正常使用。
B.组件下载受限
     部分组件无法下载。
C系统与版本不兼容
  某些系统无法安装特定版本。部分版本已无法获取。

万物检测涉及技术

序号软件和技术版本说明
1visual studio2022 社区版安装单个必须勾选net5.0
2Microsoft.ML.Onnx.1.16.2

Microsoft.ML.OnnxRuntime.dll

onnxruntime.dll

3OpenCvSharp4.8安装方式nuget,或者库文件
4

SixLabors.Fonts

SixLabors.ImageSharp.Drawing

SixLabors.ImageSharp

1.1

1.0

2.18

5net 架构net5.0net4.7,net4.5,net 4.8 都不行
6yolov5n6.onnx模型文件源码自带
7yolov5
8 labelimg1.8labelimg是一款开源的图像标注工具,标签可用于分类和目标检测,它是用python写的

 下载合集

1.yovo v5

人工智能神经/yolov5-net

2. visual studio 2022下载

Visual Studio 2022 IDE - 适用于软件开发人员的编程工具

3. onnx C#

https://github.com/microsoft/onnxruntime/releases

5. labelimg 下载

未来之窗新零售app应用市场

进入搜索下载

关键代码

  private void button2_Click(object sender, EventArgs e)
  {
      文识别到数量 = 0;
      listBox1.Items.Clear();
      string 原始路径 = 文件列表[文件序号];
      string 目标路径 = Application.StartupPath + "/result未来之窗/" + System.IO.Path.GetFileName(原始路径) + "_airet" + System.IO.Path.GetExtension(原始路径); ;


      //  var image =   SixLabors.ImageSharp.Image.LoadAsync<Rgba32>(原始路径);
      //SixLabors.ImageSharp.Image
      SixLabors.ImageSharp.Image<Rgba32> 未来之窗img = SixLabors.ImageSharp.Image.Load<Rgba32>(原始路径);

      var scorer = new YoloScorer<YoloCocoP5Model>("Assets/Weights/yolov5n.onnx");

      //   var predictions = scorer.Predict(image);
      var predictions = scorer.Predict(未来之窗img);

      var font = new SixLabors.Fonts.Font(new SixLabors.Fonts.FontCollection().Add("C:/Windows/Fonts/consola.ttf"), 16);

      foreach (var prediction in predictions) // draw predictions
      {
          var score = Math.Round(prediction.Score, 2);

          var (x, y) = (prediction.Rectangle.Left - 3, prediction.Rectangle.Top - 23);

          // image.Mutate(a => a.DrawPolygon(new SixLabors.ImageSharp.Drawing.Processing.Pen(prediction.Label.Color, 1),
          //  未来之窗img.Mutate(a => a.DrawPolygon(new SixLabors.ImageSharp.Drawing.Processing.Pen(prediction.Label.Color, 1),

          //           new SixLabors.ImageSharp.PointF(prediction.Rectangle.Left, prediction.Rectangle.Top),
          //       new SixLabors.ImageSharp.PointF(prediction.Rectangle.Right, prediction.Rectangle.Top),
          //     new SixLabors.ImageSharp.PointF(prediction.Rectangle.Right, prediction.Rectangle.Bottom),
          //     new SixLabors.ImageSharp.PointF(prediction.Rectangle.Left, prediction.Rectangle.Bottom)
          //  ));

          //  未来之窗img.Mutate(a => a.DrawText($"{prediction.Label.Name} ({score})",
          //     font, prediction.Label.Color, new SixLabors.ImageSharp.PointF(x, y)));

          PointF[] 未来之窗point = new PointF[4];
          未来之窗point[0] = new PointF(prediction.Rectangle.Left, prediction.Rectangle.Top);
          未来之窗point[1] = new PointF(prediction.Rectangle.Right, prediction.Rectangle.Top);
          未来之窗point[2] = new PointF(prediction.Rectangle.Right, prediction.Rectangle.Bottom);
          未来之窗point[3] = new PointF(prediction.Rectangle.Left, prediction.Rectangle.Bottom);

          未来之窗img.Mutate(a => a.DrawPolygon(new Pen(prediction.Label.Color, 2), 未来之窗point)


              );

          未来之窗img.Mutate(a => a.DrawText($"{prediction.Label.Name} ({score})",
                font, prediction.Label.Color, new SixLabors.ImageSharp.PointF(x, y)));

          文识别到数量 = 文识别到数量 + 1;

          listBox1.Items.Add(文识别到数量+":" + prediction.Label.Name);
          lab_识别结果.Text = 文识别到数量 + "个";

      }

      // await image.SaveAsync("Assets/result.jpg");

      //image.SaveAsync(目标路径);
      未来之窗img.SaveAsync(目标路径);

      pictureBox2.Image = System.Drawing.Image.FromFile(目标路径);
  }

全部代码

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;

using System.IO;

using Microsoft.ML.OnnxRuntime;
using Microsoft.ML.OnnxRuntime.Tensors;
using OpenCvSharp;



using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Drawing;

using SixLabors.Fonts;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Drawing.Processing;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;

using Yolov5Net.Scorer;
using Yolov5Net.Scorer.Models;

namespace WinFormsApp1trytrty
{
    public partial class Form1 : Form
    {
        private string[] 文件列表;
        private int 文件序号 = 0;


        private int 文识别到数量 = 0;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //文件列表
            if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            {
                txt_文件夹路径.Text = folderBrowserDialog1.SelectedPath;


                列举文件(folderBrowserDialog1.SelectedPath);

                未来之窗_人工智能_显示图片();
            }
        }


        private void 未来之窗_人工智能_显示图片()
        {
            if (文件序号 < 文件列表.Length && 文件序号 >= 0)
            {
                pictureBox1.Image = System.Drawing.Image.FromFile(文件列表[文件序号]);
            }

        }

        private void 列举文件(String 路径)
        {

            string fileFormat = "*.jpg";

            // 获取指定格式的文件列表

            // 列举文件
            string[] files = Directory.GetFiles(路径, fileFormat);
            文件列表 = files;

            // 输出文件名称
            foreach (string file in files)
            {
                // Console.WriteLine(file);
                // 获取扩展名
                string extension = System.IO.Path.GetExtension(file);
                // MessageBox.Show(""+ extension);
                if (extension.Equals(".jpg"))
                {
                    //文件列表.
                }

            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            文件序号 = 0;


            列举文件(txt_文件夹路径.Text);

            未来之窗_人工智能_显示图片();
        }

        private void btn_上一个_Click(object sender, EventArgs e)
        {
            if (文件序号 < 文件列表.Length && 文件序号 > 0)
            {
                文件序号 = 文件序号 - 1;
                未来之窗_人工智能_显示图片();
            }
        }

        private void btn_下一个_Click(object sender, EventArgs e)
        {

            if (文件序号 < 文件列表.Length - 1)
            {
                文件序号 = 文件序号 + 1;
                未来之窗_人工智能_显示图片();
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            文识别到数量 = 0;
            listBox1.Items.Clear();
            string 原始路径 = 文件列表[文件序号];
            string 目标路径 = Application.StartupPath + "/result未来之窗/" + System.IO.Path.GetFileName(原始路径) + "_airet" + System.IO.Path.GetExtension(原始路径); ;


            //  var image =   SixLabors.ImageSharp.Image.LoadAsync<Rgba32>(原始路径);
            //SixLabors.ImageSharp.Image
            SixLabors.ImageSharp.Image<Rgba32> 未来之窗img = SixLabors.ImageSharp.Image.Load<Rgba32>(原始路径);

            var scorer = new YoloScorer<YoloCocoP5Model>("Assets/Weights/yolov5n.onnx");

            //   var predictions = scorer.Predict(image);
            var predictions = scorer.Predict(未来之窗img);

            var font = new SixLabors.Fonts.Font(new SixLabors.Fonts.FontCollection().Add("C:/Windows/Fonts/consola.ttf"), 16);

            foreach (var prediction in predictions) // draw predictions
            {
                var score = Math.Round(prediction.Score, 2);

                var (x, y) = (prediction.Rectangle.Left - 3, prediction.Rectangle.Top - 23);

                // image.Mutate(a => a.DrawPolygon(new SixLabors.ImageSharp.Drawing.Processing.Pen(prediction.Label.Color, 1),
                //  未来之窗img.Mutate(a => a.DrawPolygon(new SixLabors.ImageSharp.Drawing.Processing.Pen(prediction.Label.Color, 1),

                //           new SixLabors.ImageSharp.PointF(prediction.Rectangle.Left, prediction.Rectangle.Top),
                //       new SixLabors.ImageSharp.PointF(prediction.Rectangle.Right, prediction.Rectangle.Top),
                //     new SixLabors.ImageSharp.PointF(prediction.Rectangle.Right, prediction.Rectangle.Bottom),
                //     new SixLabors.ImageSharp.PointF(prediction.Rectangle.Left, prediction.Rectangle.Bottom)
                //  ));

                //  未来之窗img.Mutate(a => a.DrawText($"{prediction.Label.Name} ({score})",
                //     font, prediction.Label.Color, new SixLabors.ImageSharp.PointF(x, y)));

                PointF[] 未来之窗point = new PointF[4];
                未来之窗point[0] = new PointF(prediction.Rectangle.Left, prediction.Rectangle.Top);
                未来之窗point[1] = new PointF(prediction.Rectangle.Right, prediction.Rectangle.Top);
                未来之窗point[2] = new PointF(prediction.Rectangle.Right, prediction.Rectangle.Bottom);
                未来之窗point[3] = new PointF(prediction.Rectangle.Left, prediction.Rectangle.Bottom);

                未来之窗img.Mutate(a => a.DrawPolygon(new Pen(prediction.Label.Color, 2), 未来之窗point)


                    );

                未来之窗img.Mutate(a => a.DrawText($"{prediction.Label.Name} ({score})",
                      font, prediction.Label.Color, new SixLabors.ImageSharp.PointF(x, y)));

                文识别到数量 = 文识别到数量 + 1;

                listBox1.Items.Add(文识别到数量+":" + prediction.Label.Name);
                lab_识别结果.Text = 文识别到数量 + "个";

            }

            // await image.SaveAsync("Assets/result.jpg");

            //image.SaveAsync(目标路径);
            未来之窗img.SaveAsync(目标路径);

            pictureBox2.Image = System.Drawing.Image.FromFile(目标路径);
        }
    }
}

实操vs2022安装关键

YOLO V5核心库编译

从未来之窗下载后,直接打开工程文件,编译,会生成

编写自己识别软件

新建net5.0 软件

复制未来之窗代码到对应按钮

更新相关依赖

依赖:OpenCvSharp4.4.8

Microsoft.ML.OnnxRuntime.1.16.2

SixLabors.ImageSharp.2.1.8

SixLabors.ImageSharp.Drawing.1.0.0

SixLabors.Fonts.1.0.0

标注字库文件

consola.ttf 自己网上搜索

至此全部搞完

测试效果

水果识别

人员识别

名词解释YOLO

YOLO(You Only Look Once)是一种基于单个神经网络的目标检测系统,由 Joseph Redmon 和 Ali Farhadi 等人于 2015 年提出。YOLO 算法将目标检测任务转化为一个回归问题,直接在整个图像上使用一个卷积神经网络来预测边界框和类别概率。

YOLO 算法的主要步骤包括:

  1. 图像分割:将输入图片分割成 S×S 网格。
  2. 网格处理:每个单元格预测 B 个边界框以及边界框的置信度,同时预测 C 个类别概率值。
  3. 非极大值抑制:使用非极大值抑制算法去除冗余的边界框,得到最终的检测结果。

YOLO 算法具有速度快、能够捕捉目标的全局信息、减少背景误检等优点。但它也存在一些局限性,例如对于小目标或密集目标的检测效果可能较差。

YOLO 算法有多个版本,如 YOLOv1、YOLOv2、YOLOv3、YOLOv4 和 YOLOv5 等。每个版本都在性能、准确性和速度等方面进行了改进和优化。

在实际应用中,YOLO 算法被广泛用于自动驾驶、智能监控、人脸识别等领域。它为计算机视觉任务提供了一种高效、准确的解决方案。

名词解释ONNX

ONNX 的主要目的是实现不同深度学习框架之间的模型互操作性。这意味着,使用一种框架(如 TensorFlow、PyTorch 等)训练的模型,可以轻松转换为 ONNX 格式,并在支持 ONNX 的其他框架或工具中进行部署和推理。

以下是 ONNX 技术的一些关键特点和优势:

  1. 框架互操作性:方便模型在不同框架之间迁移,减少重复开发工作。
  2. 优化和加速:一些推理引擎和硬件平台针对 ONNX 格式进行了优化,能够提高模型的推理速度。
  3. 便于部署:简化了将模型部署到生产环境的过程,尤其是在需要跨多种硬件和软件环境的情况下。

源码

全部源码已经放本文章,如果需要下载直接使用

联系微信 cybersnow

淘宝链接

首页-未来之窗软件服务-淘宝网

开发接单

直播教学和作者

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/736062.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Java的火车订票管理系统【附源码】

火车订票管理登录 摘要&#xff1a;随着我国铁路交通的不断发展&#xff0c;简单的窗口售票模式已经不能满足方便人们出行的目的。采用先进的网络技术开发出方便快捷的火车票订票系统是现代客运业务发展的必然需求。本次设计的火车票订票系统通过访问主页&#xff0c;可以实现…

Linux PXE高效批量装机

部署PXE远程安装服务 在大规模的 Linux 应用环境中&#xff0c;如 Web 群集、分布式计算等&#xff0c;服务器往往并不配备光驱设备&#xff0c;在这种情况下&#xff0c;如何为数十乃至上百台服务器裸机快速安装系统呢?传统的USB光驱、移动硬盘等安装方法显然已经难以满足需…

VC++支持断点续下或续传的功能

VC使用多线程和Socket实现断点续下 一、断点续下的基本原理&#xff1a; 1.断点续传的理解可以分为两部分&#xff1a;一部分是断点&#xff0c;一部分是续传。断点的由来是在下载过程中&#xff0c;将一个下载文件分成了多个部分&#xff0c;同时进行多个部分一起的下载&…

Python武器库开发-武器库篇之ThinkPHP 5.0.23-RCE 漏洞复现(六十四)

Python武器库开发-武器库篇之ThinkPHP 5.0.23-RCE 漏洞复现&#xff08;六十四&#xff09; 漏洞环境搭建 这里我们使用Kali虚拟机安装docker并搭建vulhub靶场来进行ThinkPHP漏洞环境的安装&#xff0c;我们进入 ThinkPHP漏洞环境&#xff0c;可以 cd ThinkPHP&#xff0c;然…

每日一题——Python代码实现PAT乙级1048 数字加密(举一反三+思想解读+逐步优化)五千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 初次尝试 再次尝试 代码点评 代码结构 时间复杂度 空间复杂度 优化建议 我要更强…

【Linux】IP协议、以太网帧格式

目录 网络层IP协议协议头格式网段划分分类划分法特殊的 IP 地址IP 地址的数量限制私有 IP 地址和公有 IP 地址路由路由表生成算法 数据链路层以太网以太网帧格式认识 MAC 地址ARP协议ARP数据报格式 ARP 协议的工作流程ARP欺骗 DNShosts 文件域名的层级关系域名服务器分类域名解…

day3-xss漏洞(米斯特web渗透测试)

day3-xss漏洞&#xff08;米斯特web渗透测试&#xff09; XSSXss种类三种反射型1.反射型xss2.存储型xss3.DOM型xss XSS Xss有一部分是前端的有一部分不是前端的&#xff0c;我们来看一下&#xff0c;昨天的HTML注入修复方法应灵活使用。 HTML注入是注入一段HTML&#xff0c;那…

mysql中in参数过多该如何优化

优化方式概述 未优化前 SELECT * FROM rb_product rb where sku in(1022044,1009786)方案2示例 public static void main(String[] args) {//往list里面设置3000个值List<String> list new ArrayList<>();for (int i 0; i < 3000; i) {list.add(""…

8.DELL R730服务器对RAID5进行扩容

如果服务器的空间不足了&#xff0c;如何进行扩容&#xff1f;我基本上按照如何重新配置虚拟磁盘或添加其他硬盘来进行操作。我的机器上已经有三块硬盘了&#xff0c;组了Raid5&#xff0c;现在再添加一块硬盘。 先把要添加的硬盘插入服务器&#xff0c;无论是在IDRAC还是管理…

Phi-3 模型手机部署教程(微软发布的可与GPT-3.5媲美的小模型)

前面几篇博文&#xff0c;老牛同学和大家一起在个人电脑部署了Qwen2、GLM4、Llama3、ChatTTS和Stable Diffusion等 LLM 大模型&#xff0c;也通过 API 和 WebUI 的方式完成了体验。 但是这些大模型因为部署在个人电脑本地&#xff0c;不能够随时携带。如果能在手机上部署大模型…

python判断语句

目录 布尔类型和比较运算符if语句的基本格式if else 语句if elif else 语句判断语句的嵌套 布尔类型和比较运算符 1、布尔类型 bool布尔类型只有两个结果&#xff1a;真或假 布尔类型的字面量&#xff1a; True 表示真&#xff08;是、肯定&#xff09; False 表示假&#x…

Python+Pytest+Yaml+Request+Allure框架源代码之(一)common公共方法封装

common模块&#xff1a; get_path.py&#xff1a;获取路径方法 # -*- coding: UTF-8 -*- import os# 项目根目录 BASE_DIR os.path.dirname(os.path.dirname(os.path.abspath(__file__)))# 配置文件目录 CONFIG_DIR os.path.join(BASE_DIR,config)# 测试用例文件目录 TESTCA…

【数据结构导论】自考笔试题:伪代码练习题汇总 1

目录 一、开源项目推荐 二、线性表的基本运算在单链表上的实现 &#xff08;1&#xff09;初始化 &#xff08;2&#xff09;插入 p 指向的新结点的操作 &#xff08;3&#xff09;删除 *p 节点 三、循环链表 &#xff08;1&#xff09;在单链表中 &#xff08;2&…

双指针问题2

文章目录 1. 有效三角形的个数&#xff08;611&#xff09;2. 查找总价格为目标值的两个商品&#xff08;LCR179&#xff09;3. 三数之和&#xff08;15&#xff09;4. 四数之和&#xff08;18&#xff09; 1. 有效三角形的个数&#xff08;611&#xff09; 题目描述&#xff…

Stable Diffusion初体验——基于机器学习通过神经网络的强大AI平台

文章目录 前言最新热门活动&#xff01;&#xff01;平台介绍 一.创建应用 Stable Diffusion WebUI初始化上传模型&#xff0c;VAE&#xff0c;lora 介绍sd模型&#xff0c;vae&#xff0c;lora模型进入应用文生图工作区调参区图生图 结语小程序活动——6.20火热上线&#x1f5…

消息队列MQ相关面试题

消息队列MQ相关面试题 1 RabbitMQ 1.1 你们项目中哪里用到了RabbitMQ ? 难易程度&#xff1a;☆☆☆ 出现频率&#xff1a;☆☆☆☆ 我们项目中很多地方都使用了RabbitMQ , RabbitMQ 是我们项目中服务通信的主要方式之一 , 我们项目中服务通信主要有二种方式实现 : 通过Fei…

阿里云服务器618没想到这么便宜,买早了!

2年前&#xff0c;我买了个服务器&#xff0c;租用服务器&#xff08;ECS5&#xff09;和网络宽带&#xff08;1M&#xff09;&#xff0c;可以说是非常非常低的配置了。 当时5年的折扣力度最大&#xff0c;但是打完折后&#xff0c;价格依然要近3000多元。 最近看到阿里云618活…

LVGL8.3动画图像(太空人)

LVGL8.3 动画图像 1. 动画图像本质 我们知道电影属于视频&#xff0c;而电影的本质是将一系列动作的静态图像进行快速切换而呈现出动画的形式&#xff0c;也就是说动画本质是一系列照片。所以 lvgl 依照这样的思想而定义了动画图像&#xff0c;所以在 lvgl 中动画图像类似于普…

element-plus 表单组件 之element-form

elment-plus的表单组件的标签有el-form,el-form-item。 单个el-form标签内包裹若干个el-form-item,el-form-item包裹具体的表单组件&#xff0c;如输入框组件&#xff0c;多选组件&#xff0c;日期组件等。 el-form组件的主要作用是&#xff1a;提供统一的布局给其他表单组件&…

setInterval 定时任务执行时间不准验证

一般在处理定时任务的时候都使用setInterval间隔定时调用任务。 setInterval(() > {console.log("interval"); }, 2 * 1000);我们定义的是两秒执行一次&#xff0c;但是浏览器实际执行的间隔时间只多不少。这是由于浏览器执行 JS 是单线程模式&#xff0c;使用se…