Dora-rs 机器人框架学习教程(3)——利用yolo实现目标检测

文章目录

  • [1 安装pytroch环境](#1 安装pytroch环境)
    • [1.1 nvidia驱动](#1.1 nvidia驱动)
    • [1.2 安装cuda](#1.2 安装cuda)
    • [1.3 在conda中安装pytorch GPU版本](#1.3 在conda中安装pytorch GPU版本)
    • [1.4 检验pytroch是否安装正确](#1.4 检验pytroch是否安装正确)
  • [2 编写程序代码](#2 编写程序代码)
    • [2.1 object_detection.py文件内容如下:](#2.1 object_detection.py文件内容如下:)
    • [2.2 dataflow.yml 文件内容如下:](#2.2 dataflow.yml 文件内容如下:)
  • [3 运行](#3 运行)
  • 参考资料

目标:在dora框架下编写一个Python节点读取USB摄像头数据,并调用yolo目标检测API接口函数实现目标检测。

1 安装pytroch环境

1.1 nvidia驱动

打开ubuntu的software&updates,选择其中的additional drivers ,选择一个对应驱动

1.2 安装cuda

执行下述命令,安装ubuntu官方库里的cuda

sudo apt install nvidia-cuda-toolkit

查看cuda版本 nvcc -V

这里我的电脑上的cuda是12.0,在pytroch的官网上是没有,但是我们可以选择对应cuda11.8的版本也是可以

1.3 在conda中安装pytorch GPU版本

pytorch 官网[1]选择对应版本的 pytorch

首先激活conda环境

shell 复制代码
conda create -n dorars python=3.11
conda activate dorars
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia

安装过程会出现以下信息

1.4 检验pytroch是否安装正确

在安装完后,本节的步骤将会测试安装是否成功,首先进入你之前建的anaconda虚拟环境,输入:

python 复制代码
python

进入python终端模式,在终端中输入

python 复制代码
import torch
print(torch.rand(5, 3))

安装成功以后会输出以下信息:

接下来输入

python 复制代码
torch.cuda.is_available()

如果输出True那就表示安装环境OK

2 编写程序代码

这里我是在coda环境下运行dora节点的,

step1: 首先激活conda环境

shell 复制代码
conda create -n dorars python=3.11
conda activate dorars

step2: 下载文件,这里涉及4个文件

  • webcam.py 读取摄像头或者视频流数据,并发布到dora中
  • object_detection.py yolov5相关代码
  • plot.py 显示yolov5输出的结果
  • dataflow.yml 配置文件
bash 复制代码
wget https://raw.githubusercontent.com/dora-rs/dora/v0.3.0/examples/python-operator-dataflow/webcam.py
wget https://raw.githubusercontent.com/dora-rs/dora/v0.3.0/examples/python-operator-dataflow/plot.py
wget https://raw.githubusercontent.com/dora-rs/dora/v0.3.0/examples/python-operator-dataflow/utils.py
wget https://raw.githubusercontent.com/dora-rs/dora/v0.3.0/examples/python-operator-dataflow/object_detection.py
wget https://raw.githubusercontent.com/dora-rs/dora/v0.3.0/examples/python-operator-dataflow/dataflow.yaml

2.1 object_detection.py文件内容如下:

python 复制代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import cv2
import numpy as np
import pyarrow as pa
import torch

from dora import DoraStatus

pa.array([])

CAMERA_WIDTH = 640
CAMERA_HEIGHT = 480

class Operator:
    """
    Infering object from images
    """

    def __init__(self):
        self.model = torch.hub.load("ultralytics/yolov5", "yolov5n")

    def on_event(
        self,
        dora_event,
        send_output,
    ) -> DoraStatus:
        if dora_event["type"] == "INPUT":
            return self.on_input(dora_event, send_output)
        return DoraStatus.CONTINUE

    def on_input(
        self,
        dora_input,
        send_output,
    ) -> DoraStatus:
        """Handle image
        Args:
            dora_input (dict) containing the "id", "value", and "metadata"
            send_output Callable[[str, bytes | pa.Array, Optional[dict]], None]:
                Function for sending output to the dataflow:
                - First argument is the `output_id`
                - Second argument is the data as either bytes or `pa.Array`
                - Third argument is dora metadata dict
                e.g.: `send_output("bbox", pa.array([100], type=pa.uint8()), dora_event["metadata"])`
        """

        frame = dora_input["value"].to_numpy().reshape((CAMERA_HEIGHT, CAMERA_WIDTH, 3))
        frame = frame[:, :, ::-1]  # OpenCV image (BGR to RGB)
        results = self.model(frame)  # includes NMS
        arrays = pa.array(np.array(results.xyxy[0].cpu()).ravel())
        send_output("bbox", arrays, dora_input["metadata"])
        return DoraStatus.CONTINUE

2.2 dataflow.yml 文件内容如下:

bash 复制代码
 nodes:
  - id: webcam
    operator:
      python: webcam.py
      inputs:
        tick: dora/timer/millis/100
      outputs:
        - image

  - id: object_detection
    operator:
      python: object_detection.py
      inputs:
        image: webcam/image
      outputs:
        - bbox

  - id: plot
    operator:
      python: plot.py
      inputs:
        image: webcam/image
        bbox: object_detection/bbox

3 运行

新建一个终端,进入conda环境

shell 复制代码
conda create -n dorars python=3.11
conda activate dorars

启动dora节点

bash 复制代码
dora up
dora start dataflow_yolo.yml --attach

这里去网上找了一个视频,修改 webcam.py 读取视频文件进行测试

参考资料

[1] https://pytorch.org/get-started/locally/

[2] https://dora.carsmos.ai/docs/guides/getting-started/yolov5

dora-rs目前资料较少 欢迎大家点赞在评论区交流讨论(cenruping@vip.qq.com) O(∩_∩)O

或者加群水一波(1149897304)

相关推荐
吾名招财7 小时前
yolov5-7.0模型DNN加载函数及参数详解(重要)
c++·人工智能·yolo·dnn
FL16238631297 小时前
[深度学习][python]yolov11+bytetrack+pyqt5实现目标追踪
深度学习·qt·yolo
FL16238631298 小时前
[C++]使用纯opencv部署yolov11旋转框目标检测
opencv·yolo·目标检测
weixin_466485118 小时前
Yolov8分类检测记录
yolo·分类·数据挖掘
方世恩11 小时前
【进阶OpenCV】 (5)--指纹验证
人工智能·opencv·目标检测·计算机视觉
FL162386312911 小时前
[C++]使用纯opencv部署yolov11-pose姿态估计onnx模型
c++·opencv·yolo
Eric.Lee202113 小时前
数据集-目标检测系列- 螃蟹 检测数据集 crab >> DataBall
python·深度学习·算法·目标检测·计算机视觉·数据集·螃蟹检测
给算法爸爸上香16 小时前
YOLOv11尝鲜测试五分钟极简配置
yolo·目标检测·yolov11
xuehaishijue17 小时前
红外画面空中目标检测系统源码分享
人工智能·目标检测·计算机视觉
Q_w774219 小时前
计算机视觉小目标检测模型
人工智能·目标检测·计算机视觉