当前位置: 首页 > news >正文

Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现动物分类(C#源码,UI界面版)

在这里插入图片描述

Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现动物分类(C#源码,UI界面版))

  • 工业相机使用YoloV8模型实现动物分类
  • 工业相机实现YoloV8模型实现动物分类的技术背景
  • 在相机SDK中获取图像转换图像的代码分析
    • 工业相机图像转换Bitmap图像格式和Mat图像重要核心代码
    • 本地文件图像转换Bitmap图像格式和Mat图像重要核心代码
    • Mat图像导入YoloV8模型重要核心代码
    • 代码实现演示(实现动物分类)
  • 源码下载链接
  • 工业相机通过YoloV8模型实现动物分类的行业应用

工业相机使用YoloV8模型实现动物分类

本项目集成了 YOLOv8 表情检测模型 与 C#图形界面工具,实现了包括图片、文件夹、视频与摄像头等多种输入方式的动物分类功能。

工业相机RAW文件是一种记录了工业相机传感器的原始信息,同时记录了由相机拍摄所产生的一些原数据(Metadata,如ISO的设置、快门速度、光圈值、白平衡等)的文件。RAW是未经处理、也未经压缩的格式,可以把RAW概念化为“原始图像编码数据”。

工业相机Bitmap图像是一种无损的图像格式,它将图像存储为像素阵列,并可包含调色板信息。这种格式通常用于工业应用中,因为它能够保留图像的细节和质量,并且易于处理和分析。

本文以Baumer工业相机作为案例进行演示,实现将工业相机的图像或者本地图像导入Yolo模型从而实现动物分类等功能。

工业相机实现YoloV8模型实现动物分类的技术背景

本文通过C#中实现一个简单的UI界面,用于将YoloV8模型实现动物分类

用户可以通过该界面执行以下操作:

  1. 转换相机图像为Mat图像:通过YoloV8模型实现人物识别

  2. 转换本地图像为mat图像:通过YoloV8模型实现人物识别

通过这个UI界面,用户能够在实时应用机器视觉数据处理时快速有效地进行操作,无需深入了解图像数据的底层处理过程。这个简单的介绍旨在为开发人员提供一个明确的方向,以便开始构建此类应用程序,并且该程序主要用于演示目的。

在相机SDK中获取图像转换图像的代码分析

本文介绍使用Baumer工业相机,实现将图像转换为Bitmap图像,再转换Mat图像,导入到Yolo模型进行推理,输出人物识别的结果。

工业相机图像转换Bitmap图像格式和Mat图像重要核心代码

//将相机内部图像内存数据转为bitmap数据
System.Drawing.Bitmap bitmap  = new System.Drawing.Bitmap((int)mBufferFilled.Width, (int)mBufferFilled.Height,(int)mBufferFilled.Width,System.Drawing.Imaging.PixelFormat.Format8bppIndexed, (IntPtr)((ulong)mBufferFilled.MemPtr + mBufferFilled.ImageOffset));#region//Mono图像数据转换。彩色图像数据转换于此不同
System.Drawing.Imaging.ColorPalette palette = bitmap.Palette;
int nColors = 256;
for (int ix = 0; ix < nColors; ix++)
{uint Alpha = 0xFF;uint Intensity = (uint)(ix * 0xFF / (nColors - 1));palette.Entries[ix] = System.Drawing.Color.FromArgb((int)Alpha, (int)Intensity,(int)Intensity, (int)Intensity);
}
bitmap.Palette = palette;
#endregionstring strtime = DateTime.Now.ToString("yyyyMMddhhmmssfff");
string saveimagepath = pImgFileDir + "\\" + strtime + ".brw";//使用Bitmap格式保存         
bitmap.Save(saveimagepath, System.Drawing.Imaging.ImageFormat.Bmp);  //用bitmap转换为mat
OpenCvSharp.Mat Matgray1 = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap);

本地文件图像转换Bitmap图像格式和Mat图像重要核心代码

C#环境下代码如下所示:

if (imagePaths.Count() == 0)
{LoadImagePaths("test_img");
}string currentImagePath = imagePaths[currentImageIndex];// 显示到pictureBoxA
pictureBoxA.Image.Dispose(); // 释放上一张图片资源,避免内存泄漏
pictureBoxA.Image = new Bitmap(currentImagePath);
image_path = currentImagePath;currentImageIndex = (currentImageIndex + 1) % imagePaths.Count;OnNotifyShowRecieveMsg("检测中,请稍等……");
//textBox1.Text = "检测中,请稍等……";
//pictureBox2.Image = null;
Application.DoEvents();image = new Mat(image_path);float ratio = Math.Min(1.0f * inpHeight / image.Rows, 1.0f * inpWidth / image.Cols);
int neww = (int)(image.Cols * ratio);
int newh = (int)(image.Rows * ratio);Mat dstimg = new Mat();
Cv2.Resize(image, dstimg, new OpenCvSharp.Size(neww, newh));Cv2.CopyMakeBorder(dstimg, dstimg, 0, inpHeight - newh, 0, inpWidth - neww, BorderTypes.Constant);

Mat图像导入YoloV8模型重要核心代码

C#环境下代码如下所示:


if(ym.names == null)ym.LoadWeights(Application.StartupPath + "\\model\\yolov8l-cls.onnx", Application.StartupPath + "\\model\\labels.txt");if (imagePaths.Count() == 0)
{LoadImagePaths("test_img");
}string currentImagePath = imagePaths[currentImageIndex];// src = Cv2.ImRead("./test_img/cls_3.jpg");
//pictureBoxA.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(src);// 显示到pictureBoxA
pictureBoxA.Image.Dispose(); // 释放上一张图片资源,避免内存泄漏
pictureBoxA.Image = new Bitmap(currentImagePath);
image_path = currentImagePath;if (pictureBoxA.Image == null)
{return;
}
currentImageIndex = (currentImageIndex + 1) % imagePaths.Count;OnNotifyShowRecieveMsg("检测中,请稍等……");image = new Mat(image_path);//// 获取当前时间开始计时
dt1 = DateTime.Now;
Stopwatch sw = new Stopwatch();
sw.Start();
var result = ym.Inference(image);
sw.Stop();
this.Text = "耗时" + sw.Elapsed.TotalSeconds + "秒";var resultMat = ym.DrawImage(image, result);
//// 获取计算结束时间
dt2 = DateTime.Now;OnNotifyShowRecieveMsg("推理结果:" + result.Key);// 显示推理耗时时间
OnNotifyShowRecieveMsg("推理耗时:" + (dt2 - dt1).TotalMilliseconds + "ms");
//pictureBoxA.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(resultMat); //Mat转Bitmap
pictureBoxA.Image = new Bitmap(resultMat.ToMemoryStream());
public KeyValuePair<string, float> Inference(Mat image)
{//缩放图片max_image_length = image.Cols > image.Rows ? image.Cols : image.Rows;max_image = Mat.Zeros(new OpenCvSharp.Size(max_image_length, max_image_length), MatType.CV_8UC3);roi = new Rect(0, 0, image.Cols, image.Rows);image.CopyTo(new Mat(max_image, roi));//数据归一化处理BN_image = CvDnn.BlobFromImage(max_image, 1 / 255.0, new OpenCvSharp.Size(640, 640), new Scalar(0, 0, 0), true, false);//配置图片输入数据opencv_net.SetInput(BN_image);//模型推理,读取推理结果result_mat = opencv_net.Forward();//将推理结果转为float数据类型result_mat_to_float = new Mat(1, 1000, MatType.CV_32F, result_mat.Data);//将数据读取到数组中result_mat_to_float.GetArray<float>(out result_array);result_cls = result_pro.process_result(result_array);return result_cls;}在这里插入代码片

代码实现演示(实现动物分类)

在这里插入图片描述

源码下载链接

C# WinForms工业相机+本地图像 通过YoloV8模型实现动物分类 源码

工业相机通过YoloV8模型实现动物分类的行业应用

#行业场景主要识别对象工业相机配置YOLOv8 部署形态 & 价值
1奶牛/肉牛智慧牧场奶牛、犊牛、公牛、病牛4K 全局快门相机 + 红外补光Jetson Orin Nano 边缘盒,YOLOv8n-cls 剪枝到 2.6 MB,实时 50 FPS;自动计数、发情监测、疾病预警
2生猪养殖仔猪、育肥猪、母猪、公猪球机 30× 变焦 + 防氨气护罩相机 → x86 IPC + RTX A2000,YOLOv8s 多类别分类,料肉比降低 8 %
3海洋牧场/网箱养殖大黄鱼、鲈鱼、鲑鱼、杂鱼水下 1080p 工业相机 + 环形 LED树莓派 CM4 + Coral TPU,YOLOv8n 量化模型 120 ms/帧;鱼群密度、生长曲线自动统计
4家禽(鸡/鸭/鹅)笼养成鸡、雏鸡、公鸡、母鸡顶装 6 mm 镜头 120 fps 相机每列笼顶 1 台相机,YOLOv8 分类 + DeepSort 跟踪,死淘率降低 30 %
5野生动物保护老虎、豹、羚羊、野猪野外 4G 球机 + 太阳能供电边缘 AI 盒子(RK3588),YOLOv8m 夜间红外模式,识别率 92 %,数据回传云平台
6赛马/竞技动物马匹个体 ID、姿态2 k 高速相机(500 fps)相机 → FPGA 预处理 → GPU 服务器,YOLOv8 + 关键点模型,步态分析、伤病预警
7食品加工厂(活禽接收)活鸡、死鸡、残次鸡IP67 彩色线阵相机传送带上方 1 台相机,YOLOv8-cls 在线分选,替代 3 名人工质检员
8动物园/水族馆客流分析企鹅、海豚、熊猫、游客全景 8 K 相机 + 枪机联动服务器级 GPU,YOLOv8 同时识别动物和游客,生成热点区域热力图,用于场馆优化
http://www.dtcms.com/a/287588.html

相关文章:

  • Python 常见库分类介绍及安装方法
  • 数据库第四次作业
  • 爬虫小知识三:selenium库
  • ElasticSearch:商品SKU+SPU实现join查询,设计及优化
  • 基于Eureka和restTemple的负载均衡
  • gitlab私有化部署
  • 月舟科技近调记录
  • Kotlin内联函数
  • 访问 gitlab 跳转 0.0.0.0
  • Kotlin泛型约束
  • QGIS新手教程10:专题图制作与图层渲染技巧全攻略(含分类与渐变)
  • 【通识】PCB文件
  • Elastic Search 8.x 分片和常见性能优化
  • IntelliJ IDEA中Mybatis的xml文件报错解决
  • 在Tailwind Css中如何书写flex布局
  • Linux C 信号操作
  • MCP 协议详细分析一 initialize ping tools/list tools/call
  • 13.5 Meta LLaMA 2核心技术拆解:4T数据训练+30%显存优化,70B模型准确率82.6%
  • Android Auto 即将推出新功能
  • LeetCode|Day19|14. 最长公共前缀|Python刷题笔记
  • Java无服务架构新范式:Spring Native与AWS Lambda冷启动深度优化
  • KVM中使用桥接模式.运维就业技术教程
  • NLP中情感分析与观念分析、价值判断、意图识别的区别与联系,以及四者在实际应用中的协同
  • 枚举类高级用法
  • 实验-链路聚合
  • Java多线程基础详解:从实现到线程安全
  • 面向运维智能的可扩展多智能体AI系统设计
  • Node.js:EventEmitter、Buffer
  • Nestjs框架: RxJS 核心方法实践与错误处理详解
  • 数据结构:字符串(Strings)