Metadata
개요
-
Metadata는 NuFiStreamer에서 element간에 데이터를 전송하기 위해 사용되는 데이터 구조로 Gst-python 에서 제공하는 Gst.Meta를 확장한 구조입니다. Gst.Buffer 객체에 Metadata를 추가하는 형식으로 작동합니다. 어떤 element에서 메타데이터를 buffer에 저장했다면 이후의 모든 element에서 이 Metadata를 읽거나 수정할 수 있습니다.
-
Metadata는 JSON 형식으로 인코딩된 다음 buffer에 추가되며 다른 element에서 이 데이터를 JSON 디코딩을 통해 불러올 수 있습니다. 어떠한 객체를 메타데이터에 쓰기 위해서는 반드시 JSON 형식으로 인코딩/디코딩할 수 있어야합니다.
NufiResult
-
NuFiStreamer에서 element간에 메타데이터를 주고받기위해 사용되는 클래스입니다.
data
와drawables
속성을 갖습니다.data
: 모델의 결과값으로 JSON 형식으로 인코딩/디코딩 가능한 값이 들어와야 합니다. 앱이나 다른 element에서 해당 모델의 결과값을 이용해야할 경우 data속성에 필요한 값을 할당해주면 됩니다.drawables
:draw
할 때 사용되는 속성으로 주로 이미지에 모델의 결과를 표시하기 위해 사용됩니다.Drawable
객체 목록이 해당 속성의 값으로 들어와야 합니다. 예를 들어, Object Detection에서 bounding box를 이미지에 표시하길 원한다면drawables
에Box
객체 목록을 전달해주면 됩니다. NuFiStreamer에서는 기본적으로Box
,Line
,Point
3가지의Drawable
객체를 제공합니다.Box
:draw
element에서 이미지에 사각형 틀을 그립니다.Line
:draw
element에서 이미지에 선을 그립니다.Point
:draw
element에서 이미지에 점을 그립니다.
예시
-
메타데이터를 사용하는 예시로 NuFiStreamer에서 Yolo모델을 사용하여 Bounding Box를 그리는 과정은 다음과 같습니다.
- nufi element에 등록된 Yolo 모델의
process
메소드를 호출하면NufiResult
리스트가 반환됩니다. NufiResult
리스트에대해 JSON 인코딩을 수행합니다.- 인코딩된 JSON 데이터를 Buffer에 Metadata로 추가합니다.
- 이후
draw
element에서 Buffer의 Metadata를 불러옵니다. - 불러온 Metadata를 디코딩하여
NufiResult
객체로 변환합니다. NufiResult
의drawables
에 등록된Box
객체를 이미지상에 그립니다.
- nufi element에 등록된 Yolo 모델의