C# OpenCvSharp Yolov8 Pose 姿态识别

这篇具有很好参考价值的文章主要介绍了C# OpenCvSharp Yolov8 Pose 姿态识别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

效果

项目

模型信息

代码

下载 


效果

C# OpenCvSharp Yolov8 Pose 姿态识别,AI,C#,OpenCV,C#姿态识别,OpenCv 姿态识别

项目

VS2022

.net framework 4.8

OpenCvSharp 4.8

Microsoft.ML.OnnxRuntime 1.16.2

C# OpenCvSharp Yolov8 Pose 姿态识别,AI,C#,OpenCV,C#姿态识别,OpenCv 姿态识别

模型信息

Model Properties
-------------------------
date:2023-09-07T17:11:43.091306
description:Ultralytics YOLOv8n-pose model trained on /usr/src/app/ultralytics/datasets/coco-pose.yaml
author:Ultralytics
kpt_shape:[17, 3]
task:pose
license:AGPL-3.0 https://ultralytics.com/license
version:8.0.172
stride:32
batch:1
imgsz:[640, 640]
names:{0: 'person'}
---------------------------------------------------------------

Inputs
-------------------------
name:images
tensor:Float[1, 3, 640, 640]
---------------------------------------------------------------

Outputs
-------------------------
name:output0
tensor:Float[1, 56, 8400]
---------------------------------------------------------------

代码

//缩放图片
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));

factors[0] = factors[1] = (float)(max_image_length / 640.0);

//数据归一化处理
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);

dt1 = DateTime.Now;
//模型推理,读取推理结果
result_mat = opencv_net.Forward();
dt2 = DateTime.Now;

//将推理结果转为float数据类型
result_mat_to_float = new Mat(8400, 56, MatType.CV_32F, result_mat.Data);

//将数据读取到数组中
result_mat_to_float.GetArray<float>(out result_array);

result = result_pro.process_result(result_array);

result_image = result_pro.draw_result(result, image.Clone());

if (!result_image.Empty())
{
    pictureBox2.Image = new Bitmap(result_image.ToMemoryStream());
    sb.Clear();
    sb.AppendLine("推理耗时:" + (dt2 - dt1).TotalMilliseconds + "ms");
    sb.AppendLine("------------------------------");
    textBox1.Text = sb.ToString();
}
else
{
    textBox1.Text = "无信息";
}

using OpenCvSharp;
using OpenCvSharp.Dnn;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace OpenCvSharp_Yolov8_Demo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string fileFilter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";
        string image_path = "";
        string startupPath;
        string classer_path;

        DateTime dt1 = DateTime.Now;
        DateTime dt2 = DateTime.Now;
        string model_path;
        Mat image;

        PoseResult result_pro;
        Mat result_mat;
        Mat result_image;
        Mat result_mat_to_float;

        Net opencv_net;
        Mat BN_image;

        float[] result_array;
        float[] factors;

        int max_image_length;
        Mat max_image;
        Rect roi;

        Result result;
        StringBuilder sb = new StringBuilder();

        private void Form1_Load(object sender, EventArgs e)
        {
            startupPath = System.Windows.Forms.Application.StartupPath;
            model_path = startupPath + "\\yolov8n-pose.onnx";
            classer_path = startupPath + "\\yolov8-detect-lable.txt";

            //初始化网络类,读取本地模型
            opencv_net = CvDnn.ReadNetFromOnnx(model_path);

            result_array = new float[8400 * 56];
            factors = new float[2];

            result_pro = new PoseResult(factors);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = fileFilter;
            if (ofd.ShowDialog() != DialogResult.OK) return;
            pictureBox1.Image = null;
            image_path = ofd.FileName;
            pictureBox1.Image = new Bitmap(image_path);
            textBox1.Text = "";
            image = new Mat(image_path);
            pictureBox2.Image = null;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (image_path == "")
            {
                return;
            }

            //缩放图片
            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));

            factors[0] = factors[1] = (float)(max_image_length / 640.0);

            //数据归一化处理
            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);

            dt1 = DateTime.Now;
            //模型推理,读取推理结果
            result_mat = opencv_net.Forward();
            dt2 = DateTime.Now;

            //将推理结果转为float数据类型
            result_mat_to_float = new Mat(8400, 56, MatType.CV_32F, result_mat.Data);

            //将数据读取到数组中
            result_mat_to_float.GetArray<float>(out result_array);

            result = result_pro.process_result(result_array);

            result_image = result_pro.draw_result(result, image.Clone());

            if (!result_image.Empty())
            {
                pictureBox2.Image = new Bitmap(result_image.ToMemoryStream());
                sb.Clear();
                sb.AppendLine("推理耗时:" + (dt2 - dt1).TotalMilliseconds + "ms");
                sb.AppendLine("------------------------------");
                textBox1.Text = sb.ToString();
            }
            else
            {
                textBox1.Text = "无信息";
            }

        }
    }
}

下载 

Demo下载文章来源地址https://www.toymoban.com/news/detail-727887.html

到了这里,关于C# OpenCvSharp Yolov8 Pose 姿态识别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV与AI深度学习 | 实战 | YOLOv8自定义数据集训练实现手势识别 (标注+训练+预测 保姆级教程)

    本文来源公众号 “OpenCV与AI深度学习” ,仅用于学术分享,侵权删,干货满满。 原文链接:实战 | YOLOv8自定义数据集训练实现手势识别 (标注+训练+预测 保姆级教程)     本文将手把手教你用YoloV8训练自己的数据集并实现手势识别。 【1】安装torch, torchvision对应版本,这里先

    2024年04月23日
    浏览(87)
  • YOLOv7姿态估计pose estimation(姿态估计-目标检测-跟踪)

    YOLOv7姿态估计(pose estimation)是一种基于YOLOv7算法的姿态估计方法。该算法使用深度学习技术,通过分析图像中的人体关键点位置,实现对人体姿态的准确估计。 姿态估计是计算机视觉领域的重要任务,它可以识别人体的关节位置和姿势,从而为人体行为分析、动作识别、运

    2024年01月18日
    浏览(47)
  • [C#]OpenCvSharp结合yolov8-face实现L2CS-Net眼睛注视方向估计或者人脸朝向估计

    github地址:https://github.com/Ahmednull/L2CS-Net L2CS-Net介绍: 眼睛注视(eye gaze) 是在各种应用中使用的基本线索之一。 它表示用户在人机交互和开放对话系统中的参与程度。此外,它还被用于增强现实,用于预测用户的注意力,从而提高设备的感知能力,降低功耗。 因此,研究人

    2024年01月16日
    浏览(40)
  • C# Onnx Yolov8 Fire Detect 火焰识别,火灾检测

    目录 效果 ​模型信息 项目 ​代码 下载  Model Properties ------------------------- author:Ultralytics task:detect license:AGPL-3.0 https://ultralytics.com/license version:8.0.172 stride:32 batch:1 imgsz:[640, 640] names:{0: \\\'Fire\\\'} --------------------------------------------------------------- Inputs -------------------------

    2024年02月07日
    浏览(49)
  • yolov8-pose:在yolov8上添加人体关键点检测

        最近因为工作关系接触了yolo-pose,1月份yolov8也出来了,就想着能不能在yolov8上也加上pose分支,也算加深对网络的认识。     yolov8在数据处理上也考虑了keypoints的,所以数据处理部分不用太多的修改,主要修改了Detect类、Loss类。     Detect类:__init__方法中加入nkpt以及c

    2024年02月11日
    浏览(45)
  • YOLOv8 全家桶再迎新成员!新增Pose Estimation模型!

    关注公众号,发现CV技术之美 不知不觉间,YOLOv8已经发布三个月了,等待中的YOLOv8论文没来,昨天官方默默又加了新模型:姿态估计。 说好的\\\"目标检测\\\"工业界标杆,正向着“CV全家桶”阔步向前。 现在你可以用YOLOv8做 目标检测、实例分割、图像分类、目标跟踪、姿态估计

    2024年02月03日
    浏览(40)
  • YOLOv8+PyQt+OpenCV实现数字式仪表读数和指针式仪表读数识别(一)

    最近放假看到YOLOv8一直在更新,想着在家无聊把本科毕设重新做了下,之前用的是YOLOv5,下载了YOLOv8最新版把项目迁移了过来,相比于v5来说YOLOv8变化还是挺大的,功能更加集成了,话不多说,直接上 结果图片和最后的检测视频 。 数字式仪表识别效果 指针式仪表识别效果

    2024年02月19日
    浏览(37)
  • YOLOv8+PyQt+OpenCV实现数字式仪表读数和指针式仪表读数识别(二)

    章(一)内容为不同种类仪表识别和数字式仪表读数识别,这一章介绍 两种指针式仪表读数识别方法 ,一种为 非360度指针式仪表 ,一种为 360度指针式仪表 。效果如下所示。 指针式仪表识别效果 360度指针式仪表识别效果  数字式仪表识别效果 数字式仪表和指针式仪表检测视

    2024年03月18日
    浏览(93)
  • 以yolov8-pose为案例学习如何写deepstream的回调函数

    在给定的代码中,使用了以下几个元素来构建 DeepStream 管道: source :这个元素是用于从文件中读取视频流的输入源。它可以是任何 GStreamer 支持的视频输入源,如文件、摄像头、网络流等。 streammux :这个元素是流复用器,用于将多个流合并成一个流,并将多帧画面打包为批

    2024年02月13日
    浏览(38)
  • yolov8+多算法多目标追踪+实例分割+目标检测+姿态估计

    YOLOv8是一种先进的目标检测算法,结合多种算法实现多目标追踪、实例分割和姿态估计功能。该算法在计算机视觉领域具有广泛的应用。 首先,YOLOv8算法采用了You Only Look Once(YOLO)的思想,通过单次前向传递将目标检测问题转化为回归问题。它使用了深度卷积神经网络,能

    2024年02月20日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包