基于安卓平台的Yolov8+Bytetrack,实现多目标跟踪。

2025-04-29 0 802

#创作灵感#

最近在实习了,主要工作是进行计算机视觉的调优。同时负责在嵌入式平台的部署。公司拿出的方案是在RK3588上面部署,但是不用RKNN的方案,而是安卓平台!对于基本上不接触安卓平台的我来说还是挺有意思的。但是安卓的ncnn可以方便后续代码的通用,好吧…所以这一期就分享一下我在安卓平台部署yolov8+bytetrack进行多目标跟踪的过程吧。。。

目录

 1、模型的训练

2、模型的导出

3、安卓端部署

4、bytetrack的移植

 1、模型的训练

为了适配飞鸽传书大佬GitHub – FeiGeChuanShu/ncnn-android-yolov8: Real time yolov8 Android demo by ncnn基于安卓平台的Yolov8+Bytetrack,实现多目标跟踪。https://bgithub.xyz/FeiGeChuanShu/ncnn-android-yolov8的工程,Ultralytics版本是有要求的。我选择的版本是8.0.197。这里说不清的东西太多了,ncnn在使用时其实很方便,但是部署的配套性感觉不是很好。Ultralytics版本不对,你进行模型转换后结构就不对,导致程序闪退。或者乱框等等。。。

然后训练之类的都一样,重点是版本的选择。

2、模型的导出

1、导出onnx。模型导出就挺方便的,但是很容易出错。由于c2f模块在ncnn端推理性能的影响,作者对这一块进行了优化。并且在检测头方面也进行了相应的优化。具体参考GitHub,这一块按照提供的来就行。应对这一块我是推荐单独创建一个环境,然后将环境Ultralytics里的c2f和Detect模块进行更改,然后用这一虚拟环境导出。这样出错率会大大降低。这个可以参考这位博主的在Android端本地部署yolov8_yolo android-CSDN博客。也可以在工程里更改,但是训练时记得改回来。要不然无法训练。

2、导出ncnn,这个就可以用现成的工具,具体的自己可以找一找(找不到的可以私聊找我获取)。这个也就是为什么比rknn那一套方便的原因。不需要你安装linux环境然后转换。

3、安卓端部署

具体的环境搭建可以参考上面提到的博客,或者其他的。这个方面我不是很熟悉,毕竟我是搞嵌入式linux端的,我也是叫搞java的同事配好的。

把工程导入到android studio,然后就可以简单的跑目标检测了。

4、bytetrack的移植

参考代码源地址为:yaoyi30/ByteTrack_ncnn_Android: This is an android app about pedestrian identification and tracking, use ByteTrack基于安卓平台的Yolov8+Bytetrack,实现多目标跟踪。https://github.com/yaoyi30/ByteTrack_ncnn_Android首先bytetrack需要依赖eigen这个包。下载源码,地址为:https://drive.google.com/file/d/1rqO74CYCNrmRAg8Rra0JP3yZtJ-rfket/view or 百度网盘:百度网盘 请输入提取码 (code:ueq4)。参照提供的github,把eigen-3.3.9放入jni里面就行。然后在原来安卓目标检测app/src/main/jni/yolo.cpp里画框的位置进行代码修改,改为bytetrack逻辑就行了。

int Yolox::draw(cv::Mat& rgb, const std::vector<Object>& objects)
{

    vector<STrack> output_stracks = tracker.update(objects);
    for (int i = 0; i < output_stracks.size(); i++)
    {
        vector<float> tlwh = output_stracks[i].tlwh;
        bool vertical = tlwh[2] / tlwh[3] > 1.6;
        if (tlwh[2] * tlwh[3] > 20 && !vertical)
        {
            Scalar s = tracker.get_color(output_stracks[i].track_id);
            putText(rgb, format("%d", output_stracks[i].track_id), Point(tlwh[0], tlwh[1] - 5),
                    0, 0.5, Scalar(255, 0, 0), 2, LINE_AA);
            rectangle(rgb, Rect(tlwh[0], tlwh[1], tlwh[2], tlwh[3]), s, 2);
        }
    }

    return 0;
}

然后cmakelist记得改,加入eigen的头文件和源代码。INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/eigen-3.3.9),

然后在jni里面加入bytetrack的源代码和头文件。最后从头编译即可。以下为效果图。

基于安卓平台的Yolov8+Bytetrack,实现多目标跟踪。

平台声明:以上文章转载于《CSDN》,文章全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,仅作参考。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_58365805/article/details/146897522

遇见资源网 移动开发 基于安卓平台的Yolov8+Bytetrack,实现多目标跟踪。 http://www.ox520.com/157853.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务