C#使用纯OpenCvSharp部署yolov8-pose姿态识别

【源码地址】 

github地址:https://github.com/ultralytics/ultralytics

【算法介绍】

Yolov8-Pose算法是一种基于深度神经网络的目标检测算法,用于对人体姿势进行准确检测。该算法在Yolov8的基础上引入了姿势估计模块,通过联合检测和姿势估计的方式来实现准确的姿势检测。

Yolov8-Pose算法的基本思想是将姿势检测任务转化为多个关键点的检测任务。人体姿势可以看作是由多个关键点组成的,例如头部、肩膀、手肘、手腕等。Yolov8-Pose算法通过在Yolov8的基础上增加额外的关键点检测层,来实现对这些关键点的检测和定位。

Yolov8-Pose算法的网络结构是在Yolov3的基础上进行改进和优化得到的。它采用了Darknet作为主干网络,并在其上添加了一系列的卷积层、上采样层和连接层,以提取更丰富的特征信息。同时,为了实现人体姿态点的检测和估计,Yolov8-Pose在输出层上引入了关键点检测的任务分支。

通过以上原理,Yolov8-Pose算法能够在保持检测速度的同时,实现对人体姿势的准确检测,从而在人体姿态估计领域具有一定的应用价值。

【效果】

【部分实现代码】

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenCvSharp;

namespace FIRC
{
    public partial class Form1 : Form
    {
        Mat src = new Mat();
        Yolov8PoseManager ypm = new Yolov8PoseManager();
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "图文件(*.*)|*.jpg;*.png;*.jpeg;*.bmp";
            openFileDialog.RestoreDirectory = true;
            openFileDialog.Multiselect = false;
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
              
                src = Cv2.ImRead(openFileDialog.FileName);
                pictureBox1.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(src);


            }


        }

        private void button2_Click(object sender, EventArgs e)
        {
            if(pictureBox1.Image==null)
            {
                return;
            }
            Stopwatch sw = new Stopwatch();
            sw.Start();
            var result = ypm.Inference(src);
            sw.Stop();
            this.Text = "耗时" + sw.Elapsed.TotalSeconds + "秒";
            var resultMat = ypm.DrawImage(src,result);
            pictureBox2.Image= OpenCvSharp.Extensions.BitmapConverter.ToBitmap(resultMat); //Mat转Bitmap
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            ypm.LoadWeights(Application.StartupPath+ "\\weights\\yolov8n-pose.onnx");

        }

        private void btn_video_Click(object sender, EventArgs e)
        {
  
        }
    }
}

【测试环境】

vs2019

net framework4.7.2

【视频演示】

bilibili.com/video/BV1T64y1E7ws/

【源码下载地址】

download.csdn.net/download/FL1623863129/88691350