返回

10分钟带你玩转YOLOv8人体姿态估计,C++部署超简单

后端

YOLOv8:姿势估计的强大引擎

简介

YOLOv8,一个尖端的人体姿态估计模型,以其卓越的速度和精度而著称。该模型利用深度学习的力量,通过大量的人体姿态数据集的训练,识别和定位人体关键点。在推理期间,YOLOv8处理图像并生成关键点的坐标和置信度,使开发人员能够准确理解图像中的人体姿态。

Python推理

为了轻松地对图像进行姿态估计,YOLOv8提供了直观的Python推理脚本。只需几个简单的步骤,即可使用此脚本:

  1. 安装依赖项: 安装YOLOv8和必要的库,如OpenCV和NumPy。
  2. 加载图像: 将要处理的图像导入脚本。
  3. 运行推理: 执行推理过程,提取图像中人体关键点的信息。
  4. 结果解析: 脚本将生成每个关键点的坐标和置信度。

代码示例:

import cv2
import numpy as np

model = cv2.dnn.readNetFromONNX("yolov8.onnx")
image = cv2.imread("image.jpg")

image = cv2.resize(image, (640, 640))
image = image / 255.0

blob = cv2.dnn.blobFromImage(image, 1 / 255.0, (640, 640), (0, 0, 0), swapRB=True, crop=False)

model.setInput(blob)
outputs = model.forward()

for output in outputs:
    for detection in output:
        if detection[5] > 0.5:
            x, y, w, h = detection[0:4] * np.array([image.shape[1], image.shape[0], image.shape[1], image.shape[0]])
            cv2.rectangle(image, (int(x - w / 2), int(y - h / 2)), (int(x + w / 2), int(y + h / 2)), (0, 255, 0), 2)

cv2.imshow("Image", image)
cv2.waitKey(0)

ONNX RUNTIME C++部署

要将YOLOv8模型集成到C++应用程序中,ONNX RUNTIME C++部署库提供了便捷的途径。通过以下步骤部署模型:

  1. 安装ONNX RUNTIME: 安装库以及相关的依赖项。
  2. 转换模型: 将YOLOv8模型转换为ONNX格式。
  3. 加载模型: 在C++程序中加载ONNX模型。
  4. 运行推理: 利用ONNX RUNTIME执行推理过程。

代码示例:

#include <opencv2/opencv.hpp>
#include <onnxruntime_c_api.h>

using namespace cv;

int main() {
    Ort::Env env;
    Ort::SessionOptions options;
    Ort::Session session(env, "yolov8.onnx", options);

    Mat image = imread("image.jpg");
    Mat blob = blobFromImage(image, 1 / 255.0, Size(640, 640), Scalar(0, 0, 0), true, false);

    Ort::Tensor* input_tensor = Ort::Value::CreateTensor<float>(OrtDevice(OrtArenaAllocator, OrtMemTypeCPU),
        blob.ptr(), blob.total() * sizeof(float), {1, 3, 640, 640}, OrtTensorType::kFloat);

    std::vector<Ort::Value*> outputs;
    session.Run(Ort::RunOptions(nullptr), {input_tensor}, "output", &outputs);

    Mat output = outputs[0]->GetTensorMutableData<float>();
    for (int i = 0; i < output.rows; i++) {
        if (output.at<float>(i, 5) > 0.5) {
            float x = output.at<float>(i, 0) * image.cols;
            float y = output.at<float>(i, 1) * image.rows;
            float w = output.at<float>(i, 2) * image.cols;
            float h = output.at<float>(i, 3) * image.rows;
            rectangle(image, Rect(Point(x - w / 2, y - h / 2), Point(x + w / 2, y + h / 2)), Scalar(0, 255, 0), 2);
        }
    }

    imshow("Image", image);
    waitKey(0);

    return 0;
}

结论

YOLOv8凭借其先进的人体姿态估计能力,为计算机视觉应用开辟了新的可能性。通过Python推理脚本和ONNX RUNTIME C++部署库,开发人员可以轻松地将其集成到自己的项目中。无论是图像分析、视频监控还是虚拟现实,YOLOv8都能提供准确且实时的姿态估计解决方案。

常见问题解答

1. YOLOv8的精度如何?
YOLOv8具有出色的精度,在COCO关键点数据集上获得了0.72 AP,使其成为最先进的人体姿态估计模型之一。

2. YOLOv8处理图像的速度如何?
YOLOv8是一个快速且高效的模型,每秒可处理多达100帧。

3. YOLOv8可以检测多少个关键点?
YOLOv8可以检测17个关键点,包括头部、躯干和四肢的关键点。

4. YOLOv8是否支持自定义模型?
YOLOv8提供了一个预训练模型,但您也可以使用自己的数据集对其进行微调以满足特定需求。

5. YOLOv8是否开源?
是的,YOLOv8是一个开源模型,可在GitHub上获得。