Customized Stream Pipeline

Install XRViewer:

# Create conda virtual env and install XRViewer
conda create -n CustomizedStream python=3.10
git clone https://github.com/openxrlab/xrviewer.git
cd xrviewer/
pip install .

To create a customized stream pipeline, you should create a class inherited from Pipeline in xrviewer/server/pipelines/base.py. Then, implement the forward, update_stream_data and get_faces to parse your data:

from xrviewer.server.pipelines import Pipeline
from typing import Union, Optional, List
import logging

class CustomizedStreamPipeline(Pipeline):

    def __init__(self,
                 websocket_port: int = 4567,
                 zmq_port: Optional[int] = None,
                 websocket_server_ip: str = '127.0.0.1',
                 state_relief_time: float = 0.5,
                 buffer_relief_time: float = 0.05,
                 logger: Union[None, str, logging.Logger] = None) -> None:
        super().__init__(websocket_port, zmq_port, websocket_server_ip,
                         state_relief_time, buffer_relief_time, logger)

    def forward(self, frame_idx: int) -> List[List[float]]:
        """Get mesh vertices by the given frame index.

        Args:
            frame_idx (int): frame index in infer

        Returns:
            List[List[float]]:
                A nested list for inferred vertices,
                shape: [n_verts, 3].
        """
        # implement your logic here
        pass

    def update_stream_data(self, stream_data: bytes) -> int:
        """Set stream data.

        Args:
            stream_data (bytes): stream data uploaded
                from the viewer in bytes

        Returns:
            int: number of frames in the stream data
        """
        # implement your logic here
        pass

    def get_faces(self) -> List[int]:
        """Get face indices.

        Returns:
            List[int]: the requested face indices, organized as a [|F|, 3] list
        """
        # implement your logic here
        pass

Once the CustomizedStreamPipeline is available, create the pipeline and enter the event loop:

import CustomizedStreamPipeline

if __name__ == "__main__":
    pipeline = CustomizedStreamPipeline(
        websocket_port=websocket_port,
        zmq_port=zmq_port,
        websocket_server_ip=websocket_server_ip,
        frame_rate=60)

    pipeline.event_loop()