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

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

工业相机使用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图像重要核心代码

csharp 复制代码
//将相机内部图像内存数据转为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;
#endregion

string 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#环境下代码如下所示:

csharp 复制代码
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#环境下代码如下所示:

csharp 复制代码
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());
csharp 复制代码
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 同时识别动物和游客,生成热点区域热力图,用于场馆优化
相关推荐
超龄超能程序猿4 分钟前
Word 文档合并利器:基于 org.docx4j 的 Java 实现全解析
java·spring·spring cloud·c#·word·maven
吕永强11 分钟前
计算机视觉:AI 的 “眼睛” 如何看懂世界?
人工智能·科普
leafpipi19 分钟前
【机器学习】安装Jupyter及基本操作
人工智能·机器学习·jupyter
伊织code43 分钟前
OpenCV 官翻5 - 机器学习
人工智能·opencv·机器学习·聚类·svm·knn·k-means
黑巧克力可减脂1 小时前
大语言模型:高考志愿填报的“新纪元智能参谋”
人工智能·语言模型·高考
一起搞IT吧1 小时前
Camera相机人脸识别系列专题分析之十七:人脸特征检测FFD算法之libhci_face_camera_api.so 296点位人脸识别检测流程详解
android·图像处理·人工智能·数码相机·算法·计算机视觉
算法_小学生1 小时前
Huber Loss(胡贝损失)详解:稳健回归的秘密武器 + Python实现
人工智能·python·深度学习·机器学习
深度学习实战训练营1 小时前
基于LSTM的时间序列到时间序列的回归模拟
人工智能·回归·lstm
WoShop商城源码2 小时前
短视频矩阵系统:选择与开发的全方位指南
大数据·人工智能·其他·矩阵
LGGGGGQ3 小时前
嵌入式学习-PyTorch(6)-day23
人工智能·pytorch·学习