在国产芯片上实现YOLOv5/v8图像AI识别-【4.3】RK3588使用yolov8+bytetrack实现跟踪更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案,专栏中实现了YOLOv5/v8在国产化芯片上的使用部署,并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。

B站配套视频:https://www.bilibili.com/video/BV1or421T74f
在这里插入图片描述

背景

不废话直接上代码,反正就是bytetrack是使用计算的方式进行追踪,实现方便。不像deepsort还需要通过神经网络训练,对嵌入式设备非常友善。

你在晚上找到的都是yolov8的python版本自带的bytetrack,我这边开源给大家的是C++版本可以直接在RK3588上实验运行。

安装

本代码核心算法也是来自github上的大神,我将开源项目已经迁移到我的gitee库中开源,如果想尝试从头整合的朋友可以自行提取,本教程只是对内容进行了整合使用。
首先需要安装eigen-git-mirror开源项目,这是实现必备的辅助项目。

unzip eigen-3.3.9.zip
cd eigen-3.3.9
mkdir build
cd build
cmake ..
sudo make install

配置

1、vscode开发环境配置

在安装完eigen3.3.9之后,修改配置文件引入项目,我的安装地址是usr/local/include,这个根据个人的安装地址修改。
在这里插入图片描述

2、修改项目cmake文件

# 寻找Eigen3
set(EIGEN_VERSION 3.3)
find_package(Eigen3 ${EIGEN_VERSION} QUIET)

# 引入Eigen3
include_directories(/usr/include/eigen3)

# bytetrack_lib
add_library(bytetrack_lib SHARED
  src/bytetrack/BYTETracker.cpp
  src/bytetrack/kalmanFilter.cpp
  src/bytetrack/lapjv.cpp
  src/bytetrack/STrack.cpp
  src/bytetrack/utils.cpp
  )

target_link_libraries(bytetrack_lib Eigen3::Eigen)

代码讲解查看视频https://www.bilibili.com/video/BV1or421T74f

3、识别+追踪代码

 // 运行模型
 yolo.Run(img, objects);
 // 绘制框,显示结果
 // DrawDetections(img, objects);
 // 将检测对象转换成追踪对象
 decobj_to_trackobj(objects,trackobj);

 output_stracks = tracker.update(trackobj);

 for (unsigned long i = 0; i < output_stracks.size(); i++)
 {
     std::vector<float> tlwh = output_stracks[i].tlwh;
     bool vertical = tlwh[2] / tlwh[3] > 1.6;
     if (tlwh[2] * tlwh[3] > 20 && !vertical)
     {
         cv::Scalar s = tracker.get_color(output_stracks[i].track_id);
         cv::putText(img, cv::format("%d", output_stracks[i].track_id), cv::Point(tlwh[0], tlwh[1] - 5),
                 0, 0.6, cv::Scalar(0, 0, 255), 2, cv::LINE_AA);
         cv::rectangle(img, cv::Rect(tlwh[0], tlwh[1], tlwh[2], tlwh[3]), s, 2);
     }
 }
void decobj_to_trackobj(std::vector<Detection> &objects, std::vector<Object> &trackobj)
{
    // 如果objects不为空,初始化trackobj
    if (!objects.empty())
    {
        trackobj.clear();
    }
    // 将objects转换为trackobj
    for (auto &obj : objects)
    {
        // 新建Object对象
        Object trackobj_temp;
        trackobj_temp.classId = obj.class_id;
        trackobj_temp.score = obj.confidence;
        trackobj_temp.box = obj.box;
        trackobj.push_back(trackobj_temp);
    }

}

代码讲解查看视频https://www.bilibili.com/video/BV1or421T74f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘子的战斗日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值