Skip to main content

WebSocket YOLOv5x Inference

This sample demonstrates how to run Ultralytics YOLOv5x object detection on an embedded platform with HBM acceleration and a VIO camera module (such as RDK S100), and stream JPEG images and detection boxes to clients in real time over WebSocket. The sample code is located in /app/pydev_demo/11_web_display_camera_sample/.

This sample demonstrates how to run Ultralytics YOLOv5x object detection on an embedded platform with HBM acceleration and a VIO camera module (such as RDK S600), and stream JPEG images and detection boxes to clients in real time over WebSocket. The sample code is located in /app/pydev_demo/web_display_camera_sample/.

Features​

Y

  • Model loading

    Initialize hbm_runtime, load the model, and obtain input/output names and dimensions.

  • Preprocessing

    Split raw NV12 images into Y/UV channels, scale them to the model input size, and build input tensors in the required format.

  • Inference

    Call .run() to execute BPU inference.

  • Postprocessing

    Decode inference results, filter low-confidence detections, apply NMS, and scale results back to the original image size.

  • Camera management (CameraManager)

    Open the camera, obtain raw or model-sized images, and encode them as JPEG.

  • WebSocket server

    Accept web client connections, continuously fetch camera frames, run detection, and return Protocol Buffer results to the web client.

Model Description​

See the Ultralytics YOLOv5x object detection sample section.

Environment Dependencies​

  • Ensure the dependencies in pydev are installed

    pip install -r ../requirements.txt
  • Install WebSocket packages

    pip install websockets==15.0.1 protobuf==3.20.3
    pip install websockets==15.0.1 protobuf==3.20.3 --break-system-packages

Hardware Requirements​

  • The MIPI camera interface uses auto-detection mode. Only one MIPI camera may be connected when running this sample (any MIPI port is supported). Connecting multiple cameras will cause errors.
  • This sample currently supports only MIPI sensors: IMX219 and SC230AI.

Directory Structure​

.
├── mipi_camera_web_yolov5x.py # Main program
└── README.md # Usage instructions

Parameter Description​

ParameterDescriptionDefault Value
--model-pathBPU quantized model path (.hbm)/opt/hobot/model/s100/basic/yolov5x_672x672_nv12.hbm
--priorityInference priority (0~255, 255 is highest)0
--bpu-coresBPU core index list (for example, 0 1)[0]
--label-fileClass label file path/app/res/labels/coco_classes.names
--nms-thresIoU threshold for Non-Maximum Suppression (NMS)0.45
--score-thresDetection confidence threshold0.25
ParameterDescriptionDefault Value
--model-pathBPU quantized model path (.hbm)/opt/hobot/model/s600/basic/yolov5x_672x672_nv12.hbm
--priorityInference priority (0~255, 255 is highest)0
--bpu-coresBPU core index list (for example, 0 1)[0]
--label-fileClass label file path/app/res/labels/coco_classes.names
--nms-thresIoU threshold for Non-Maximum Suppression (NMS)0.45
--score-thresDetection confidence threshold0.25

Quick Start​

  • Start the web service

    # 1. Enter the webservice directory
    cd webservice/

    # 2. Start the service
    sudo ./sbin/nginx -p .
  • Run the model

    • Return to the sample directory

      cd ..
    • Use default parameters

      python mipi_camera_web_yolov5x.py
    • Run with specified parameters

      python mipi_camera_web_yolov5x.py \
      --model-path /opt/hobot/model/s100/basic/yolov5x_672x672_nv12.hbm \
      --priority 0 \
      --bpu-cores 0 \
      --label-file /app/res/labels/coco_classes.names \
      --nms-thres 0.45 \
      --score-thres 0.25
      python mipi_camera_web_yolov5x.py \
      --model-path /opt/hobot/model/s600/basic/yolov5x_672x672_nv12.hbm \
      --priority 0 \
      --bpu-cores 0 \
      --label-file /app/res/labels/coco_classes.names \
      --nms-thres 0.45 \
      --score-thres 0.25
  • View results

    After successful execution, open the web display at: http://IP

    Note: Do not include a port number.

  • Exit

    Press Ctrl+C in the terminal.

Notes​

  • If the specified model path does not exist, try searching under /opt/hobot/model/s100/basic/.
  • If the specified model path does not exist, try searching under /opt/hobot/model/s600/basic/.

License​

Copyright (C) 2025, XiangshunZhao D-Robotics.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.