Aref
February 28, 2021, 4:14pm
#1
Hi,
I’m trying to pull the frames data out of the buffer and use them in the CPU by using n_frame=pyds.get_nvds_buf_surface
. The function runs without any problem, but when I try to access the data inside the n_frame
I encounter the SIGSEV error. After some search, according to Python DeepStream documentation and also deepstream-imagedata-multistream , I set the nvbuf-memory-type to cuda unified memory. The error changed to Bus error (core dumped) instead, which I believe is due to the fact that the CPU does not recognize the address type of the output.
Here is the pipeline I’m using:
export SRC=/opt/nvidia/deepstream/deepstream-5.1/
gst-launch-1.0 filesrc location= $SRC/samples/streams/sample_1080p_h264.mp4 ! qtdemux ! h264parse ! nvv4l2decoder cudadec-memtype=2 ! m.sink_0 nvstreammux name=m batch-size=1 width=1920 height=1080 nvbuf-memory-type=3 ! nvinfer config-file-path= $SRC/samples/configs/deepstream-app/config_infer_primary.txt batch-size=1 unique-id=1 ! nvtracker ll-lib-file=/opt/nvidia/deepstream/deepstream-5.1/lib/libnvds_mot_klt.so ! nvvideoconvert nvbuf-memory-type=3 ! ‘video/x-raw(memory:NVMM), format=RGBA’ ! nvvideoconvert nvbuf-memory-type=3 ! my_element
and in my_element (which is a sink element) I run these lines of code:
n_frame = pyds.get_nvds_buf_surface(hash(buffer), frame_meta.batch_id)
print(n_frame[0, :])
The function only works for one frame and then the bus error happens.
• Hardware Platform: GPU
• DeepStream Version: 5.1
• 7.2.2-1
• NVIDIA GPU Driver Version: 460.27.04
• Issue Type: bugs
I appreciate it if you could help me to fix the issue.
Thanks a lot.
Can you share your implementation of “my_element”?
Aref
March 2, 2021, 8:16am
#4
@Fiona.Chen
Here you are:
import numpy as np
import gi
import pyds
gi.require_version("Gst", "1.0")
gi.require_version("GstBase", "1.0")
from gi.repository import Gst, GObject, GstBase
class MyElement(GstBase.BaseSink):
GST_PLUGIN_NAME = "my_element"
__gsttemplates__ = Gst.PadTemplate.new(
"sink", Gst.PadDirection.SINK, Gst.PadPresence.ALWAYS, Gst.Caps.new_any()
)
def __init__(self) -> None:
super().__init__()
def do_render(self, buffer):
Gst.info("timestamp(buffer):%s" % (Gst.TIME_ARGS(buffer.pts)))
batch_meta = pyds.gst_buffer_get_nvds_batch_meta(hash(buffer))
frame = self.get_frame_from_buffer(buffer, batch_meta)
return Gst.FlowReturn.OK
@staticmethod
def get_frame_from_buffer(
buffer: Gst.Buffer, batch_meta: pyds.NvDsBatchMeta) -> np.ndarray:
np_frame = None
l_frame = batch_meta.frame_meta_list
while l_frame is not None:
frame_meta = pyds.NvDsFrameMeta.cast(l_frame.data)
np_frame = pyds.get_nvds_buf_surface(hash(buffer), frame_meta.batch_id)
print(np_frame[0, :])
try:
l_frame = l_frame.next
except StopIteration:
break
return np_frame
GObject.type_register(MyElement)
__gstelementfactory__ = (
MyElement.GST_PLUGIN_NAME,
Gst.Rank.NONE,
MyElement,
)
elem.py (1.3 KB)
I should note that I have been able to run this code successfully by following the deepstream-imagedata-multistream on a Jetson NX device (without setting the nvbuf-memory-type).
So this pipeline can work on Jetson but failed with dGPU?
Aref
March 2, 2021, 8:57am
#6
Yes, that’s true. I also encountered the same issue on dGPU when running the deepstream-imagedata-multistream itself.
Hi Aref, what dGPU model are you using? Please share the console output from running deepstream-imagedata-multistream . Thank you!
Aref
March 3, 2021, 5:27pm
#8
Hi @zhliunycm2 ,
I’m using NVIDIA GeForce GTX 960M . I suspected that the error is due to my GPU model and the fact that it is a laptop GPU. I’m planning to check again with an Nvidia GeForce GTX 1080 Ti .
Here is the output of running
export SRC=/opt/nvidia/deepstream/deepstream-5.1/
python3 deepstream_imagedata-multistream.py file://$SRC/samples/streams/sample_720p.mp4 frames
Frames will be saved in frames
Creating Pipeline
Creating streamux
Creating source_bin 0
Creating source bin
source-bin-00
Creating Pgie
Creating nvvidconv1
Creating filter1
Creating tiler
Creating nvvidconv
Creating nvosd
Creating EGLSink
Adding elements to Pipeline
Linking elements in the Pipeline
Now playing...
1 : file:///opt/nvidia/deepstream/deepstream-5.1//samples/streams/sample_720p.mp4
Starting pipeline
0:00:00.845747471 71 0x19ec180 INFO nvinfer gstnvinfer.cpp:619:gst_nvinfer_logger:<primary-inference> NvDsInferContext[UID 1]: Info from NvDsInferContextImpl::deserializeEngineAndBackend() <nvdsinfer_context_impl.cpp:1702> [UID = 1]: deserialized trt engine from :/opt/nvidia/deepstream/deepstream-5.1/samples/models/Primary_Detector/resnet10.caffemodel_b1_gpu0_fp32.engine
INFO: ../nvdsinfer/nvdsinfer_model_builder.cpp:685 [Implicit Engine Info]: layers num: 3
0 INPUT kFLOAT input_1 3x368x640
1 OUTPUT kFLOAT conv2d_bbox 16x23x40
2 OUTPUT kFLOAT conv2d_cov/Sigmoid 4x23x40
0:00:00.845873495 71 0x19ec180 INFO nvinfer gstnvinfer.cpp:619:gst_nvinfer_logger:<primary-inference> NvDsInferContext[UID 1]: Info from NvDsInferContextImpl::generateBackendContext() <nvdsinfer_context_impl.cpp:1806> [UID = 1]: Use deserialized engine model: /opt/nvidia/deepstream/deepstream-5.1/samples/models/Primary_Detector/resnet10.caffemodel_b1_gpu0_fp32.engine
0:00:00.846769526 71 0x19ec180 INFO nvinfer gstnvinfer_impl.cpp:313:notifyLoadModelStatus:<primary-inference> [UID 1]: Load new model:dstest_imagedata_config.txt sucessfully
Decodebin child added: source
Decodebin child added: decodebin0
Decodebin child added: qtdemux0
Decodebin child added: multiqueue0
Decodebin child added: h264parse0
Decodebin child added: capsfilter0
Decodebin child added: aacparse0
Decodebin child added: avdec_aac0
Decodebin child added: nvv4l2decoder0
In cb_newpad
In cb_newpad
Frame Number= 0 Number of Objects= 8 Vehicle_count= 6 Person_count= 2
Frame Number= 1 Number of Objects= 7 Vehicle_count= 5 Person_count= 2
Frame Number= 2 Number of Objects= 7 Vehicle_count= 5 Person_count= 2
Frame Number= 3 Number of Objects= 7 Vehicle_count= 4 Person_count= 3
Frame Number= 4 Number of Objects= 8 Vehicle_count= 6 Person_count= 2
Frame Number= 5 Number of Objects= 5 Vehicle_count= 3 Person_count= 2
Frame Number= 6 Number of Objects= 5 Vehicle_count= 3 Person_count= 2
Frame Number= 7 Number of Objects= 6 Vehicle_count= 4 Person_count= 2
Frame Number= 8 Number of Objects= 6 Vehicle_count= 4 Person_count= 2
Frame Number= 9 Number of Objects= 6 Vehicle_count= 4 Person_count= 2
Frame Number= 10 Number of Objects= 7 Vehicle_count= 5 Person_count= 2
Frame Number= 11 Number of Objects= 8 Vehicle_count= 6 Person_count= 2
Frame Number= 12 Number of Objects= 8 Vehicle_count= 6 Person_count= 2
Frame Number= 13 Number of Objects= 8 Vehicle_count= 6 Person_count= 2
Frame Number= 14 Number of Objects= 7 Vehicle_count= 5 Person_count= 2
Frame Number= 15 Number of Objects= 7 Vehicle_count= 5 Person_count= 2
Frame Number= 16 Number of Objects= 7 Vehicle_count= 5 Person_count= 2
Frame Number= 17 Number of Objects= 6 Vehicle_count= 4 Person_count= 2
Frame Number= 18 Number of Objects= 7 Vehicle_count= 5 Person_count= 2
Frame Number= 19 Number of Objects= 8 Vehicle_count= 6 Person_count= 2
Frame Number= 20 Number of Objects= 6 Vehicle_count= 4 Person_count= 2
Frame Number= 21 Number of Objects= 9 Vehicle_count= 6 Person_count= 3
Frame Number= 22 Number of Objects= 9 Vehicle_count= 7 Person_count= 2
Frame Number= 23 Number of Objects= 7 Vehicle_count= 5 Person_count= 2
Frame Number= 24 Number of Objects= 8 Vehicle_count= 6 Person_count= 2
Frame Number= 25 Number of Objects= 8 Vehicle_count= 6 Person_count= 2
Frame Number= 26 Number of Objects= 9 Vehicle_count= 7 Person_count= 2
Frame Number= 27 Number of Objects= 8 Vehicle_count= 6 Person_count= 2
Frame Number= 28 Number of Objects= 7 Vehicle_count= 5 Person_count= 2
Frame Number= 29 Number of Objects= 9 Vehicle_count= 7 Person_count= 2
Frame Number= 30 Number of Objects= 9 Vehicle_count= 6 Person_count= 3
Frame Number= 31 Number of Objects= 10 Vehicle_count= 7 Person_count= 3
Frame Number= 32 Number of Objects= 11 Vehicle_count= 8 Person_count= 3
Frame Number= 33 Number of Objects= 10 Vehicle_count= 8 Person_count= 2
Frame Number= 34 Number of Objects= 10 Vehicle_count= 8 Person_count= 2
Frame Number= 35 Number of Objects= 10 Vehicle_count= 8 Person_count= 2
Frame Number= 36 Number of Objects= 13 Vehicle_count= 9 Person_count= 4
Frame Number= 37 Number of Objects= 14 Vehicle_count= 10 Person_count= 4
Frame Number= 38 Number of Objects= 11 Vehicle_count= 8 Person_count= 3
Frame Number= 39 Number of Objects= 10 Vehicle_count= 8 Person_count= 2
Frame Number= 40 Number of Objects= 10 Vehicle_count= 7 Person_count= 3
Frame Number= 41 Number of Objects= 10 Vehicle_count= 8 Person_count= 2
Frame Number= 42 Number of Objects= 13 Vehicle_count= 10 Person_count= 3
Frame Number= 43 Number of Objects= 13 Vehicle_count= 9 Person_count= 4
Frame Number= 44 Number of Objects= 14 Vehicle_count= 10 Person_count= 4
Frame Number= 45 Number of Objects= 12 Vehicle_count= 9 Person_count= 3
Frame Number= 46 Number of Objects= 9 Vehicle_count= 6 Person_count= 3
Frame Number= 47 Number of Objects= 9 Vehicle_count= 6 Person_count= 3
Frame Number= 48 Number of Objects= 10 Vehicle_count= 6 Person_count= 4
Frame Number= 49 Number of Objects= 9 Vehicle_count= 6 Person_count= 3
Frame Number= 50 Number of Objects= 10 Vehicle_count= 7 Person_count= 3
Frame Number= 51 Number of Objects= 11 Vehicle_count= 8 Person_count= 3
Frame Number= 52 Number of Objects= 9 Vehicle_count= 6 Person_count= 3
Frame Number= 53 Number of Objects= 9 Vehicle_count= 6 Person_count= 3
Frame Number= 54 Number of Objects= 10 Vehicle_count= 7 Person_count= 3
Frame Number= 55 Number of Objects= 10 Vehicle_count= 7 Person_count= 3
Frame Number= 56 Number of Objects= 11 Vehicle_count= 8 Person_count= 3
Frame Number= 57 Number of Objects= 11 Vehicle_count= 8 Person_count= 3
Frame Number= 58 Number of Objects= 13 Vehicle_count= 10 Person_count= 3
Frame Number= 59 Number of Objects= 12 Vehicle_count= 9 Person_count= 3
A print just before pyds.get_nvds_buf_surface
Bus error (core dumped)
I just added a print right before the line that causes the error.
Thanks.
@Aref Can you share your application script with the new element? We need to reproduce your problem in out platform.
Hi @Aref , have you tried the GTX 1080 Ti yet? Is this resolved for you?
Aref
March 14, 2021, 9:03am
#11
Hi. @zhliunycm2
Sorry for my delayed response. One of my colleagues reported that he could run the deepstream-imagedata-multistream on GTX 1080 Ti with no problem, so I concluded that the error was due to my GPU model.
Many thanks for your follow-up.