DeepStream deepstream-app yolov8 error

Based on this:
Seeedstudio
YOLOv8-DeepStream-TRT-Jetson/

Running latest JetPack, DeepStream
on Jetson Orin Nano developer

jg@tensor:/media/jg/tensordisk/ultralytics/DeepStream-Yolo$ sudo deepstream-app -c deepstream_app_config.txt
** ERROR: <create_osd_bin:62>: Failed to create ‘nvosd0’
** ERROR: <create_osd_bin:99>: create_osd_bin failed
** ERROR: <create_processing_instance:815>: create_processing_instance failed
** ERROR: <create_pipeline:1327>: create_pipeline failed
** ERROR: main:697: Failed to create pipeline
Quitting
App run failed

Assumed instructions were pretty current since yolov8 is not that old.

Please provide complete information as applicable to your setup.
• Hardware Platform (Jetson / GPU)
• DeepStream Version
• JetPack Version (valid for Jetson only)
• TensorRT Version
• NVIDIA GPU Driver Version (valid for GPU only)
• Issue Type( questions, new requirements, bugs)
• How to reproduce the issue ? (This is for bugs. Including which sample app is using, the configuration files content, the command line used and other details for reproducing)
• Requirement details( This is for new requirement. Including the module name-for which plugin or for which sample application, the function description)
• The pipeline being used

Can you provide a script that will dump all that info, seems like since thats a basic requirement, a simple script should be available.
Thanks!

Please provide the output of “cat /etc/nv_tegra_release” and “deepstream-all --version”?
Please also provide the information about “ultralytics/DeepStream-Yolo”, it’s not maintained by Nvidia.

g@tensor:/media/jg/tensordisk/ultralytics$ cat /etc/nv_tegra_release

R35 (release), REVISION: 3.1, GCID: 32827747, BOARD: t186ref, EABI: aarch64, DATE: Sun Mar 19 15:19:21 UTC 2023

I cant locate the deepstream-all command on the system:

g@tensor:/media/jg/tensordisk/ultralytics$ sudo find / -name 'deepstream-all' -print
[sudo] password for jg: 
find: ‘/proc/54828’: No such file or directory
find: ‘/run/user/1000/doc’: Permission denied
find: ‘/run/user/1000/gvfs’: Permission denied
find: ‘/run/user/124/gvfs’: Permission denied
jg@tensor:/media/jg/tensordisk/ultralytics$ 

If you mean deepstream-app, that produces:

jg@tensor:/media/jg/tensordisk/ultralytics$ deepstream-app --version
deepstream-app version 6.1.1
DeepStreamSDK 6.1.1
jg@tensor:/media/jg/tensordisk/ultralytics$ 

Expanded output:

jg@tensor:/media/jg/tensordisk/ultralytics/DeepStream-Yolo$ sudo deepstream-app --version-all
deepstream-app version 6.1.1
DeepStreamSDK 6.1.1
CUDA Driver Version: 11.4
CUDA Runtime Version: 11.4
TensorRT Version: 8.5
cuDNN Version: 8.6
libNVWarp360 Version: 2.0.1d3

The DeepStream-Yolo was generated via the instructions here:

from this section:

DeepStream Configuration for YOLOv8

  • Step 1. Clone the following repo
cd ~git clone https://github.com/marcoslucianops/DeepStream-Yolo
  • Step 2. Copy gen_wts_yoloV8.py from DeepStream-Yolo/utils into ultralytics directory
cp DeepStream-Yolo/utils/gen_wts_yoloV8.py ultralytics
  • Step 3. Inside the ultralytics repo, download pt file from YOLOv8 releases (example for YOLOv8s)
wget https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s.pt

Thanks

Not sure if this helps, but as far as basic setup this rudimentary python object detection using yolov8 works on my setup, showing basic components are present. Strangely it doesnt detect GPU so frame rate is only 1 or 2 FPS, but thats another topic.
thanks

import torch
import numpy as np
import cv2
from time import time
from ultralytics import YOLO

import supervision as sv


class ObjectDetection:

    def __init__(self, capture_index):
       
        self.capture_index = capture_index
        
        self.device = 'cuda' if torch.cuda.is_available() else 'cpu'
        print("Using Device: ", self.device)
        
        self.model = self.load_model()
        
        self.CLASS_NAMES_DICT = self.model.model.names
        print(self.CLASS_NAMES_DICT)
    
        self.box_annotator = sv.BoxAnnotator(sv.ColorPalette.default(), thickness=3, text_thickness=3,
 text_scale=1.5)
    

    def load_model(self):
       
        model = YOLO("yolov8s.pt")  # load a pretrained YOLOv8n model
        model.fuse()
    
        return model


    def predict(self, frame):
       
        results = self.model(frame)
        
        return results
    

    def plot_bboxes(self, results, frame):
        
        xyxys = []
        confidences = []
        class_ids = []
        
         # Extract detections for person class
        for result in results:
            boxes = result.boxes.cpu().numpy()
            class_id = boxes.cls[0]
            conf = boxes.conf[0]
            xyxy = boxes.xyxy[0]

            if class_id == 0.0:
          
              xyxys.append(result.boxes.xyxy.cpu().numpy())
              confidences.append(result.boxes.conf.cpu().numpy())
              class_ids.append(result.boxes.cls.cpu().numpy().astype(int))
            
        
        # Setup detections for visualization
        detections = sv.Detections(
                    xyxy=results[0].boxes.xyxy.cpu().numpy(),
                    confidence=results[0].boxes.conf.cpu().numpy(),
                    class_id=results[0].boxes.cls.cpu().numpy().astype(int),
                    )
        
    
        # Format custom labels
        print(detections)
        self.labels = [f"{self.CLASS_NAMES_DICT[class_id]} {confidence:0.2f}"
        for _, mask, confidence, class_id, tracker_id
        in detections]
        
        # Annotate and display frame
        frame = self.box_annotator.annotate(scene=frame, detections=detections, labels=self.labels)
        
        return frame
    
    
    
    def __call__(self):

        cap = cv2.VideoCapture(self.capture_index)
        assert cap.isOpened()
        cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
        cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
      
        while True:
          
            start_time = time()
            
            ret, frame = cap.read()
            assert ret
            
            results = self.predict(frame)
            frame = self.plot_bboxes(results, frame)
            
            end_time = time()
            fps = 1/np.round(end_time - start_time, 2)
             
            cv2.putText(frame, f'FPS: {int(fps)}', (20,70), cv2.FONT_HERSHEY_SIMPLEX, 1.5, (0,255,0), 
2)
            
            cv2.imshow('YOLOv8 Detection', frame)
 
            if cv2.waitKey(5) & 0xFF == 27:
                
                break
        
        cap.release()
        cv2.destroyAllWindows()
        
        
    
detector = ObjectDetection(capture_index=0)
detector()
jg@tensor:/media/jg/tensordisk/ultralytics$ 

From the current error reports alone, it should not be a problem with the model. Also some versions of related software are not compatible in your env. You can refer to the link below:
platform-and-os-compatibility
Could you use the gst-inspect-1.0 nvdsosd cli to run in your env and attach your deepstream_app_config.txt?

Ok, here is the output from gst-inspect-1.0 and the config.
foo (70.8 KB)
deepstream_app_config.txt (869 Bytes)
Thanks.

From the foo file you attached, there is no nvdsosd plugin in your environment. You can check if there are /usr/lib/aarch64-linux-gnu/gstreamer-1.0/deepstream/libnvdsgst_osd.so lib in your env.
Please refer to the link below to setup your env:
https://docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_Quickstart.html#jetson-setup

That file appears to be present:

jg@tensor:~$ ls -tl /usr/lib/aarch64-linux-gnu/gstreamer-1.0/deepstream/libnvdsgst_osd.so
-rwxr-xr-x 1 jg jg 688992 Aug 22  2022 /usr/lib/aarch64-linux-gnu/gstreamer-1.0/deepstream/libnvdsgst_osd.so
jg@tensor:~$ 

I will look over that link regardless.
Thanks.


That link is the basic setup guide, which I followed to get to where we are.
The fact that the reference application “deepstream-app” is running should indicate the basic install was ok, right?
thanks.

No. Since your gst-inspect-1.0 nvdsosd cli did not succeed. Some dynamic libraries that this plugin relies on were not installed successfully. You can use ldd /usr/lib/aarch64-linux-gnu/gstreamer-1.0/deepstream/libnvdsgst_osd.so cli to check which lib isn’t installed successfully.

Well, since I was forced to use the sdk-manager to ‘flash’ the board so I could use another gig of memory, that all seems to be gone and I have to start all over anyway.

OK. If there are still the same issues after the upgrade, please continue to reply on this topic. If there are new issues, please open a new topic.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.